ACME.Elements.Design

The root of a design in ACME. A Design contains a set of global Family definitions, a global Typespace which contains the global types defined for the design, and an instance of the System class which describes the topology of the toplevel system. Applications can sub-class the Design class to include application specific design-level interfaces.

class Design : public ACMEDesignObject {

Design ();
char* getName ();
ACMETypespace* getTypespace ();
System* getDescription ();
void setDescription (System *sys);
ACMETypeManager* getTypeManager ();
Family* lookupFamily (char *name);
void addFamily (Family *fam);
FamilyEnumeration* getFamilies ();
void exportACME (ACMEOutputStream *s);
char* getClassname ();
ACMEDesignObject* getScope ();

};
ACME.Elements.ACMEElement

ACMEElement is an abstract base class which corresponds to a one of the basic building blocks of a design; an ACMEElement belongs to the category corresponding to System, Component, Connector, Port, or Role. Every ACMEElement has a set of instances of the Property class and a set of Representations.

class ACMEElement : public ACMEDesignObject {

ACMEElement ();
void exportACME (ACMEOutputStream *s );
void setName (char *name);
char* getName ();
char* getCategoryName ();
CategoryT getCategory ();
void exportACME (FILE *fp);
Design* getParentDesign ();
void setParentDesign (Design *design);
Representation* getParentRepresentation ();
PropertyEnumeration* getProperties ();
PropertyValue* getProperty (char *name);
void setProperty (char *name, PropertyValue *val);
void addProperty (char *name, PropertyType *t, PropertyValue *val);
void deleteProperty (char *name);
void doSetProperty (char *name, PropertyValue *val);
void doAddProperty (Property *p);
void doDeleteProperty (char *name);
RepresentationEnumeration* getRepresentations ();
Representation* getRepresentation (char *name );
void addRepresentation (Representation *rep);
void removeRepresentation (char *name);

};
ACME.Elements.System

A System defines a configuration of elements of ACME, and contains instances of ACMEElements: Components, Connectors, Ports and Roles. It also contains a set of Attachments.

class System : public ACMEElement {

// Constructors

System (char *name, Family *fam );
System ( );
void setParentRepresentation (Representation *rep);
Representation* getParentRepresentation ();
CategoryT getCategory ( { return ACME_SYSTEM };);
// Family and Types
Family* getFamily ();
void setFamily (Family *fam);
ACMETypespace* getTypespace ();
// Constituents
void addComponent (Component *comp);
Component* getComponent (char *comp_name);
void removeComponent (char *comp_name);
void removeComponent (Component *comp);
ComponentEnumeration* getComponents ();
void addConnector (Connector *conn);
Connector* getConnector (char *conn_name);
void removeConnector (char *name);
void removeConnector (Connector *conn);
ConnectorEnumeration* getConnectors ();
void addPort (Port *port);
Port* getPort (char *port_name);
void removePort (char *port_name);
void removePort (Port *port);
PortEnumeration* getPorts ();
void addRole (Role *role);
Role* getRole (char *role_name);
void removeRole (char *role_name);
void removeRole (Role *role);
RoleEnumeration* getRoles ();
void exportACME (ACMEOutputStream *s);
AttachmentEnumeration* getAttachments ();
void addAttachment (Attachment *a);
void addAttachment (Port *p, Role *r);
char* getClassname ();
ACMEDesignObject* getScope ();
// Templates
//void expandTemplates ();
//void resolveAttachments ();

};
ACME.Elements.Attachment

The Attachment class defines an association between a Port and Role which are logically attached in a System. Valid attachments are always a member of an AttachmentMap within a System.

class Attachment : public ACMEDesignObject{

Attachment (Port *p, Role *r);
char* getClassname ();
ACMEDesignObject* getScope ();
void exportACME (ACMEOutputStream *s);
Port* getPort ();
void setPort (Port *p);
Role* getRole ();
void setRole (Role *r );

};
ACME.Elements.Constituent

A Constituent is an abstract base class derived from ACMEElement which corresponds to the basic constituents of a System: Port, Role, Component, Connector.

