123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- /*
- * 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_ATTRIBUTE_H__
- #define __DAE_META_ATTRIBUTE_H__
- #include <string>
- #include <sstream>
- #include <dae/daeTypes.h>
- #include <dae/daeStringRef.h>
- #include <dae/daeAtomicType.h>
- #include <dae/daeElement.h>
- #include <dae/daeArray.h>
- class daeElement;
- class daeMetaElement;
- class daeMetaAttribute;
- class daeMetaElementAttribute;
- /**
- * The @c daeMetaAttribute class describes one attribute in a C++ COLLADA dom element.
- *
- * In the case of the C++ object model a conceptual attribute can be
- * either a dom attribute, a dom element, or a dom value.
- * Essentially, the meta attribute describes fields on the C++ class.
- * However these attributes are stored separately in the containing meta
- * @c daeMetaElement.
- * @c daeMetaAttributes always exist inside of @c daeMetaElements.
- * Each @c daeMetaAttribute has certain semantic operations it is capable of
- * including @c set(), @c get(), and @c print().
- * @c daeMetaAttributes use the @c daeAtomicType system as their underlying semantic
- * implementation, but contain additional information about the packaging
- * of the atomic types into the C++ dom classes such as offset, and
- * array information.
- */
- class DLLSPEC daeMetaAttribute : public daeRefCountedObj
- {
- protected:
- daeStringRef _name;
- daeInt _offset;
- daeAtomicType* _type;
- daeMetaElement* _container;
- std::string _defaultString;
- daeMemoryRef _defaultValue;
- daeBool _isRequired;
- public:
- /**
- * Constructor
- */
- daeMetaAttribute();
- /**
- * Destructor
- */
- virtual ~daeMetaAttribute();
- public:
- /**
- * Determines if the schema indicates that this is a required attribute.
- * @return Returns true if this is a required attribute, false if not.
- */
- daeBool getIsRequired() {return _isRequired; }
- /**
- * Sets the value that indicates that this attribute is required by the schema. If set, the attribute
- * will always be exported by the API regardless of its value.
- * @param isRequired Indicates if the schema says this attribute is required, true if it is, false if not.
- */
- void setIsRequired(daeBool isRequired) {_isRequired = isRequired;}
- /**
- * Sets the byte offset (from @c this) where this attribute's storage is
- * found in its container element class.
- * @param offset Integer byte offset from @c this pointer.
- */
- void setOffset(daeInt offset) { _offset = offset; }
- /**
- * Gets the byte offset (from @ this) where this attribute's storage is
- * found in its container element class.
- * @return Returns the integer byte offset from @c this pointer for this attribute.
- */
- daeInt getOffset() { return _offset; }
-
- /**
- * Sets the name of the attribute.
- * @param name @c daeString that is directly stored as a pointer
- * without being copied.
- */
- void setName(daeString name) { _name = name; }
-
- /**
- * Gets the name of this attribute.
- * @return Returnsthe name of this attribute.
- */
- daeStringRef getName() { return _name; }
- /**
- * Sets the type of the attribute.
- * @param type @c daeAtomicType to use for interacting with this
- * attribute in a containing @c daeElement.
- */
- void setType(daeAtomicType* type) { _type = type; }
-
- /**
- * Gets the @c daeAtomicType used by this attribute.
- * @return Returns the @c daeAtomicType that this attribute uses for its
- * implementation.
- */
- daeAtomicType* getType() { return _type; }
- /**
- * Sets the default for this attribute via a string.
- * @param defaultVal @c daeString representing the default value.
- */
- virtual void setDefaultString(daeString defaultVal);
- /**
- * Sets the default for this attribute via a memory pointer.
- * @param defaultVal @c daeMemoryRef representing the default value.
- */
- virtual void setDefaultValue(daeMemoryRef defaultVal);
- /**
- * Gets the default for this attribute as a string.
- * @return Returns a @c daeString representing the default value.
- */
- daeString getDefaultString();
- /**
- * Gets the default for this attribute as a memory value.
- * @return Returns a @c daeMemoryRef representing the default value.
- */
- daeMemoryRef getDefaultValue();
- /**
- * Sets the containing @c daeMetaElement for this attribute.
- * @param container Element on which this @c daeMetaAttribute belongs.
- */
- void setContainer(daeMetaElement* container) { _container = container; }
- /**
- * Gets the containing @c daeMetaElement for this attribute.
- * @return Returns the @c daeMetaElement to which this @c daeAttribute belongs.
- */
- daeMetaElement* getContainer() { return _container; }
- /**
- * Notifies an attribute when the containing document changes.
- */
- virtual void setDocument(daeElement* e, daeDocument* doc);
-
- /**
- * Converts an element's attribute value to a string.
- */
- virtual void memoryToString(daeElement* e, std::ostringstream& buffer);
- /**
- * Converts a string to a memory value in the specified element.
- */
- virtual void stringToMemory(daeElement* e, daeString s);
- /**
- * Gets the attribute's memory pointer from containing element <tt><i>e</i></tt>.
- * @param e Containing element from which to get the value.
- * @return Returns the memory pointer corresponding to this attribute out of parent element e.
- */
- virtual daeMemoryRef get(daeElement* e);
- /**
- * Gets if this attribute is an array attribute.
- * @return Returns true if this attribute is an array type.
- */
- virtual daeBool isArrayAttribute() { return false; }
-
- public:
- /**
- * Gets the number of bytes for this attribute.
- * @return Returns the number of bytes in the C++ COLLADA dom element for this
- * attribute.
- */
- virtual daeInt getSize();
- /**
- * Gets the alignment in bytes on the class of this meta attribute type.
- * @return Returns the alignment in bytes.
- */
- virtual daeInt getAlignment();
- /**
- * Copies the value of this attribute from fromElement into toElement.
- * @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);
- /**
- * Copies the default value of this attribute to the element
- * @param element Pointer to a @c daeElement to copy the default value to.
- */
- virtual void copyDefault(daeElement* element);
- /**
- * Compares the value of this attribute in the given elements.
- * @param elt1 The first element whose attribute value should be compared.
- * @param elt2 The second element whose attribute value should be compared.
- * @return Returns a positive integer if value1 > value2, a negative integer if
- * value1 < value2, and 0 if value1 == value2.
- */
- virtual daeInt compare(daeElement* elt1, daeElement* elt2);
- /**
- * Compares the value of this attribute from the given element to the default value
- * of this attribute (if one exists).
- * @param e The element whose value should be compared to the default value.
- * @return Returns a positive integer if value > default, a negative integer if
- * value < default, and 0 if value == default.
- */
- virtual daeInt compareToDefault(daeElement* e);
-
- public:
- // These methods are deprecated.
- virtual daeChar* getWritableMemory(daeElement* e); // Use get instead.
- virtual void set(daeElement* element, daeString s); // Use stringToMemory instead.
- };
- /**
- * The @c daeMetaArrayAttribute class is simple a wrapper that implements
- * an array of atomic types rather than a singleton.
- * The corresponding storage is an array
- * and the corresponding operations are implemented on the array
- * data structure rather than on inlined storage in elements.
- */
- class DLLSPEC daeMetaArrayAttribute : public daeMetaAttribute
- {
- public:
- virtual ~daeMetaArrayAttribute();
- /**
- * Defines the override version of this method from @c daeMetaAttribute.
- * @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);
- /**
- * Copies the default value of this attribute to the element
- * @param element Pointer to a @c daeElement to copy the default value to.
- */
- virtual void copyDefault(daeElement* element);
- /**
- * Compares the value of this attribute in the given elements.
- * @param elt1 The first element whose attribute value should be compared.
- * @param elt2 The second element whose attribute value should be compared.
- * @return Returns a positive integer if value1 > value2, a negative integer if
- * value1 < value2, and 0 if value1 == value2.
- */
- virtual daeInt compare(daeElement* elt1, daeElement* elt2);
- /**
- * Compares the value of this attribute from the given element to the default value
- * of this attribute (if one exists).
- * @param e The element whose value should be compared to the default value.
- * @return Returns a positive integer if value > default, a negative integer if
- * value < default, and 0 if value == default.
- */
- virtual daeInt compareToDefault(daeElement* e);
- /**
- * Converts an element's attribute value to a string.
- */
- virtual void memoryToString(daeElement* e, std::ostringstream& buffer);
- /**
- * Converts a string to a memory value in the specified element.
- */
- virtual void stringToMemory(daeElement* e, daeString s);
- /**
- * Sets the default for this attribute via a string.
- * @param defaultVal @c daeString representing the default value.
- */
- virtual void setDefaultString(daeString defaultVal);
- /**
- * Sets the default for this attribute via a memory pointer.
- * @param defaultVal @c daeMemoryRef representing the default value.
- */
- virtual void setDefaultValue(daeMemoryRef defaultVal);
- /**
- * Gets if this attribute is an array attribute.
- * @return Returns true if this attribute is an array type.
- */
- virtual daeBool isArrayAttribute() { return true; }
- /**
- * Notifies an attribute when the containing document changes.
- */
- virtual void setDocument(daeElement* e, daeDocument* doc);
- };
- typedef daeSmartRef<daeMetaAttribute> daeMetaAttributeRef;
- typedef daeTArray<daeMetaAttributeRef> daeMetaAttributeRefArray;
- typedef daeTArray<daeMetaAttribute*> daeMetaAttributePtrArray;
- #endif //__DAE_META_ATTRIBUTE_H__
|