| /*
|
| * 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
|
| *
|
| */ |
| |
| #include <sstream> |
| #include <dae/daeMetaAttribute.h> |
| #include <dae/daeMetaElement.h> |
| #include <dae/daeErrorHandler.h> |
| #include <dae/daeDocument.h> |
| |
| void daeMetaAttribute::set(daeElement* e, daeString s) { |
| stringToMemory(e, s); |
| } |
| |
| void daeMetaAttribute::copy(daeElement* to, daeElement *from) { |
| _type->copy(get(from), get(to)); |
| } |
| |
| void daeMetaArrayAttribute::copy(daeElement* to, daeElement *from) { |
| daeArray& fromArray = (daeArray&)*get(from); |
| daeArray& toArray = (daeArray&)*get(to); |
| _type->copyArray(fromArray, toArray); |
| } |
| |
| void daeMetaAttribute::copyDefault(daeElement* element) { |
| if (_defaultValue) |
| _type->copy(_defaultValue, get(element)); |
| } |
| |
| void daeMetaArrayAttribute::copyDefault(daeElement* element) { |
| if (_defaultValue) |
| _type->copyArray((daeArray&)*_defaultValue, (daeArray&)*get(element)); |
| } |
| |
| daeInt daeMetaAttribute::compare(daeElement* elt1, daeElement* elt2) { |
| return _type->compare(get(elt1), get(elt2)); |
| } |
| |
| daeInt daeMetaArrayAttribute::compare(daeElement* elt1, daeElement* elt2) { |
| daeArray& value1 = (daeArray&)*get(elt1); |
| daeArray& value2 = (daeArray&)*get(elt2); |
| return _type->compareArray(value1, value2); |
| } |
| |
| daeInt daeMetaAttribute::compareToDefault(daeElement* e) { |
| if (!_defaultValue) |
| return 1; |
| return _type->compare(get(e), _defaultValue); |
| } |
| |
| daeInt daeMetaArrayAttribute::compareToDefault(daeElement* e) { |
| if (!_defaultValue) |
| return 1; |
| daeArray& value1 = (daeArray&)*get(e); |
| daeArray& value2 = (daeArray&)*_defaultValue; |
| return _type->compareArray(value1, value2); |
| } |
| |
| daeMetaAttribute::daeMetaAttribute() |
| { |
| _name = "noname"; |
| _offset = -1; |
| _type = NULL; |
| _container = NULL; |
| _defaultString = ""; |
| _defaultValue = NULL; |
| _isRequired = false; |
| } |
| |
| daeMetaAttribute::~daeMetaAttribute() { |
| if (_defaultValue) |
| _type->destroy(_defaultValue); |
| _defaultValue = NULL; |
| } |
| |
| daeMetaArrayAttribute::~daeMetaArrayAttribute() { |
| delete (daeArray*)_defaultValue; |
| _defaultValue = NULL; |
| } |
| |
| daeInt |
| daeMetaAttribute::getSize() |
| { |
| return _type->getSize(); |
| } |
| daeInt |
| daeMetaAttribute::getAlignment() |
| { |
| return _type->getAlignment(); |
| } |
| |
| void daeMetaAttribute::memoryToString(daeElement* e, std::ostringstream& buffer) { |
| _type->memoryToString(get(e), buffer); |
| } |
| |
| void daeMetaAttribute::stringToMemory(daeElement* e, daeString s) { |
| if (!strcmp(_name, "id") && e->getDocument()) |
| e->getDocument()->changeElementID(e, s); |
| else if (!strcmp(_name, "sid") && e->getDocument()) |
| e->getDocument()->changeElementSID(e, s); |
| |
| _type->stringToMemory((daeChar*)s, get(e)); |
| } |
| |
| daeChar* daeMetaAttribute::getWritableMemory(daeElement* e) { |
| return (daeChar*)e + _offset; |
| } |
| |
| daeMemoryRef daeMetaAttribute::get(daeElement* e) { |
| return getWritableMemory(e); |
| } |
| |
| void daeMetaAttribute::setDefaultString(daeString defaultVal) { |
| _defaultString = defaultVal; |
| if (!_defaultValue) |
| _defaultValue = _type->create(); |
| _type->stringToMemory((daeChar*)_defaultString.c_str(), _defaultValue); |
| } |
| |
| void daeMetaAttribute::setDefaultValue(daeMemoryRef defaultVal) { |
| if (!_defaultValue) |
| _defaultValue = _type->create(); |
| _type->copy(defaultVal, _defaultValue); |
| std::ostringstream buffer; |
| _type->memoryToString(_defaultValue, buffer); |
| _defaultString = buffer.str(); |
| } |
| |
| void daeMetaArrayAttribute::memoryToString(daeElement* e, std::ostringstream& buffer) { |
| if (e) |
| _type->arrayToString(*(daeArray*)get(e), buffer); |
| } |
| |
| void daeMetaArrayAttribute::stringToMemory(daeElement* e, daeString s) { |
| if (e) |
| _type->stringToArray((daeChar*)s, *(daeArray*)get(e)); |
| } |
| |
| void daeMetaArrayAttribute::setDefaultString(daeString defaultVal) { |
| _defaultString = defaultVal; |
| if (!_defaultValue) |
| _defaultValue = (daeMemoryRef)_type->createArray(); |
| _type->stringToArray((daeChar*)_defaultString.c_str(), (daeArray&)*_defaultValue); |
| } |
| |
| void daeMetaArrayAttribute::setDefaultValue(daeMemoryRef defaultVal) { |
| if (!_defaultValue) |
| _defaultValue = (daeMemoryRef)_type->createArray(); |
| _type->copyArray((daeArray&)*defaultVal, (daeArray&)*_defaultValue); |
| std::ostringstream buffer; |
| _type->arrayToString((daeArray&)*_defaultValue, buffer); |
| _defaultString = buffer.str(); |
| } |
| |
| daeString daeMetaAttribute::getDefaultString() { |
| return _defaultString.c_str(); |
| } |
| |
| daeMemoryRef daeMetaAttribute::getDefaultValue() { |
| return _defaultValue; |
| } |
| |
| void daeMetaAttribute::setDocument(daeElement* e, daeDocument* doc) { |
| _type->setDocument(get(e), doc); |
| } |
| |
| void daeMetaArrayAttribute::setDocument(daeElement* e, daeDocument* doc) { |
| _type->setDocument(*(daeArray*)get(e), doc); |
| } |