class Constituent : public ACMEElement {

Constituent ();
ACMEDesignObject* getScope ();
void setProperty (char *name, PropertyValue *val);
void addProperty (char *name, PropertyType *t, PropertyValue *val);
void deleteProperty (char *name);
InstantiationMethodT getInstantiationMethod ();
ElementType* getConstituentType ();
char* getTypeName ();
Representation* getParentRepresentation ();
ACMEElement* getParent ();
void setParent (ACMEElement *parent);

};
ACME.Elements.Component

An ACME Component.

class Component : public Constituent {

Component (char *name, ComponentType *type);
//Component (ACMEStream *stream);
void setName (char *name);
ElementType* getConstituentType ();
CategoryT getCategory ();
char* getClassname ();
void exportACME (ACMEOutputStream *s);
void setType (ComponentType *type);
ComponentType* getType ();
void setPort (char *name, Port *p);
void addPort (char *name, Port *p);
Port* getPort (char *name);
void removePort (char *name);
PortEnumeration* getPorts ();
void doRemovePort (char *name);
void doSetPort (char *name, Port *p);
void doAddPort (char *name, Port *p);
void setInstantiation (ComponentTypeInstantiation *inst);

};
ACME.Elements.Connector

An ACME Connector

class Connector : public Constituent {

Connector (char *name, ConnectorType *t);
void setName (char *name);
CategoryT getCategory ();
void setType (ConnectorType *type);
ConnectorType* getType ();
ElementType* getConstituentType ();
void exportACME (ACMEOutputStream *s);
char* getClassname ();
void setRole (char *name, Role *p);
void addRole (char *name, Role *p);
Role* getRole (char *name);
void removeRole (char *name);
RoleEnumeration* getRoles ();
void doRemoveRole (char *name);
void doSetRole (char *name, Role *p);
void doAddRole (char *name, Role *p);
void setInstantiation (ConnectorTypeInstantiation *inst);

};
ACME.Elements.Port

An ACME Port

class Port : public Constituent {

Port* copy ();
Port (char *name, PortType *t);
// Port (ACMEStream *stream);
void setName (char *name);
void exportACME (ACMEOutputStream *s);
char* getClassname ();
CategoryT getCategory ();
void setType (PortType *type);
PortType* getType ();
ElementType* getConstituentType ();
void setInstantiation (PortTypeInstantiation *inst);

};
ACME.Elements.Role

An ACME Role

class Role : public Constituent {

Role (char *name, RoleType *type);
// Role (ACMEStream *stream);
void setName (char *name);
Role* copy ();
ElementType* getConstituentType ();
CategoryT getCategory ();
void exportACME (ACMEOutputStream *s);
char* getClassname ();
void setType (RoleType *type);
RoleType* getType ();
void setInstantiation (RoleTypeInstantiation *inst);

};
ACME.ConstituentTypes.ACMETypeManager

Manages type define in a design. Includes methods for looking up types based upon the scope. Makes use of local/family and global typespace.

class ACMETypeManager : public ACMEObject {

ACMETypeManager ();
void setDesign (Design *d { design d };);
Design* getDesign ( { return design };);
ElementType* getType (CategoryT cat, System *context, char *name);
// Type lookup by name
PropertyType* getPropertyType (System *context, char *name);
ComponentType* getComponentType (System *context, char *name);
ConnectorType* getConnectorType (System *context, char *name);
PortType* getPortType (System *context, char *name);
RoleType* getRoleType (System *context, char *name);
char* getClassname ();

};
ACME.ConstituentTypes.ACMETypespace

A lookup-table for types. Corresponds to a set of types defined in scope. Bascically, a symbol table for types.

