Home | History | Annotate | Download | only in dae
      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