| /* |
| 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: ClassDefinition.h |
| * Author: alain |
| * |
| * Created on June 1, 2018, 10:12 PM |
| */ |
| |
| #ifndef CLASSDEFINITION_H |
| #define CLASSDEFINITION_H |
| |
| #include "Design/DesignComponent.h" |
| #include "Design/ValuedComponentI.h" |
| #include "Design/DataType.h" |
| #include "Property.h" |
| #include "FunctionMethod.h" |
| #include "TaskMethod.h" |
| #include "Constraint.h" |
| #include "TypeDef.h" |
| #include "CoverGroupDefinition.h" |
| #include "Design/Parameter.h" |
| |
| namespace SURELOG { |
| class CompileClass; |
| |
| class ClassDefinition : public DesignComponent, public DataType { |
| friend class CompileClass; |
| |
| public: |
| ClassDefinition(std::string name, Library* library, |
| DesignComponent* container, FileContent* fC, NodeId nodeId, |
| ClassDefinition* parent); |
| |
| virtual ~ClassDefinition(); |
| |
| unsigned int getSize(); |
| VObjectType getType() { return (m_fileContents[0]->Type(m_nodeIds[0])); } |
| bool isInstance() { return false; } |
| std::string getName() { return m_name; } |
| Library* getLibrary() { return m_library; } |
| DesignComponent* getContainer() { return m_container; } |
| void setContainer(DesignComponent* container) { m_container = container; } |
| |
| // Parameter definitions are stored DesignComponent maps |
| typedef std::map<std::string, Property*> PropertyMap; |
| typedef std::map<std::string, TaskMethod*> TaskMap; |
| typedef std::map<std::string, Constraint*> ConstraintMap; |
| typedef std::map<std::string, DataType*> BaseClassMap; |
| typedef std::map<std::string, ClassDefinition*> ClassMap; |
| typedef std::map<std::string, CoverGroupDefinition*> CoverGroupMap; |
| typedef std::map<std::string, Parameter*> ParameterMap; |
| |
| PropertyMap& getPropertyMap() { return m_properties; } |
| Property* getProperty(const std::string& name); |
| void insertProperty(Property* p); |
| |
| Function* getFunction(const std::string& name); |
| |
| TaskMap& getTaskMap() { return m_tasks; } |
| TaskMethod* getTask(const std::string& name); |
| void insertTask(TaskMethod* p); |
| |
| ConstraintMap& getConstraintMap() { return m_constraints; } |
| Constraint* getConstraint(const std::string& name); |
| void insertConstraint(Constraint* p); |
| |
| // Nested classes |
| ClassMap& getClassMap() { return m_classes; } |
| ClassDefinition* getClass(const std::string& name); |
| void insertClass(ClassDefinition* p); |
| |
| CoverGroupMap& getCoverGroupMap() { return m_covergroups; } |
| CoverGroupDefinition* getCoverGroup(const std::string& name); |
| void insertCoverGroup(CoverGroupDefinition* p); |
| |
| BaseClassMap& getBaseClassMap() { return m_baseclasses; } |
| DataType* getBaseClass(const std::string& name); |
| void insertBaseClass(DataType* p); |
| |
| ParameterMap& getParameterMap() { return m_parameters; } |
| Parameter* getParameter(const std::string& name); |
| void insertParameter(Parameter* p); |
| |
| DataType* getBaseDataType(std::string type); |
| |
| bool hasCompleteBaseSpecification(); |
| |
| private: |
| std::string m_name; |
| Library* m_library; |
| DesignComponent* m_container; |
| ClassDefinition* m_parent; |
| PropertyMap m_properties; |
| TaskMap m_tasks; |
| ConstraintMap m_constraints; |
| ClassMap m_classes; |
| CoverGroupMap m_covergroups; |
| BaseClassMap m_baseclasses; |
| ParameterMap m_parameters; |
| }; |
| |
| }; // namespace SURELOG |
| |
| #endif /* CLASSDEFINITION_H */ |