class ACMETypespace : public ACMEObject {

// This should probably be moved to a separate type-manager class // Types // Manipulation of type lists

PropertyTypeEnumeration* getPropertyTypes ();
ComponentTypeEnumeration* getComponentTypes ();
ConnectorTypeEnumeration* getConnectorTypes ();
RoleTypeEnumeration* getRoleTypes ();
PortTypeEnumeration* getPortTypes ();
void addPropertyType (PropertyType *t);
void addComponentType (ComponentType *t);
void addConnectorType (ConnectorType *t);
void addPortType (PortType *t);
void addRoleType (RoleType *t);
// Generic type lookup
ElementType* getType (CategoryT cat, char *name);
void addType (ElementType *type);
// Type lookup by name
PropertyType* getPropertyType (char *name);
ComponentType* getComponentType (char *name);
ConnectorType* getConnectorType (char *name);
PortType* getPortType (char *name);
RoleType* getRoleType (char *name);
char* getClassname ();
// Type instantiation by name. These methods call the corresponding
// instantiate ( methods of the specific type classes.);
/*
Component* instantiateComp (char *comp_type_name);
Component* instantiateComp (char *name, Component *extension);
Component* instantiateCompFromPrototype (char *name, Component *prototype);
Connector* instantiateConn (char *name);
Connector* instantiateConn (char *name, Connector *extension);
Connector* instantiateConnFromPrototype (char *name, Connector *prototype);
Port* instantiatePort (char *name);
Port* instantiatePort (char *name, Port *extension);
Port* instantiatePortFromPrototype (char *name, Port *prototype);
Role* instantiateRole (char *name);
Role* instantiateRole (char *name, Role *extension);
Role* instantiateRoleFromPrototype (char *name, Role *prototype);
*/
};
ACME.ConstituentTypes.Family

This is an ACME Family definition. A Family has a collection of of global types defined for that family that can be used within a System in that Family.

class Family : public ACMEDesignObject {

// Name

Family (char *name);
char* getName ();
void setName (char *name);
ACMETypespace* getTypespace ();
void exportACME (ACMEOutputStream *s);
ACMEDesignObject* getScope ();
char* getClassname ();

};
ACME.ConstituentTypes.PropertyDescription

A PropertyDescription defines a set of Properties. Used as Part of an ElementType definition.

class PropertyDescription : public ACMEDesignObject {

char* getTypeName ();
PropertyDescription (char *n, PropertyType *t, PropertyValue *val);
PropertyValue* getValue ();
PropertyType* getType ();
char* getName ();

};
ACME.ConstituentTypes.ElementType

ElementType is an abstract base class which corresponds to an ACME constituent type. Has concrete derived classes PortType, RoleType, ConnectorType and ComponentType.

class ElementType : public ACMEDesignObject {

void init_instance (Constituent *e );
void init_instance_properties (ACMEElement *e);
bool typeCheck (Constituent *obj);
bool typeCheckProperties (Constituent *obj);
void exportChildDescriptions (ACMEOutputStream *s, char *label, ACMEMap *map);
void exportPropertyDescriptions (ACMEOutputStream *s);
void exportMetaProperties (ACMEOutputStream *s);
bool chkDeleteProperty (Constituent *c, char *name);
bool chkSetProperty (Constituent *c, char *name, PropertyValue *val);
bool chkAddProperty (Constituent *c, char *name, PropertyValue *val);
bool chkSetProperty (Constituent *c, PropertyValue *val);
bool chkDeleteProperty (Constituent *c, Property *p);
bool chkAddProperty (Constituent *c, Property *p);
void setMetaProperty (char *name, PropertyValue *val);
void addMetaProperty (Property *p);
void addMetaProperty (char *name, PropertyValue *val);
PropertyValue* getMetaProperty (char *name);
PropertyEnumeration* getMetaProperties ();
void exportACME (ACMEOutputStream *s );
// Name of type
void setName (char *name);
char* getName ();
PropertyDescriptionEnumeration* getPropertyDescriptions ();
void addPropertyDescription (char *prop_name, PropertyType *t, PropertyValue *value);
void addPropertyDescription (PropertyDescription *t);
void deletePropertyDescription (char *name);
void addSuperType (ElementType *type);
char* getCategoryName ();
CategoryT getCategory ();
ACMEDesignObject* getScope ();

};
ACME.ConstituentTypes.ConstituentDescription

ConstituentDescription is an abstract base class describes a child constituent. Its subclasses, PortDescription and RoleDescription are used to describe valid ports/roles in ComponentTypes/ConnectorTypes.

class ConstituentDescription : public ACMEDesignObject {

ConstituentDescription (char *n);
Constituent* getBody ();
char* getTypeName ();
char* getName ();

};
ACME.ConstituentTypes.PortDescription

Defines a set of Ports. Used in ComponentType.

