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 15 void daeMetaAttribute::set(daeElement* e, daeString s) { 16 stringToMemory(e, s); 17 } 18 19 void daeMetaAttribute::copy(daeElement* to, daeElement *from) { 20 _type->copy(get(from), get(to)); 21 } 22 23 void 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 29 void daeMetaAttribute::copyDefault(daeElement* element) { 30 if (_defaultValue) 31 _type->copy(_defaultValue, get(element)); 32 } 33 34 void daeMetaArrayAttribute::copyDefault(daeElement* element) { 35 if (_defaultValue) 36 _type->copyArray((daeArray&)*_defaultValue, (daeArray&)*get(element)); 37 } 38 39 daeInt daeMetaAttribute::compare(daeElement* elt1, daeElement* elt2) { 40 return _type->compare(get(elt1), get(elt2)); 41 } 42 43 daeInt 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 49 daeInt daeMetaAttribute::compareToDefault(daeElement* e) { 50 if (!_defaultValue) 51 return 1; 52 return _type->compare(get(e), _defaultValue); 53 } 54 55 daeInt 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 63 daeMetaAttribute::daeMetaAttribute() 64 { 65 _name = "noname"; 66 _offset = -1; 67 _type = NULL; 68 _container = NULL; 69 _defaultString = ""; 70 _defaultValue = NULL; 71 _isRequired = false; 72 } 73 74 daeMetaAttribute::~daeMetaAttribute() { 75 if (_defaultValue) 76 _type->destroy(_defaultValue); 77 _defaultValue = NULL; 78 } 79 80 daeMetaArrayAttribute::~daeMetaArrayAttribute() { 81 delete (daeArray*)_defaultValue; 82 _defaultValue = NULL; 83 } 84 85 daeInt 86 daeMetaAttribute::getSize() 87 { 88 return _type->getSize(); 89 } 90 daeInt 91 daeMetaAttribute::getAlignment() 92 { 93 return _type->getAlignment(); 94 } 95 96 void daeMetaAttribute::memoryToString(daeElement* e, std::ostringstream& buffer) { 97 _type->memoryToString(get(e), buffer); 98 } 99 100 void 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 109 daeChar* daeMetaAttribute::getWritableMemory(daeElement* e) { 110 return (daeChar*)e + _offset; 111 } 112 113 daeMemoryRef daeMetaAttribute::get(daeElement* e) { 114 return getWritableMemory(e); 115 } 116 117 void daeMetaAttribute::setDefaultString(daeString defaultVal) { 118 _defaultString = defaultVal; 119 if (!_defaultValue) 120 _defaultValue = _type->create(); 121 _type->stringToMemory((daeChar*)_defaultString.c_str(), _defaultValue); 122 } 123 124 void 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 133 void daeMetaArrayAttribute::memoryToString(daeElement* e, std::ostringstream& buffer) { 134 if (e) 135 _type->arrayToString(*(daeArray*)get(e), buffer); 136 } 137 138 void daeMetaArrayAttribute::stringToMemory(daeElement* e, daeString s) { 139 if (e) 140 _type->stringToArray((daeChar*)s, *(daeArray*)get(e)); 141 } 142 143 void 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 150 void 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 159 daeString daeMetaAttribute::getDefaultString() { 160 return _defaultString.c_str(); 161 } 162 163 daeMemoryRef daeMetaAttribute::getDefaultValue() { 164 return _defaultValue; 165 } 166 167 void daeMetaAttribute::setDocument(daeElement* e, daeDocument* doc) { 168 _type->setDocument(get(e), doc); 169 } 170 171 void daeMetaArrayAttribute::setDocument(daeElement* e, daeDocument* doc) { 172 _type->setDocument(*(daeArray*)get(e), doc); 173 } 174