185 lines
7.1 KiB
C
185 lines
7.1 KiB
C
|
/*
|
||
|
* Copyright 2006 Sony Computer Entertainment Inc.
|
||
|
*
|
||
|
* Licensed under the MIT Open Source License, for details please see license.txt or the website
|
||
|
* http://www.opensource.org/licenses/mit-license.php
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef __DAE_META_ELEMENT_ATTRIBUTE_H__
|
||
|
#define __DAE_META_ELEMENT_ATTRIBUTE_H__
|
||
|
|
||
|
#include <dae/daeTypes.h>
|
||
|
#include <dae/daeMetaAttribute.h>
|
||
|
#include <dae/daeMetaCMPolicy.h>
|
||
|
|
||
|
class daeMetaElement;
|
||
|
class daeElement;
|
||
|
class daeDocument;
|
||
|
|
||
|
/**
|
||
|
* The @c daeMetaElementAttribute class represents a content model object that is an element.
|
||
|
*/
|
||
|
class daeMetaElementAttribute : public daeMetaAttribute, public daeMetaCMPolicy
|
||
|
{
|
||
|
public:
|
||
|
/** The metaElement that describes the element type of this attribute */
|
||
|
daeMetaElement* _elementType;
|
||
|
|
||
|
public:
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* @param container The daeMetaElement that this policy object belongs to.
|
||
|
* @param parent The daeMetaCMPolicy parent of this policy object.
|
||
|
* @param odinal The ordinal value offset of this specific policy object. Used for maintaining the
|
||
|
* correct order of child elements.
|
||
|
* @param minO The minimum number of times this CMPolicy object must appear. This value comes from the COLLADA schema.
|
||
|
* @param maxO The maximum number of times this CMPolicy object may appear. This value comes from the COLLADA schema.
|
||
|
*/
|
||
|
daeMetaElementAttribute( daeMetaElement *container, daeMetaCMPolicy *parent = NULL, daeUInt ordinal = 0, daeInt minO = 1, daeInt maxO = 1);
|
||
|
/**
|
||
|
* Destructor
|
||
|
*/
|
||
|
virtual ~daeMetaElementAttribute();
|
||
|
|
||
|
public:
|
||
|
|
||
|
virtual daeElement *placeElement(daeElement* parent, daeElement* child, daeUInt &ordinal, daeInt offset = 0, daeElement* before = NULL, daeElement *after = NULL);
|
||
|
virtual daeBool removeElement(daeElement* parent, daeElement* child);
|
||
|
|
||
|
daeMetaElement *findChild( daeString elementName );
|
||
|
|
||
|
virtual void getChildren( daeElement* parent, daeElementRefArray &array );
|
||
|
|
||
|
public:
|
||
|
/**
|
||
|
* Sets the element type for the element that this attribute points to.
|
||
|
* @param elementType @c daeMetaElement representing the type.
|
||
|
*/
|
||
|
void setElementType(daeMetaElement *elementType) {
|
||
|
_elementType = elementType; }
|
||
|
|
||
|
/**
|
||
|
* Gets the element type for the element that this attribute points to.
|
||
|
* @return Returns the @c daeMetaElement representing the type.
|
||
|
*/
|
||
|
daeMetaElement* getElementType() { return _elementType; }
|
||
|
|
||
|
/**
|
||
|
* Sets the database document associated with this element.
|
||
|
* @param parent The daeElement to set the document.
|
||
|
* @param c The @c daeDocument to associate with this element.
|
||
|
*/
|
||
|
virtual void setDocument(daeElement *parent, daeDocument* c );
|
||
|
inline void setCollection(daeElement *parent, daeDocument* c ) {
|
||
|
setDocument( parent, c );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the number of elements associated with this attribute in instance <tt><i>e.</i></tt>
|
||
|
* @param e Containing element to run the operation on.
|
||
|
* @return Returns the number of elements associated with this attribute
|
||
|
* in instance <tt><i>e.</i></tt>
|
||
|
*/
|
||
|
virtual daeInt getCount(daeElement* e);
|
||
|
|
||
|
/**
|
||
|
* Gets an element from containing element <tt><i>e</i></tt> based on <tt><i>index.</i></tt>
|
||
|
* @param e Containing element from which to get the element.
|
||
|
* @param index Index of the element to retrieve if indeed
|
||
|
* there is an array of elements rather than a singleton.
|
||
|
* @return Returns the associated element out of parent element e, based on index, if necessary.
|
||
|
*/
|
||
|
virtual daeMemoryRef get(daeElement* e, daeInt index);
|
||
|
|
||
|
/**
|
||
|
* Defines the override version of base method.
|
||
|
* @param element Element on which to set this attribute.
|
||
|
* @param s String containing the value to be converted via the
|
||
|
* atomic type system.
|
||
|
*/
|
||
|
virtual void set(daeElement* element, daeString s);
|
||
|
/**
|
||
|
* Defines the override version of base method.
|
||
|
* @param toElement Pointer to a @c daeElement to copy this attribute to.
|
||
|
* @param fromElement Pointer to a @c daeElement to copy this attribute from.
|
||
|
*/
|
||
|
virtual void copy(daeElement* toElement, daeElement* fromElement);
|
||
|
|
||
|
/**
|
||
|
* Gets if this attribute is an array attribute.
|
||
|
* @return Returns true if this attribute is an array type.
|
||
|
*/
|
||
|
virtual daeBool isArrayAttribute() { return false; }
|
||
|
};
|
||
|
typedef daeSmartRef<daeMetaElementAttribute> daeMetaElementAttributeRef;
|
||
|
typedef daeTArray<daeMetaElementAttributeRef> daeMetaElementAttributeArray;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* The @c daeMetaElementArrayAttribute class is similar to daeMetaElementAttribute
|
||
|
* except that this meta attribute describes an array of elements rather than a singleton.
|
||
|
*/
|
||
|
class daeMetaElementArrayAttribute : public daeMetaElementAttribute
|
||
|
{
|
||
|
public:
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* @param container The daeMetaElement that this policy object belongs to.
|
||
|
* @param parent The daeMetaCMPolicy parent of this policy object.
|
||
|
* @param odinal The ordinal value offset of this specific policy object. Used for maintaining the
|
||
|
* correct order of child elements.
|
||
|
* @param minO The minimum number of times this CMPolicy object must appear. This value comes from the COLLADA schema.
|
||
|
* @param maxO The maximum number of times this CMPolicy object may appear. This value comes from the COLLADA schema.
|
||
|
*/
|
||
|
daeMetaElementArrayAttribute(daeMetaElement *container, daeMetaCMPolicy *parent = NULL, daeUInt ordinal = 0, daeInt minO = 1, daeInt maxO = 1);
|
||
|
~daeMetaElementArrayAttribute();
|
||
|
public:
|
||
|
virtual daeElement *placeElement(daeElement* parent, daeElement* child, daeUInt &ordinal, daeInt offset = 0, daeElement* before = NULL, daeElement *after = NULL);
|
||
|
virtual daeBool removeElement(daeElement* parent, daeElement* child);
|
||
|
|
||
|
void getChildren( daeElement* parent, daeElementRefArray &array );
|
||
|
|
||
|
/**
|
||
|
* Sets the database document associated with this element.
|
||
|
* @param c The @c daeDocument to associate with this element.
|
||
|
*/
|
||
|
virtual void setDocument(daeElement *parent, daeDocument* c );
|
||
|
inline void setCollection(daeElement *parent, daeDocument* c ) {
|
||
|
setDocument( parent, c );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Defines the override version of this method from @c daeMetaElement.
|
||
|
* @param e Containing element to run the operation on.
|
||
|
* @return Returns the number of particles associated with this attribute
|
||
|
* in instance <tt><i>e.</i></tt>
|
||
|
*/
|
||
|
virtual daeInt getCount(daeElement* e);
|
||
|
/**
|
||
|
* Defines the override version of this method from @c daeMetaElement.
|
||
|
* @param e Containing element from which to get the element.
|
||
|
* @param index Index of the particle to retrieve if indeed
|
||
|
* there is an array of elements rather than a singleton.
|
||
|
* @return Returns the associated particle out of parent element e, based on index, if necessary.
|
||
|
*/
|
||
|
virtual daeMemoryRef get(daeElement* e, daeInt index);
|
||
|
/**
|
||
|
* Defines the override version of this method from @c daeMetaElement.
|
||
|
* @param toElement Pointer to a @c daeElement to copy this attribute to.
|
||
|
* @param fromElement Pointer to a @c daeElement to copy this attribute from.
|
||
|
*/
|
||
|
virtual void copy(daeElement* toElement, daeElement* fromElement);
|
||
|
|
||
|
/**
|
||
|
* Gets if this attribute is an array attribute.
|
||
|
* @return Returns true if this attribute is an array type.
|
||
|
*/
|
||
|
virtual daeBool isArrayAttribute() { return true; }
|
||
|
};
|
||
|
typedef daeSmartRef<daeMetaElementArrayAttribute> daeMetaElementArrayAttributeRef;
|
||
|
typedef daeTArray<daeMetaElementArrayAttributeRef> daeMetaElementArrayAttributeArray;
|
||
|
|
||
|
#endif
|
||
|
|