class PortDescription : public ConstituentDescription {

PortDescription (char *n, PortType *t, Port *body);
Constituent* getBody ();
char* getTypeName ();
PortType* getType ();

};
ACME.ConstituentTypes.RoleDescription

Defines a set of Roles Used in ConnectorType.

class RoleDescription : public ConstituentDescription {

RoleDescription (char *n, RoleType *t, Role *body);
Constituent* getBody ();
char* getTypeName ();
RoleType* getType ();

};
ACME.ConstituentTypes.ComponentType

An ACME component type definition

class ComponentType : public ElementType {

void init_instance (Constituent *e);
void init_instance (Component *comp);
Component* new_instance (char *name);
bool typeCheck (Constituent *obj);
Component* newEmptyInstance ();
Component* newInstance ();
bool typeCheck (Component *obj);
bool chkRemovePort (Component *c, char *name);
bool chkSetPort (Component *c, char *name, Port *p);
bool chkAddPort (Component *c, char *name, Port *p);
PortDescriptionEnumeration* getPortDescriptions ();
void deletePortDescription (char *name);
void addPortDescription (char *name, PortType *t, Port *body);
ComponentType (char *name);
CategoryT getCategory ();
void addSuperType (ElementType *type );
void addSuperType (ComponentType *type );
ComponentTypeEnumeration* getSuperTypes ();
void exportACME (ACMEOutputStream *s);
char* getClassname ();

};
ACME.ConstituentTypes.ConnectorType

An ACME connector type definition.

class ConnectorType : public ElementType {

void init_instance (Constituent *e);
Connector* new_instance (char *name);
bool typeCheck (Constituent *obj);
bool typeCheck (Connector *obj);
RoleDescriptionEnumeration* getRoleDescriptions ();
ConnectorType (char *name);
bool chkRemoveRole (Connector *c, char *name);
bool chkSetRole (Connector *c, char *name, Role *r);
bool chkAddRole (Connector *c, char *name, Role *p);
void deleteRoleDescription (char *name);
void addRoleDescription (char *name, RoleType *t, Role *body);
Connector* instantiate ();
Connector* instantiate (Connector *extension);
Connector* instantiateFromPrototype (Connector *prototype);
CategoryT getCategory ();
void addSuperType (ElementType *type );
void addSuperType (ConnectorType *type );
ConnectorTypeEnumeration* getSuperTypes ();
bool validateInstance (Connector *instance);
void exportACME (ACMEOutputStream *s);
char* getClassname ();

};
ACME.ConstituentTypes.PortType

An ACME Port type definition

class PortType : public ElementType {

void init_instance (Constituent *e);
Port* new_instance (char *name);
bool typeCheck (Port *p);
PortType (char *name);
Port* instantiate ();
Port* instantiate (Port *extension);
Port* instantiateFromPrototype (Port *prototype);
CategoryT getCategory ();
void addSuperType (ElementType *type );
void addSuperType (PortType *type );
PortTypeEnumeration* getSuperTypes ();
void setDescription (Port *body);
Port* getDescription ();
bool validateInstance (Port *instance);
void exportACME (ACMEOutputStream *s);
char* getClassname ();

};
ACME.ConstituentTypes.RoleType

An ACME Role type definition.

class RoleType : public ElementType {

void init_instance (Constituent *e);
Role* new_instance (char *name);
RoleType (char *name);
Role* instantiate ();
Role* instantiate (Role *extension);
Role* instantiateFromPrototype (Role *prototype);
CategoryT getCategory ();
void addSuperType (ElementType *type );
void addSuperType (RoleType *type );
RoleTypeEnumeration* getSuperTypes ();
void setDescription (Role *body);
Role* getDescription ();
bool validateInstance (Role *instance);
void exportACME (ACMEOutputStream *s);
char* getClassname ();

};
ACME.ConstituentTypes.TypeInstantiation

An instance a TypeInstantnation is referenced by every Consituent. It describes how the Constituent was instantiated (i.e., using "new", as a concrete description or from through a template invocation).

class TypeInstantiation : public ACMEDesignObject {

char* getTypeName ();
Constituent* getExtension ( { return NULL };);
ACMEDesignObject* getScope ( { return NULL };);

};
ACME.ConstituentTypes.ComponentTypeInstantiation

