blob: 97fe0e7c1980e52ba208987cca716fbd2f368095 [file] [log] [blame]
/*
* 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/daeAtomicType.h>
#include <dae/daeElement.h>
#include <dae/daeURI.h>
#include <dae/daeIDRef.h>
#include <dae/daeMetaElement.h>
#include <dae/daeDatabase.h>
#include <dae/daeErrorHandler.h>
#include <dae/daeUtils.h>
namespace {
// Skip leading whitespace
daeChar* skipWhitespace(daeChar* s) {
if (s) {
// !!!GAC NEEDS TO BE CHANGED to use XML standard whitespace parsing
while(*s == ' ' || *s == '\r' || *s == '\n' || *s == '\t') s++;
}
return s;
}
// Move forward past this token
daeChar* skipToken(daeChar* s) {
while(*s != ' ' && *s != '\r' && *s != '\n' && *s != '\t' && *s != 0) s++;
return s;
}
// Given a string of whitespace-separated tokens, this function returns a null-terminated string
// containing the next token. If the next token is already null-terminated, no memory is allocated
// and the function returns the pointer that was passed in. Note that this function assumes that
// the string passed in starts with the next token and not a whitespace.
// If returnValue != s, the client should free the returnValue with delete[].
daeChar* extractToken(daeChar* s) {
if (!s)
return 0;
daeChar* tmp = skipToken(s);
if (*tmp != 0) {
daeChar* scopy = new daeChar[tmp-s+1];
strncpy(scopy, s, tmp-s);
scopy[tmp-s] = 0;
return scopy;
}
return s;
}
}
daeAtomicTypeList::daeAtomicTypeList(DAE& dae) {
types.append(new daeUIntType(dae));
types.append(new daeIntType(dae));
types.append(new daeLongType(dae));
types.append(new daeShortType(dae));
types.append(new daeULongType(dae));
types.append(new daeFloatType(dae));
types.append(new daeDoubleType(dae));
types.append(new daeStringRefType(dae));
types.append(new daeElementRefType(dae));
types.append(new daeEnumType(dae));
types.append(new daeRawRefType(dae));
types.append(new daeResolverType(dae));
types.append(new daeIDResolverType(dae));
types.append(new daeBoolType(dae));
types.append(new daeTokenType(dae));
}
daeAtomicTypeList::~daeAtomicTypeList() {
size_t types_count = types.getCount();
for (size_t i = 0; i < types_count; i++)
delete types[i];
}
daeInt daeAtomicTypeList::append(daeAtomicType* t) {
return (daeInt)types.append(t);
}
const daeAtomicType* daeAtomicTypeList::getByIndex(daeInt index) {
return types[index];
}
daeInt daeAtomicTypeList::getCount() {
return (daeInt)types.getCount();
}
daeAtomicType* daeAtomicTypeList::get(daeStringRef typeString) {
size_t types_count = types.getCount();
for (size_t i = 0; i < types_count; i++) {
daeStringRefArray& nameBindings = types[i]->getNameBindings();
size_t nameBindings_count = nameBindings.getCount();
for (size_t j = 0; j < nameBindings_count; j++) {
if (strcmp(typeString, nameBindings[j]) == 0)
return types[i];
}
}
return NULL;
}
daeAtomicType* daeAtomicTypeList::get(daeEnum typeEnum) {
size_t types_count = types.getCount();
for (size_t i = 0; i < types_count; i++)
if (typeEnum == types[i]->getTypeEnum())
return types[i];
return NULL;
}
daeAtomicType::daeAtomicType(DAE& dae)
{
_dae = &dae;
_size = -1;
_alignment = -1;
_typeEnum = -1;
_typeString = "notype";
_printFormat = "badtype";
_scanFormat = "";
_maxStringLength = -1;
}
daeBool
daeAtomicType::stringToMemory(daeChar *src, daeChar* dstMemory)
{
sscanf(src, _scanFormat, dstMemory);
return true;
}
void daeAtomicType::arrayToString(daeArray& array, std::ostringstream& buffer) {
if (array.getCount() > 0)
memoryToString(array.getRaw(0), buffer);
size_t array_count = array.getCount();
for (size_t i = 1; i < array_count; i++) {
buffer << ' ';
memoryToString(array.getRaw(i), buffer);
}
}
daeBool
daeAtomicType::stringToArray(daeChar* src, daeArray& array) {
array.clear();
array.setElementSize(_size);
if (src == 0)
return false;
// We're about to insert null terminators into the string so that scanf doesn't take forever
// doing strlens. Since the memory might not be writable, I need to duplicate the string and
// write into the duplicate, or else I might get access violations.
// This sucks... surely we can do better than this.
daeChar* srcDup = new daeChar[strlen(src)+1];
strcpy(srcDup, src);
src = srcDup;
while (*src != 0)
{
src = skipWhitespace(src);
if(*src != 0)
{
daeChar* token = src;
src = skipToken(src);
daeChar temp = *src;
*src = 0;
size_t count = array.getCount();
array.setCount(count+1);
if (!stringToMemory(token, array.getRaw(count))) {
delete[] srcDup;
return false;
}
*src = temp;
}
}
delete[] srcDup;
return true;
}
daeInt daeAtomicType::compareArray(daeArray& value1, daeArray& value2) {
if (value1.getCount() != value2.getCount())
return value1.getCount() > value2.getCount() ? 1 : -1;
size_t value1_count = value1.getCount();
for (size_t i = 0; i < value1_count; i++) {
daeInt result = compare(value1.getRaw(i), value2.getRaw(i));
if (result != 0)
return result;
}
return 0;
}
void daeAtomicType::copyArray(daeArray& src, daeArray& dst) {
dst.setCount(src.getCount());
size_t src_count = src.getCount();
for (size_t i = 0; i < src_count; i++)
copy(src.getRaw(i), dst.getRaw(i));
}
daeInt
daeAtomicType::compare(daeChar* value1, daeChar* value2) {
return memcmp(value1, value2, _size);
}
daeEnumType::daeEnumType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeEnum);
_alignment = sizeof(daeEnum);
_typeEnum = EnumType;
_nameBindings.append("enum");
_printFormat = "%s";//"%%.%ds";
_scanFormat = "%s";
_strings = NULL;
_values = NULL;
_typeString = "enum";
}
daeEnumType::~daeEnumType() {
if ( _strings ) {
delete _strings;
_strings = NULL;
}
if ( _values ) {
delete _values;
_values = NULL;
}
}
daeBoolType::daeBoolType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeBool);
_alignment = sizeof(daeBool);
_typeEnum = BoolType;
_printFormat = "%d";
_scanFormat = "%d";
_typeString = "bool";
_maxStringLength = (daeInt)strlen("false")+1;
_nameBindings.append("bool");
//_nameBindings.append("xsBool");
_nameBindings.append("xsBoolean");
}
daeIntType::daeIntType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeInt);
_alignment = sizeof(daeInt);
_typeEnum = IntType;
_maxStringLength = 16;
_nameBindings.append("int");
_nameBindings.append("xsInteger");
_nameBindings.append("xsHexBinary");
_nameBindings.append("xsIntegerArray");
_nameBindings.append("xsHexBinaryArray");
_nameBindings.append("xsByte");
_nameBindings.append("xsInt");
_printFormat = "%d";
_scanFormat = "%d";
_typeString = "int";
}
daeLongType::daeLongType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeLong);
_alignment = sizeof(daeLong);
_typeEnum = LongType;
_maxStringLength = 32;
_nameBindings.append("xsLong");
_nameBindings.append("xsLongArray");
#if defined(_MSC_VER) || defined(__MINGW32__)
_printFormat = "%I64d";
_scanFormat = "%I64d";
#else
_printFormat = "%lld";
_scanFormat = "%lld";
#endif
_typeString = "long";
}
daeShortType::daeShortType(DAE& dae) : daeAtomicType(dae)
{
_maxStringLength = 8;
_size = sizeof(daeShort);
_alignment = sizeof(daeShort);
_typeEnum = ShortType;
_nameBindings.append("short");
_nameBindings.append("xsShort");
_printFormat = "%hd";
_scanFormat = "%hd";
_typeString = "short";
}
daeUIntType::daeUIntType(DAE& dae) : daeAtomicType(dae)
{
_maxStringLength = 16;
_size = sizeof(daeUInt);
_alignment = sizeof(daeUInt);
_typeEnum = UIntType;
_nameBindings.append("uint");
_nameBindings.append("xsNonNegativeInteger");
_nameBindings.append("xsUnsignedByte");
_nameBindings.append("xsUnsignedInt");
_nameBindings.append("xsPositiveInteger");
_printFormat = "%u";
_scanFormat = "%u";
_typeString = "uint";
}
daeULongType::daeULongType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeULong);
_alignment = sizeof(daeULong);
_typeEnum = ULongType;
_maxStringLength = 32;
_nameBindings.append("ulong");
_nameBindings.append("xsUnsignedLong");
#if defined(_MSC_VER) || defined(__MINGW32__)
_printFormat = "%I64u";
_scanFormat = "%I64u";
#else
_printFormat = "%llu";
_scanFormat = "%llu";
#endif
_typeString = "ulong";
}
daeFloatType::daeFloatType(DAE& dae) : daeAtomicType(dae)
{
_maxStringLength = 64;
_size = sizeof(daeFloat);
_alignment = sizeof(daeFloat);
_typeEnum = FloatType;
_nameBindings.append("float");
_nameBindings.append("xsFloat");
_printFormat = "%g";
_scanFormat = "%g";
_typeString = "float";
}
daeDoubleType::daeDoubleType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeDouble);
_alignment = sizeof(daeDouble);
_typeEnum = DoubleType;
_nameBindings.append("double");
_nameBindings.append("xsDouble");
_nameBindings.append("xsDecimal");
_printFormat = "%lg";
_scanFormat = "%lg";
_typeString = "double";
_maxStringLength = 64;
}
daeStringRefType::daeStringRefType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeStringRef);
_alignment = sizeof(daeStringRef);
_typeEnum = StringRefType;
_nameBindings.append("string");
_nameBindings.append("xsString");
_nameBindings.append("xsDateTime");
_printFormat = "%s";
_scanFormat = "%s";
_typeString = "string";
}
daeTokenType::daeTokenType(DAE& dae) : daeStringRefType(dae)
{
_size = sizeof(daeStringRef);
_alignment = sizeof(daeStringRef);
_typeEnum = TokenType;
_nameBindings.append("token");
_nameBindings.append("xsID");
_nameBindings.append("xsNCName");
_nameBindings.append("xsNMTOKEN");
_nameBindings.append("xsName");
_nameBindings.append("xsToken");
_nameBindings.append("xsNameArray");
_nameBindings.append("xsTokenArray");
_nameBindings.append("xsNCNameArray");
_printFormat = "%s";
_scanFormat = "%s";
_typeString = "token";
}
daeElementRefType::daeElementRefType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeElementRef);
_alignment = sizeof(daeElementRef);
_typeEnum = ElementRefType;
_nameBindings.append("element");
_nameBindings.append("Element");
_nameBindings.append("TrackedElement");
_printFormat = "%p";
_scanFormat = "%p";
_typeString = "element";
_maxStringLength = 64;
}
daeRawRefType::daeRawRefType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeRawRef);
_alignment = sizeof(daeRawRef);
_typeEnum = RawRefType;
_nameBindings.append("raw");
_printFormat = "%p";
_scanFormat = "%p";
_typeString = "raw";
_maxStringLength = 64;
}
daeResolverType::daeResolverType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeURI);
_alignment = sizeof(daeURI);
_typeEnum = ResolverType;
_nameBindings.append("resolver");
_nameBindings.append("xsAnyURI");
_printFormat = "%s";
_scanFormat = "%s";
_typeString = "resolver";
}
daeIDResolverType::daeIDResolverType(DAE& dae) : daeAtomicType(dae)
{
_size = sizeof(daeIDRef);
_alignment = sizeof(daeIDRef);
_typeEnum = IDResolverType;
_nameBindings.append("xsIDREF");
_nameBindings.append("xsIDREFS");
_printFormat = "%s";
_scanFormat = "%s";
_typeString = "idref_resolver";
}
daeBool daeIntType::memoryToString(daeChar* src, std::ostringstream& dst) {
dst << *(daeInt*)src;
return true;
}
daeBool daeLongType::memoryToString(daeChar* src, std::ostringstream& dst) {
dst << *(daeLong*)src;
return true;
}
daeBool daeShortType::memoryToString(daeChar* src, std::ostringstream& dst) {
dst << *(daeShort*)src;
return true;
}
daeBool daeUIntType::memoryToString(daeChar* src, std::ostringstream& dst) {
dst << *(daeUInt*)src;
return true;
}
daeBool daeULongType::memoryToString(daeChar* src, std::ostringstream& dst) {
#ifdef _MSC_VER
// Microsoft's stringstream implementation has weird performance issues
static char buffer[64];
_snprintf(buffer, 64, _printFormat, *((daeULong*)src));
dst << buffer;
#else
dst << *(daeULong*)src;
#endif
return true;
}
daeBool daeFloatType::memoryToString(daeChar* src, std::ostringstream& dst) {
if ( *(daeFloat*)src != *(daeFloat*)src ) // NAN
dst << "NaN";
else if ( *(daeUInt*)src == 0x7f800000 ) // +INF
dst << "INF";
else if ( *(daeUInt*)src == 0xff800000 ) // -INF
dst << "-INF";
else
dst << *(daeFloat*)src;
return true;
}
daeBool
daeFloatType::stringToMemory(daeChar *src, daeChar* dstMemory)
{
src = skipWhitespace(src);
if ( strncmp(src, "NaN", 3) == 0 ) {
daeErrorHandler::get()->handleWarning("NaN encountered while setting an attribute or value\n");
*(daeInt*)(dstMemory) = 0x7f800002;
}
else if ( strncmp(src, "INF", 3) == 0 ) {
daeErrorHandler::get()->handleWarning( "INF encountered while setting an attribute or value\n" );
*(daeInt*)(dstMemory) = 0x7f800000;
}
else if ( strncmp(src, "-INF", 4) == 0 ) {
daeErrorHandler::get()->handleWarning( "-INF encountered while setting an attribute or value\n" );
*(daeInt*)(dstMemory) = 0xff800000;
}
else
{
sscanf(src, _scanFormat, dstMemory);
}
return true;
}
daeBool daeDoubleType::memoryToString(daeChar* src, std::ostringstream& dst) {
if ( *(daeDouble*)src != *(daeDouble*)src ) // NAN
dst << "NaN";
else if ( *(daeULong*)src == 0x7ff0000000000000LL ) // +INF
dst << "INF";
else if ( *(daeULong*)src == 0xfff0000000000000LL ) // -INF
dst << "-INF";
else {
#ifdef _MSC_VER
// Microsoft's stringstream implementation has weird performance issues
static char buffer[64];
_snprintf(buffer, 64, _printFormat, *((daeDouble*)src));
dst << buffer;
#else
dst << *(daeDouble*)src;
#endif
}
return true;
}
daeBool
daeDoubleType::stringToMemory(daeChar *src, daeChar* dstMemory)
{
src = skipWhitespace(src);
if ( strncmp(src, "NaN", 3) == 0 ) {
daeErrorHandler::get()->handleWarning( "NaN encountered while setting an attribute or value\n" );
*(daeLong*)(dstMemory) = 0x7ff0000000000002LL;
}
else if ( strncmp(src, "INF", 3) == 0 ) {
daeErrorHandler::get()->handleWarning( "INF encountered while setting an attribute or value\n" );
*(daeLong*)(dstMemory) = 0x7ff0000000000000LL;
}
else if ( strncmp(src, "-INF", 4) == 0 ) {
daeErrorHandler::get()->handleWarning( "-INF encountered while setting an attribute or value\n" );
*(daeLong*)(dstMemory) = 0xfff0000000000000LL;
}
else
{
sscanf(src, _scanFormat, dstMemory);
}
return true;
}
daeBool daeRawRefType::memoryToString(daeChar* src, std::ostringstream& dst) {
dst << (void *)(*((daeRawRef*)src));
return true;
}
daeBool daeStringRefType::memoryToString(daeChar* src, std::ostringstream& dst) {
daeString s = *((daeStringRef *)src);
if (s)
dst << s;
return true;
}
daeBool daeResolverType::memoryToString(daeChar* src, std::ostringstream& dst) {
// Get the URI we are trying to write
daeURI *thisURI = ((daeURI *)src);
// Encode spaces with %20
dst << cdom::replace(thisURI->originalStr(), " ", "%20");
return true;
}
daeBool daeIDResolverType::memoryToString(daeChar* src, std::ostringstream& dst) {
dst << ((daeIDRef *)src)->getID();
return true;
}
daeBool
daeResolverType::stringToMemory(daeChar* src, daeChar* dstMemory)
{
((daeURI*)dstMemory)->set(cdom::replace(src, " ", "%20"));
return true;
}
daeBool
daeIDResolverType::stringToMemory(daeChar* src, daeChar* dstMemory)
{
src = skipWhitespace(src);
daeChar* id = extractToken(src);
((daeIDRef*)dstMemory)->setID(id);
if (id != src)
delete[] id;
return true;
}
daeBool
daeStringRefType::stringToMemory(daeChar* srcChars, daeChar* dstMemory)
{
*((daeStringRef*)dstMemory) = srcChars;
return true;
}
daeBool
daeTokenType::stringToMemory(daeChar* src, daeChar* dst)
{
src = skipWhitespace(src);
daeChar* srcTmp = extractToken(src);
*((daeStringRef*)dst) = srcTmp;
if (srcTmp != src)
delete[] srcTmp;
return true;
}
daeBool
daeEnumType::stringToMemory(daeChar* src, daeChar* dst )
{
src = skipWhitespace(src);
daeChar* srcTmp = extractToken(src);
size_t index(0);
bool result = _strings->find(srcTmp, index) != DAE_ERR_QUERY_NO_MATCH;
if (result) {
daeEnum val = _values->get( index );
*((daeEnum*)dst) = val;
}
if (srcTmp != src)
delete[] srcTmp;
return result;
}
daeBool daeEnumType::memoryToString(daeChar* src, std::ostringstream& dst) {
daeStringRef s = "unknown";
if (_strings != NULL) {
size_t index;
if (_values->find(*((daeEnum*)src), index) == DAE_OK)
s = _strings->get(index);
}
dst << (const char*)s;
return true;
}
daeBool
daeBoolType::stringToMemory(daeChar* srcChars, daeChar* dstMemory)
{
if (strncmp(srcChars,"true",4)==0 || strncmp(srcChars,"1",1)==0)
*((daeBool*)dstMemory) = true;
else
*((daeBool*)dstMemory) = false;
return true;
}
daeBool daeBoolType::memoryToString(daeChar* src, std::ostringstream& dst) {
if (*((daeBool*)src))
dst << "true";
else
dst << "false";
return true;
}
//!!!ACL added for 1.4 complex types and groups
// Unimplemented
daeBool daeElementRefType::memoryToString(daeChar* src, std::ostringstream& dst) {
(void)src;
(void)dst;
return false;
}
daeMemoryRef daeBoolType::create() {
return (daeMemoryRef)new daeBool;
}
daeMemoryRef daeIntType::create() {
return (daeMemoryRef)new daeInt;
}
daeMemoryRef daeLongType::create() {
return (daeMemoryRef)new daeLong;
}
daeMemoryRef daeUIntType::create() {
return (daeMemoryRef)new daeUInt;
}
daeMemoryRef daeULongType::create() {
return (daeMemoryRef)new daeULong;
}
daeMemoryRef daeShortType::create() {
return (daeMemoryRef)new daeShort;
}
daeMemoryRef daeFloatType::create() {
return (daeMemoryRef)new daeFloat;
}
daeMemoryRef daeDoubleType::create() {
return (daeMemoryRef)new daeDouble;
}
daeMemoryRef daeStringRefType::create() {
return (daeMemoryRef)new daeStringRef;
}
daeMemoryRef daeTokenType::create() {
return (daeMemoryRef)new daeStringRef;
}
daeMemoryRef daeElementRefType::create() {
return (daeMemoryRef)new daeElementRef;
}
daeMemoryRef daeEnumType::create() {
return (daeMemoryRef)new daeEnum;
}
daeMemoryRef daeRawRefType::create() {
return (daeMemoryRef)new daeRawRef;
}
daeMemoryRef daeResolverType::create() {
return (daeMemoryRef)new daeURI(*_dae);
}
daeMemoryRef daeIDResolverType::create() {
return (daeMemoryRef)new daeIDRef;
}
void daeBoolType::destroy(daeMemoryRef obj) {
delete (daeBool*)obj;
}
void daeIntType::destroy(daeMemoryRef obj) {
delete (daeInt*)obj;
}
void daeLongType::destroy(daeMemoryRef obj) {
delete (daeLong*)obj;
}
void daeUIntType::destroy(daeMemoryRef obj) {
delete (daeUInt*)obj;
}
void daeULongType::destroy(daeMemoryRef obj) {
delete (daeULong*)obj;
}
void daeShortType::destroy(daeMemoryRef obj) {
delete (daeShort*)obj;
}
void daeFloatType::destroy(daeMemoryRef obj) {
delete (daeFloat*)obj;
}
void daeDoubleType::destroy(daeMemoryRef obj) {
delete (daeDouble*)obj;
}
void daeStringRefType::destroy(daeMemoryRef obj) {
delete (daeStringRef*)obj;
}
void daeTokenType::destroy(daeMemoryRef obj) {
delete (daeStringRef*)obj;
}
void daeElementRefType::destroy(daeMemoryRef obj) {
delete (daeElementRef*)obj;
}
void daeEnumType::destroy(daeMemoryRef obj) {
delete (daeEnum*)obj;
}
void daeRawRefType::destroy(daeMemoryRef obj) {
delete (daeRawRef*)obj;
}
void daeResolverType::destroy(daeMemoryRef obj) {
delete (daeURI*)obj;
}
void daeIDResolverType::destroy(daeMemoryRef obj) {
delete (daeIDRef*)obj;
}
daeInt daeStringRefType::compare(daeChar* value1, daeChar* value2) {
daeString s1 = *((daeStringRef *)value1);
daeString s2 = *((daeStringRef *)value2);
// For string types, the empty string and null are considered equivalent
if (!s1)
s1 = "";
if (!s2)
s2 = "";
return strcmp(s1, s2);
}
daeInt daeResolverType::compare(daeChar* value1, daeChar* value2) {
return strcmp(((daeURI*)value1)->str().c_str(), ((daeURI*)value2)->str().c_str());
}
daeInt daeIDResolverType::compare(daeChar* value1, daeChar* value2) {
return (daeIDRef&)*value1 == (daeIDRef&)*value2;
}
daeArray* daeBoolType::createArray() {
return new daeTArray<daeBool>;
}
daeArray* daeIntType::createArray() {
return new daeTArray<daeInt>;
}
daeArray* daeLongType::createArray() {
return new daeTArray<daeLong>;
}
daeArray* daeUIntType::createArray() {
return new daeTArray<daeUInt>;
}
daeArray* daeULongType::createArray() {
return new daeTArray<daeULong>;
}
daeArray* daeShortType::createArray() {
return new daeTArray<daeShort>;
}
daeArray* daeFloatType::createArray() {
return new daeTArray<daeFloat>;
}
daeArray* daeDoubleType::createArray() {
return new daeTArray<daeDouble>;
}
daeArray* daeStringRefType::createArray() {
return new daeTArray<daeStringRef>;
}
daeArray* daeTokenType::createArray() {
return new daeTArray<daeStringRef>;
}
daeArray* daeElementRefType::createArray() {
return new daeTArray<daeElementRef>;
}
daeArray* daeEnumType::createArray() {
return new daeTArray<daeEnum>;
}
daeArray* daeRawRefType::createArray() {
return new daeTArray<daeRawRef>;
}
daeArray* daeResolverType::createArray() {
// !!!steveT
// The daeURI object no longer has a constructor that takes no arguments, so
// it's not compatible with daeTArray. Therefore this method currently can't be used,
// and asserts if you try to use it. The DOM doesn't ever call this code now,
// so the situation is sort of alright, but we might need to fix this in the future.
assert(false);
return NULL;
}
daeArray* daeIDResolverType::createArray() {
return new daeTArray<daeIDRef>;
}
void daeBoolType::copy(daeChar* src, daeChar* dst) {
(daeBool&)*dst = (daeBool&)*src;
}
void daeIntType::copy(daeChar* src, daeChar* dst) {
(daeInt&)*dst = (daeInt&)*src;
}
void daeLongType::copy(daeChar* src, daeChar* dst) {
(daeLong&)*dst = (daeLong&)*src;
}
void daeUIntType::copy(daeChar* src, daeChar* dst) {
(daeUInt&)*dst = (daeUInt&)*src;
}
void daeULongType::copy(daeChar* src, daeChar* dst) {
(daeULong&)*dst = (daeULong&)*src;
}
void daeShortType::copy(daeChar* src, daeChar* dst) {
(daeShort&)*dst = (daeShort&)*src;
}
void daeFloatType::copy(daeChar* src, daeChar* dst) {
(daeFloat&)*dst = (daeFloat&)*src;
}
void daeDoubleType::copy(daeChar* src, daeChar* dst) {
(daeDouble&)*dst = (daeDouble&)*src;
}
void daeStringRefType::copy(daeChar* src, daeChar* dst) {
(daeStringRef&)*dst = (daeStringRef&)*src;
}
void daeTokenType::copy(daeChar* src, daeChar* dst) {
(daeStringRef&)*dst = (daeStringRef&)*src;
}
void daeElementRefType::copy(daeChar* src, daeChar* dst) {
(daeElementRef&)*dst = (daeElementRef&)*src;
}
void daeEnumType::copy(daeChar* src, daeChar* dst) {
(daeEnum&)*dst = (daeEnum&)*src;
}
void daeRawRefType::copy(daeChar* src, daeChar* dst) {
(daeRawRef&)*dst = (daeRawRef&)*src;
}
void daeResolverType::copy(daeChar* src, daeChar* dst) {
(daeURI&)*dst = (daeURI&)*src;
}
void daeIDResolverType::copy(daeChar* src, daeChar* dst) {
(daeIDRef&)*dst = (daeIDRef&)*src;
}
void daeResolverType::setDocument(daeChar* value, daeDocument* doc) {
daeURI* uri = (daeURI*)value;
uri->setContainer(uri->getContainer());
}
void daeResolverType::setDocument(daeArray& array, daeDocument* doc) {
// !!!steveT
// The daeURI object no longer has a constructor that takes no arguments, so
// it's not compatible with daeTArray. Therefore this method currently can't be used,
// and asserts if you try to use it. The DOM doesn't ever call this code now,
// so the situation is sort of alright, but we might need to fix this in the future.
assert(false);
}