/*
 Copyright 2019 Alain Dargelas
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

/* 
 * File:   ClassObject.h
 * Author: alain
 *
 * Created on March 24, 2019, 7:38 PM
 */

#ifndef CLASSOBJECT_H
#define CLASSOBJECT_H

#include "ClassDefinition.h"
#include "../Expression/Value.h"

namespace SURELOG {
    
class ClassObject {
public:
    ClassObject(ClassDefinition* class_def) : m_class(class_def) {}
    ClassObject(const ClassObject& orig);
    virtual ~ClassObject();
    ClassDefinition* getClass() { return m_class; }
    
    typedef std::map<std::string, std::pair<Property*, Value*>> PropertyValueMap;
    
    PropertyValueMap& getProperties() { return m_properties; }
 
    bool setValue(std::string& property, Value* value);
    
    Value* getValue(std::string& property);
    
private:
    ClassDefinition* m_class;
    PropertyValueMap m_properties;
};

};

#endif /* CLASSOBJECT_H */