An instance a TypeInstantnation is referenced by every Consituent. It describes how the Constituent was instantiated (i.e., using "new", as a concrete description or from through a template invocation).

class ComponentTypeInstantiation : public TypeInstantiation {

ComponentTypeInstantiation (char *name, Component *extension);
Constituent* getExtension ();
Component* getComponentExtension ();
void setExtension (Component *extension);
char* getClassname ();

};
ACME.ConstituentTypes.ConnectorTypeInstantiation

An instance a TypeInstantnation is referenced by every Consituent. It describes how the Constituent was instantiated (i.e., using "new", as a concrete description or from through a template invocation).

class ConnectorTypeInstantiation : public TypeInstantiation {

ConnectorTypeInstantiation (char *name, Connector *extension);
Constituent* getExtension ();
Connector* getConnectorExtension ();
void setExtension (Connector *extension);
char* getClassname ( { return "ConnectorTypeInstantation" };);

};
ACME.ConstituentTypes.PortTypeInstantiation

An instance a TypeInstantnation is referenced by every Consituent. It describes how the Constituent was instantiated (i.e., using "new", as a concrete description or from through a template invocation).

class PortTypeInstantiation : public TypeInstantiation {

PortTypeInstantiation (char *name, Port *extension);
Constituent* getExtension ();
Port* getPortExtension ();
void setExtension (Port *extension);
char* getClassname ();

};
ACME.ConstituentTypes.RoleTypeInstantiation

An instance a TypeInstantnation is referenced by every Consituent. It describes how the Constituent was instantiated (i.e., using "new", as a concrete description or from through a template invocation).

class RoleTypeInstantiation : public TypeInstantiation {

RoleTypeInstantiation (char *name, Role *extension);
Constituent* getExtension ();
Role* getRoleExtension ();
void setExtension (Role *extension);
char* getClassname ();

};
ACME.Representations.AbstractionMap

class AbstractionMap : public ACMEDesignObject {

void exportACME (ACMEOutputStream *fp );

};
ACME.Representations.Binding

class Binding : public ACMEDesignObject {

Binding (Constituent *inner, Constituent *outer);
void exportACME (ACMEOutputStream *fp);
void setInner (Constituent *inner);
void setOuter (Constituent *outer);
Constituent* getInner ();
Constituent* getOuter ();

};
ACME.Representations.Representation

class Representation : public ACMEDesignObject {

AbstractionMap* getAbstractionMap ();
System* getDescription ();
void setDescription (System *sys);
char* getName ();
ACMEElement* getParent ();
void setParent (ACMEElement *p);
CategoryT getCategory ( );
void exportACME (ACMEOutputStream *fp);
ACMEDesignObject* getScope ();

};
ACME.Representations.BindingsMap

class BindingsMap : public AbstractionMap {

BindingEnumeration* getBindings ( );
void exportACME (ACMEOutputStream *fp);

};
ACME.Representations.PortBindingsMap

class PortBindingsMap : public BindingsMap {

PortBindingsMap ();
void addBinding (Binding *b);
void addBinding (Port *outer_port, Port *inner_port);
BindingEnumeration* getBindings ();

};
ACME.Representations.RoleBindingsMap

class RoleBindingsMap : public BindingsMap {

RoleBindingsMap ();
void addBinding (Binding *b);
void addBinding (Role *outer_role, Role *inner_role);
BindingEnumeration* getBindings ();

};
ACME.Representations.ComponentRepresentation

class ComponentRepresentation : public Representation {

Representation* copy ();
ComponentRepresentation ();
ComponentRepresentation (System *sys);
AbstractionMap* getAbstractionMap ();
CategoryT getCategory ();
BindingEnumeration* getBindings ();
PortBindingsMap* getBindingsMap ();
void addBinding (Port *outer_port, Port *inner_port);
// Methods for accessing ports bound to a port here
void exportACME (ACMEOutputStream *fp);
char* getClassname ();

};
ACME.Representations.ConnectorRepresentation

