1/* 2* Copyright 2006 Sony Computer Entertainment Inc. 3* 4* Licensed under the MIT Open Source License, for details please see license.txt or the website 5* http://www.opensource.org/licenses/mit-license.php 6* 7*/ 8 9#include <sstream> 10#include <dae/daeMetaAttribute.h> 11#include <dae/daeMetaElement.h> 12#include <dae/daeErrorHandler.h> 13#include <dae/daeDocument.h> 14 15void daeMetaAttribute::set(daeElement* e, daeString s) { 16 stringToMemory(e, s); 17} 18 19void daeMetaAttribute::copy(daeElement* to, daeElement *from) { 20 _type->copy(get(from), get(to)); 21} 22 23void daeMetaArrayAttribute::copy(daeElement* to, daeElement *from) { 24 daeArray& fromArray = (daeArray&)*get(from); 25 daeArray& toArray = (daeArray&)*get(to); 26 _type->copyArray(fromArray, toArray); 27} 28 29void daeMetaAttribute::copyDefault(daeElement* element) { 30 if (_defaultValue) 31 _type->copy(_defaultValue, get(element)); 32} 33 34void daeMetaArrayAttribute::copyDefault(daeElement* element) { 35 if (_defaultValue) 36 _type->copyArray((daeArray&)*_defaultValue, (daeArray&)*get(element)); 37} 38 39daeInt daeMetaAttribute::compare(daeElement* elt1, daeElement* elt2) { 40 return _type->compare(get(elt1), get(elt2)); 41} 42 43daeInt daeMetaArrayAttribute::compare(daeElement* elt1, daeElement* elt2) { 44 daeArray& value1 = (daeArray&)*get(elt1); 45 daeArray& value2 = (daeArray&)*get(elt2); 46 return _type->compareArray(value1, value2); 47} 48 49daeInt daeMetaAttribute::compareToDefault(daeElement* e) { 50 if (!_defaultValue) 51 return 1; 52 return _type->compare(get(e), _defaultValue); 53} 54 55daeInt daeMetaArrayAttribute::compareToDefault(daeElement* e) { 56 if (!_defaultValue) 57 return 1; 58 daeArray& value1 = (daeArray&)*get(e); 59 daeArray& value2 = (daeArray&)*_defaultValue; 60 return _type->compareArray(value1, value2); 61} 62 63daeMetaAttribute::daeMetaAttribute() 64{ 65 _name = "noname"; 66 _offset = -1; 67 _type = NULL; 68 _container = NULL; 69 _defaultString = ""; 70 _defaultValue = NULL; 71 _isRequired = false; 72} 73 74daeMetaAttribute::~daeMetaAttribute() { 75 if (_defaultValue) 76 _type->destroy(_defaultValue); 77 _defaultValue = NULL; 78} 79 80daeMetaArrayAttribute::~daeMetaArrayAttribute() { 81 delete (daeArray*)_defaultValue; 82 _defaultValue = NULL; 83} 84 85daeInt 86daeMetaAttribute::getSize() 87{ 88 return _type->getSize(); 89} 90daeInt 91daeMetaAttribute::getAlignment() 92{ 93 return _type->getAlignment(); 94} 95 96void daeMetaAttribute::memoryToString(daeElement* e, std::ostringstream& buffer) { 97 _type->memoryToString(get(e), buffer); 98} 99 100void daeMetaAttribute::stringToMemory(daeElement* e, daeString s) { 101 if (!strcmp(_name, "id") && e->getDocument()) 102 e->getDocument()->changeElementID(e, s); 103 else if (!strcmp(_name, "sid") && e->getDocument()) 104 e->getDocument()->changeElementSID(e, s); 105 106 _type->stringToMemory((daeChar*)s, get(e)); 107} 108 109daeChar* daeMetaAttribute::getWritableMemory(daeElement* e) { 110 return (daeChar*)e + _offset; 111} 112 113daeMemoryRef daeMetaAttribute::get(daeElement* e) { 114 return getWritableMemory(e); 115} 116 117void daeMetaAttribute::setDefaultString(daeString defaultVal) { 118 _defaultString = defaultVal; 119 if (!_defaultValue) 120 _defaultValue = _type->create(); 121 _type->stringToMemory((daeChar*)_defaultString.c_str(), _defaultValue); 122} 123 124void daeMetaAttribute::setDefaultValue(daeMemoryRef defaultVal) { 125 if (!_defaultValue) 126 _defaultValue = _type->create(); 127 _type->copy(defaultVal, _defaultValue); 128 std::ostringstream buffer; 129 _type->memoryToString(_defaultValue, buffer); 130 _defaultString = buffer.str(); 131} 132 133void daeMetaArrayAttribute::memoryToString(daeElement* e, std::ostringstream& buffer) { 134 if (e) 135 _type->arrayToString(*(daeArray*)get(e), buffer); 136} 137 138void daeMetaArrayAttribute::stringToMemory(daeElement* e, daeString s) { 139 if (e) 140 _type->stringToArray((daeChar*)s, *(daeArray*)get(e)); 141} 142 143void daeMetaArrayAttribute::setDefaultString(daeString defaultVal) { 144 _defaultString = defaultVal; 145 if (!_defaultValue) 146 _defaultValue = (daeMemoryRef)_type->createArray(); 147 _type->stringToArray((daeChar*)_defaultString.c_str(), (daeArray&)*_defaultValue); 148} 149 150void daeMetaArrayAttribute::setDefaultValue(daeMemoryRef defaultVal) { 151 if (!_defaultValue) 152 _defaultValue = (daeMemoryRef)_type->createArray(); 153 _type->copyArray((daeArray&)*defaultVal, (daeArray&)*_defaultValue); 154 std::ostringstream buffer; 155 _type->arrayToString((daeArray&)*_defaultValue, buffer); 156 _defaultString = buffer.str(); 157} 158 159daeString daeMetaAttribute::getDefaultString() { 160 return _defaultString.c_str(); 161} 162 163daeMemoryRef daeMetaAttribute::getDefaultValue() { 164 return _defaultValue; 165} 166 167void daeMetaAttribute::setDocument(daeElement* e, daeDocument* doc) { 168 _type->setDocument(get(e), doc); 169} 170 171void daeMetaArrayAttribute::setDocument(daeElement* e, daeDocument* doc) { 172 _type->setDocument(*(daeArray*)get(e), doc); 173} 174