class ConnectorRepresentation : public Representation {

ConnectorRepresentation* copy ();
ConnectorRepresentation ();
ConnectorRepresentation (System *sys);
AbstractionMap* getAbstractionMap ();
BindingEnumeration* getBindings ();
RoleBindingsMap* getBindingsMap ();
void addBinding (Role *outer, Role *inner);
// Methods for accessing bound roles here
CategoryT getCategory ();
void exportACME (ACMEOutputStream *fp);
char* getClassname ();

};
ACME.Representations.PortRepresentation

class PortRepresentation : public Representation {

CategoryT getCategory ();
char* getClassname ();
Representation* copy ();

};
ACME.Representations.RoleRepresentation

class RoleRepresentation : public Representation {

CategoryT getCategory ();
char* getClassname ();
Representation* copy ();

};
ACME.Representations.SystemRepresentation

class SystemRepresentation : public Representation {

CategoryT getCategory ();
char* getClassname ();
Representation* copy ();

};
ACME.Properties.Property

class Property : public ACMEDesignObject {

// Constructors

Property ();
Property (PropertyType *type);
Property (char *prop_name, PropertyType *type, PropertyValue *val);
void setMetaProperty (char *name, PropertyValue *val);
void addMetaProperty (Property *p);
void addMetaProperty (char *name, PropertyValue *val);
PropertyValue* getMetaProperty (char *name);
PropertyEnumeration* getMetaProperties ();
PropertyType* getType ();
void setType (PropertyType *type);
char* getName ();
void setName (char *name);
void exportACME (ACMEOutputStream *s);
// Generic Value interface
PropertyValue* getValue ();
void setValue (PropertyValue *val );
//void setValue (char *val // ACME string);
char* getValueAsString ();

};
ACME.Properties.PropertyValue

class PropertyValue : public ACMEDesignObject {

char* getCategoryName ();
PropertyCategoryT getCategory ( );
void exportACME (ACMEOutputStream *s);
PropertyValue* copy ( );

};
ACME.Properties.RecordField

class RecordField : public ACMEDesignObject {

RecordField* copy ();
char *name; PropertyValue *val;
RecordField (char *name, PropertyValue *val);

};
ACME.Properties.ACMERecord

class ACMERecord : public PropertyValue {

PropertyValue* copy ();
PropertyCategoryT getCategory ();
ACMERecord ();
// ACMERecord (char *val);
ACMERecord (RecordType *t);
// ACMERecord (ACMEStream *s);
void exportACME (ACMEOutputStream *s);
void setType (RecordType *t);
RecordType* getType ();
// Field VALUES aren't typed? Is this right?
RecordField* getField (char *field_name);
void setField (char *name, PropertyValue *val);
void addField (RecordField *field);
void addField (char *name, PropertyValue *val);
PropertyValue* getFieldValue (char *name);
RecordFieldEnumeration* getFields ();

};
ACME.Properties.Sequence

class Sequence : public PropertyValue {

PropertyValue* copy ();
void exportACME (ACMEOutputStream *s);
PropertyCategoryT getCategory ();
Sequence ();
Sequence (SequenceType *t);
//Sequence (ACMEStream *s);
void setType (SequenceType *t);
SequenceType* getType ();
int getSize ();
PropertyValue* getValue (int index);
void addValue (PropertyValue *val);
PropertyValueEnumeration* getValues ();

};
ACME.Properties.ACMEEnum

class ACMEEnum : public PropertyValue {

PropertyValue* copy ();
ACMEEnum (char *val);
ACMEEnum (EnumType *t, char *val);
//ACMEEnum (ACMEStream *val);
PropertyCategoryT getCategory ();
void setType (EnumType *t);
EnumType* getType ();
char* getValue ( // must be member of enum type);
void setValue (char *val);

};
ACME.Properties.ACMEFloat

class ACMEFloat : public PropertyValue {

PropertyValue* copy ();
PropertyCategoryT getCategory ();
ACMEFloat (double val);
ACMEFloat (FloatType *t, double val);
// ACMEFloat (ACMEStream *s);
void exportACME (ACMEOutputStream *s);
void setType (FloatType *t);
FloatType* getType ();
double getValue ();
void setValue (double val);

};
ACME.Properties.ACMEInt

class ACMEInt : public PropertyValue {

PropertyValue* copy ();
ACMEInt (int val);
ACMEInt (IntType *t, int val);
// ACMEInt (ACMEStream *s);
PropertyCategoryT getCategory ();
void exportACME (ACMEOutputStream *s);
void setType (IntType *t);
IntType* getType ();
int getValue ();
void setValue (int val);

};
ACME.Properties.ACMEBoolean

class ACMEBoolean : public PropertyValue {

ACMEBoolean (bool val);
ACMEBoolean (BooleanType *t, bool val);
PropertyCategoryT getCategory ();
PropertyValue* copy ();
bool getValue ();
void setValue (bool val);
void exportACME (ACMEOutputStream *s);

};
ACME.Properties.ACMEString

class ACMEString : public PropertyValue {

PropertyValue* copy ();
ACMEString (StringType *type, char *val);
ACMEString (char *val);
// String (ACMEStream *s);
PropertyCategoryT getCategory ();
void exportACME (ACMEOutputStream *s);
void setType (StringType *t);
StringType* getType ();
char* getValue ();
void setValue (char *val);

};
ACME.PropertyTypes.PropertyType

class PropertyType : public ACMEDesignObject {

bool typeCheck (PropertyValue *val);
char* getName ();
void setName (char *name);
void exportACME (ACMEOutputStream *s);
void exportACMEIdentifier (ACMEOutputStream *s );
char* getCategoryName ();
PropertyCategoryT getCategory ( );
void setMetaProperty (char *name, PropertyValue *val);
void addMetaProperty (Property *p);
void addMetaProperty (char *name, PropertyValue *val);
PropertyValue* getMetaProperty (char *name);
PropertyEnumeration* getMetaProperties ();

};
ACME.PropertyTypes.RecordFieldDesc

class RecordFieldDesc : public ACMEDesignObject {

RecordFieldDesc (char *name, PropertyType *t, PropertyValue *val);
void exportACME (ACMEOutputStream *s);
void setName (char *name);
PropertyCategoryT getCategory ();
PropertyValue* getValue ();
char* getName ();
void setType (PropertyType *t);
PropertyType* getType ();

};
ACME.PropertyTypes.RecordType

class RecordType : public PropertyType {

RecordType (char *name);
RecordFieldDescEnumeration* getFields ();
void addField (char *name, PropertyType *t, PropertyValue *val);
void addField (RecordFieldDesc *f);
PropertyCategoryT getCategory ();
void exportACME (ACMEOutputStream *s);
void exportACMEIdentifier (ACMEOutputStream *s);

};
ACME.PropertyTypes.SequenceType

class SequenceType : public PropertyType {

SequenceType (char *name, PropertyType *type);
PropertyType* getSequenceType ();
PropertyCategoryT getCategory ();
void exportACMEIdentifier (ACMEOutputStream *s);
void exportACME (ACMEOutputStream *s);

};
ACME.PropertyTypes.StringType

class StringType : public PropertyType {

StringType (char *name);
PropertyCategoryT getCategory ();
void exportACMEIdentifier (ACMEOutputStream *s);
void exportACME (ACMEOutputStream *s);

};
ACME.PropertyTypes.IntType

class IntType : public PropertyType {

IntType (char *name);
void exportACMEIdentifier (ACMEOutputStream *s);
void exportACME (ACMEOutputStream *s);
PropertyCategoryT getCategory ();

};
ACME.PropertyTypes.BooleanType

class BooleanType : public PropertyType {

BooleanType (char *name);
void exportACMEIdentifier (ACMEOutputStream *s);
void exportACME (ACMEOutputStream *s);
PropertyCategoryT getCategory ();

};
ACME.PropertyTypes.FloatType

class FloatType : public PropertyType {

FloatType (char *name);
void exportACMEIdentifier (ACMEOutputStream *s);
void exportACME (ACMEOutputStream *s);
PropertyCategoryT getCategory ();

};
ACME.PropertyTypes.EnumValue

class EnumValue : public ACMEDesignObject {

char *val;

EnumValue (char *val);

};
ACME.PropertyTypes.EnumType

class EnumType : public PropertyType {

EnumType (char *name);
void addValue (char *val);
bool hasValue (char *val);
ACMEEnumEnumeration* getValues ();
void exportACMEIdentifier (ACMEOutputStream *s);
void exportACME (ACMEOutputStream *s);
PropertyCategoryT getCategory ();

};