Upgraded to latest COLLADA-DOM 1.2.0, see http://sourceforge.net/project/showfiles.php?group_id=157838
November 13, 2006 Re-applied the 'INF' fix for constraint limits.
This commit is contained in:
@@ -37,13 +37,21 @@
|
||||
extern daeString COLLADA_VERSION;
|
||||
|
||||
daeInt DAEInstanceCount = 0;
|
||||
daeMetaElement *DAE::topMeta = NULL;
|
||||
|
||||
void
|
||||
DAE::cleanup()
|
||||
{
|
||||
if (DAEInstanceCount == 0) {
|
||||
if (topMeta != NULL) {
|
||||
daeMetaElement::releaseMetas();
|
||||
daeAtomicType::uninitializeKnownTypes();
|
||||
topMeta = NULL;
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
terminateURI();
|
||||
terminateResolveArray();
|
||||
daeStringRef::releaseStringTable();
|
||||
daeIDRefResolver::terminateIDRefSolver();
|
||||
//----------------------
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +64,14 @@ DAE::DAE() : database(NULL),
|
||||
defaultPlugin(false),
|
||||
registerFunc(NULL)
|
||||
{
|
||||
topMeta = initializeDomMeta();
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
initializeURI();
|
||||
initializeResolveArray();
|
||||
daeIDRefResolver::initializeIDRefSolver();
|
||||
//------------------------
|
||||
if ( DAEInstanceCount == 0 ) {
|
||||
topMeta = initializeDomMeta();
|
||||
}
|
||||
DAEInstanceCount++;
|
||||
}
|
||||
|
||||
@@ -69,8 +84,12 @@ DAE::~DAE()
|
||||
delete resolver;
|
||||
delete idResolver;
|
||||
}
|
||||
topMeta = NULL;
|
||||
daeElement::clearResolveArray();
|
||||
--DAEInstanceCount;
|
||||
if ( DAEInstanceCount <= 0 )
|
||||
{
|
||||
cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
// Database setup
|
||||
@@ -259,7 +278,7 @@ daeInt DAE::saveAs(daeString name, daeString documentName, daeBool replace)
|
||||
|
||||
// Make a URI from "name" and save to that
|
||||
|
||||
daeURI tempURI(name);
|
||||
daeURI tempURI(name, true);
|
||||
return plugin->write(&tempURI, document, replace);
|
||||
|
||||
}
|
||||
@@ -297,6 +316,7 @@ daeInt DAE::unload(daeString name)
|
||||
|
||||
daeInt DAE::clear()
|
||||
{
|
||||
daeElement::clearResolveArray();
|
||||
if (database)
|
||||
database->clear();
|
||||
return DAE_OK;
|
||||
|
||||
@@ -70,8 +70,8 @@ daeArray::grow(size_t sz)
|
||||
|
||||
if (_data != NULL)
|
||||
memcpy(newData,_data,_capacity*_elementSize);
|
||||
else
|
||||
memset(newData,0,_capacity*_elementSize);
|
||||
//else
|
||||
// memset(newData,0,_capacity*_elementSize);
|
||||
|
||||
memset(newData+_capacity*_elementSize,0,
|
||||
(newCapacity-_capacity)*_elementSize);
|
||||
@@ -82,3 +82,4 @@ daeArray::grow(size_t sz)
|
||||
_data = newData;
|
||||
_capacity = newCapacity;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <dae/daeIDRef.h>
|
||||
#include <dae/daeMetaElement.h>
|
||||
#include <dae/daeDatabase.h>
|
||||
#include <dae/daeErrorHandler.h>
|
||||
|
||||
daeAtomicTypeArray* daeAtomicType::_Types = NULL;
|
||||
daeBool daeAtomicType::_TypesInitialized = false;
|
||||
@@ -33,14 +34,17 @@ daeAtomicType::initializeKnownTypes()
|
||||
void
|
||||
daeAtomicType::uninitializeKnownTypes()
|
||||
{
|
||||
_TypesInitialized = false;
|
||||
unsigned int i;
|
||||
for (i=0;i<_Types->getCount();i++)
|
||||
{
|
||||
daeAtomicType* type = _Types->get(i);
|
||||
delete type;
|
||||
if ( _TypesInitialized )
|
||||
{
|
||||
_TypesInitialized = false;
|
||||
unsigned int i;
|
||||
for (i=0;i<_Types->getCount();i++)
|
||||
{
|
||||
daeAtomicType* type = _Types->get(i);
|
||||
delete type;
|
||||
}
|
||||
delete _Types;
|
||||
}
|
||||
delete _Types;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -210,8 +214,8 @@ daeLongType::daeLongType()
|
||||
_maxStringLength = 32;
|
||||
_nameBindings.append("xsLong");
|
||||
_nameBindings.append("xsLongArray");
|
||||
_printFormat = "%ld";
|
||||
_scanFormat = "%ld";
|
||||
_printFormat = "%lld";
|
||||
_scanFormat = "%lld";
|
||||
_typeString = "long";
|
||||
}
|
||||
daeShortType::daeShortType()
|
||||
@@ -249,8 +253,8 @@ daeULongType::daeULongType()
|
||||
_maxStringLength = 32;
|
||||
_nameBindings.append("ulong");
|
||||
_nameBindings.append("xsUnsignedLong");
|
||||
_printFormat = "%lu";
|
||||
_scanFormat = "%lu";
|
||||
_printFormat = "%llu";
|
||||
_scanFormat = "%llu";
|
||||
_typeString = "ulong";
|
||||
}
|
||||
daeFloatType::daeFloatType()
|
||||
@@ -398,7 +402,44 @@ daeBool
|
||||
daeFloatType::memoryToString(daeChar* src, daeChar* dst, daeInt dstSize)
|
||||
{
|
||||
if (_maxStringLength > dstSize) return false;
|
||||
sprintf(dst,_printFormat,*((daeFloat*)src));
|
||||
if ( *(daeFloat*)src != *(daeFloat*)src ) //NAN
|
||||
{
|
||||
strcpy( dst, "NaN" );
|
||||
}
|
||||
else if ( *(daeInt*)src == 0x7f800000 ) //+INF
|
||||
{
|
||||
strcpy( dst, "INF" );
|
||||
}
|
||||
else if ( *(daeInt*)src == 0xff800000 ) //-INF
|
||||
{
|
||||
strcpy( dst, "-INF" );
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(dst,_printFormat,*((daeFloat*)src));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
daeBool
|
||||
daeFloatType::stringToMemory(daeChar *src, daeChar* dstMemory)
|
||||
{
|
||||
if ( strcmp(src, "NaN") == 0 ) {
|
||||
daeErrorHandler::get()->handleWarning("NaN encountered while setting an attribute or value\n");
|
||||
*(daeInt*)(dstMemory) = 0x7f800002;
|
||||
}
|
||||
else if ( strcmp(src, "INF") == 0 ) {
|
||||
daeErrorHandler::get()->handleWarning( "INF encountered while setting an attribute or value\n" );
|
||||
*(daeInt*)(dstMemory) = 0x7f800000;
|
||||
}
|
||||
else if ( strcmp(src, "-INF") == 0 ) {
|
||||
daeErrorHandler::get()->handleWarning( "-INF encountered while setting an attribute or value\n" );
|
||||
*(daeInt*)(dstMemory) = 0xff800000;
|
||||
}
|
||||
else
|
||||
{
|
||||
sscanf(src, _scanFormat, dstMemory);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -406,9 +447,47 @@ daeBool
|
||||
daeDoubleType::memoryToString(daeChar* src, daeChar* dst, daeInt dstSize)
|
||||
{
|
||||
if (_maxStringLength > dstSize) return false;
|
||||
sprintf(dst,_printFormat,*((daeDouble*)src));
|
||||
if ( *(daeDouble*)src != *(daeDouble*)src ) //NAN
|
||||
{
|
||||
strcpy( dst, "NaN" );
|
||||
}
|
||||
else if ( *(daeLong*)src == 0x7ff0000000000000LL ) //+INF
|
||||
{
|
||||
strcpy( dst, "INF" );
|
||||
}
|
||||
else if ( *(daeLong*)src == 0xfff0000000000000LL ) //-INF
|
||||
{
|
||||
strcpy( dst, "-INF" );
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(dst,_printFormat,*((daeDouble*)src));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
daeBool
|
||||
daeDoubleType::stringToMemory(daeChar *src, daeChar* dstMemory)
|
||||
{
|
||||
if ( strcmp(src, "NaN") == 0 ) {
|
||||
daeErrorHandler::get()->handleWarning( "NaN encountered while setting an attribute or value\n" );
|
||||
*(daeLong*)(dstMemory) = 0x7ff0000000000002LL;
|
||||
}
|
||||
else if ( strcmp(src, "INF") == 0 ) {
|
||||
daeErrorHandler::get()->handleWarning( "INF encountered while setting an attribute or value\n" );
|
||||
*(daeLong*)(dstMemory) = 0x7ff0000000000000LL;
|
||||
}
|
||||
else if ( strcmp(src, "-INF") == 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, daeChar* dst, daeInt dstSize)
|
||||
{
|
||||
@@ -468,7 +547,7 @@ daeResolverType::memoryToString(daeChar* src, daeChar* dst, daeInt dstSize)
|
||||
// or some other document so we know what URI to write out.
|
||||
// !!!GAC this approach should be safe, if the collection pointer of our document matches the collection pointer
|
||||
// !!!GAC of the element our URI is pointing at, we are pointing at our own doc.
|
||||
if(thisURI->getElement()->getCollection() == thisURI->getContainer()->getDocument())
|
||||
if(thisURI->getElement()->getDocument() == thisURI->getContainer()->getDocument())
|
||||
{
|
||||
// we will send back the original URI if we're pointing at ourselves
|
||||
s = thisURI->getOriginalURI();
|
||||
@@ -552,17 +631,17 @@ daeIDResolverType::memoryToString(daeChar* src, daeChar* dst, daeInt dstSize)
|
||||
}
|
||||
|
||||
void
|
||||
daeAtomicType::resolve(daeElementRef element, daeMetaAttributeRef ma)
|
||||
daeAtomicType::resolve(daeElementRef element, daeChar* src)
|
||||
{
|
||||
// just to remove the warnings
|
||||
(void)element;
|
||||
(void)ma;
|
||||
(void)src;
|
||||
}
|
||||
|
||||
void
|
||||
daeResolverType::resolve(daeElementRef element, daeMetaAttributeRef ma)
|
||||
daeResolverType::resolve(daeElementRef element, daeChar* src)
|
||||
{
|
||||
daeURI* resolver = (daeURI*)ma->getWritableMemory(element);
|
||||
daeURI* resolver = (daeURI*)src;
|
||||
resolver->setContainer(element);
|
||||
resolver->resolveElement();
|
||||
}
|
||||
@@ -570,13 +649,35 @@ daeResolverType::resolve(daeElementRef element, daeMetaAttributeRef ma)
|
||||
daeBool
|
||||
daeResolverType::stringToMemory(daeChar* src, daeChar* dstMemory)
|
||||
{
|
||||
((daeURI*)dstMemory)->setURI(src);
|
||||
#define MAX_PATH 1024
|
||||
daeChar tempstr[MAX_PATH];
|
||||
memset(tempstr,0,MAX_PATH);
|
||||
daeChar* s;
|
||||
daeChar* t;
|
||||
for(s=src, t=tempstr; *s!=0; s++,t++)
|
||||
{
|
||||
if (*s == '%') {
|
||||
if ((*(s+1) == '2') && (*(s+2) == '0'))
|
||||
{
|
||||
(*t)=' ';
|
||||
s+=2;
|
||||
continue;
|
||||
}
|
||||
} else if (*s == ' ') {
|
||||
char err[512];
|
||||
memset( err, 0, 512 );
|
||||
sprintf(err,"uri contains white space, dom will convert them to %20 in output files!\n uri=%s", src);
|
||||
daeErrorHandler::get()->handleWarning( err );
|
||||
}
|
||||
*t=*s;
|
||||
}
|
||||
((daeURI*)dstMemory)->setURI(tempstr);
|
||||
return true;
|
||||
}
|
||||
void
|
||||
daeIDResolverType::resolve(daeElementRef element, daeMetaAttributeRef ma)
|
||||
daeIDResolverType::resolve(daeElementRef element, daeChar* src)
|
||||
{
|
||||
daeIDRef* resolver = (daeIDRef*)ma->getWritableMemory(element);
|
||||
daeIDRef* resolver = (daeIDRef*)src;
|
||||
resolver->setContainer( element );
|
||||
resolver->resolveElement();
|
||||
}
|
||||
|
||||
@@ -13,6 +13,14 @@
|
||||
|
||||
#include <dae/daeDocument.h>
|
||||
|
||||
// sthomas
|
||||
daeDocument::~daeDocument()
|
||||
{
|
||||
for( unsigned int i = 0; i < externalURIs.getCount(); i++ ) {
|
||||
delete externalURIs[i];
|
||||
}
|
||||
}
|
||||
|
||||
void daeDocument::insertElement( daeElementRef element ) {
|
||||
daeElement *parent = element->getParentElement();
|
||||
size_t idx;
|
||||
@@ -84,3 +92,13 @@ void daeDocument::resolveExternals( daeString docURI ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const daeTArray<daeURI*> *daeDocument::getExternalURIs(daeStringRef docURI) const
|
||||
{
|
||||
size_t idx;
|
||||
|
||||
if (referencedDocuments.find(docURI, idx) != DAE_OK)
|
||||
return NULL;
|
||||
|
||||
return externalURIs[idx];
|
||||
}
|
||||
|
||||
@@ -33,9 +33,34 @@ daeElementRef DAECreateElement(int nbytes)
|
||||
return new(nbytes) daeElement;
|
||||
}
|
||||
|
||||
static daeElementRefArray resolveArray;
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// static daeElementRefArray resolveArray;
|
||||
static daeElementRefArray* pResolveArray = NULL;
|
||||
//static char StaticIndentBuf[] = "";
|
||||
|
||||
extern "C" void initializeResolveArray(void)
|
||||
{
|
||||
if(!pResolveArray) {
|
||||
pResolveArray = new daeElementRefArray;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void terminateResolveArray(void)
|
||||
{
|
||||
if(pResolveArray) {
|
||||
delete pResolveArray;
|
||||
pResolveArray = NULL;
|
||||
}
|
||||
}
|
||||
//----------------------------------
|
||||
|
||||
// sthomas (see https://collada.org/public_forum/viewtopic.php?t=325&)
|
||||
void daeElement::releaseElements()
|
||||
{
|
||||
// resolveArray.clear();
|
||||
pResolveArray->clear();
|
||||
}
|
||||
|
||||
daeIntegrationObject*
|
||||
daeElement::getIntObject( IntegrationState from_state, IntegrationState to_state )
|
||||
{
|
||||
@@ -211,7 +236,15 @@ void daeElement::setDocument( daeDocument *c ) {
|
||||
if( _document == c ) {
|
||||
return;
|
||||
}
|
||||
if (_document != NULL )
|
||||
{
|
||||
_document->removeElement(this);
|
||||
}
|
||||
_document = c;
|
||||
if ( _document != NULL )
|
||||
{
|
||||
_document->insertElement(this);
|
||||
}
|
||||
|
||||
daeElementRefArray ea;
|
||||
getChildren( ea );
|
||||
@@ -243,7 +276,7 @@ daeElement::setAttribute(daeString attrName, daeString attrValue)
|
||||
if (metaAttrs[i]->getType() != NULL)
|
||||
{
|
||||
metaAttrs[i]->set(this,attrValue);
|
||||
_validAttributeArray[i] = true;
|
||||
_validAttributeArray.set(i, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -302,19 +335,46 @@ daeMemoryRef daeElement::getAttributeValue( daeString attrName ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
daeBool daeElement::hasValue() {
|
||||
if (_meta == NULL)
|
||||
return false;
|
||||
|
||||
return (_meta->getValueAttribute() != NULL );
|
||||
}
|
||||
|
||||
daeMemoryRef daeElement::getValuePointer() {
|
||||
if (_meta == NULL)
|
||||
return false;
|
||||
|
||||
if ( _meta->getValueAttribute() != NULL )
|
||||
{
|
||||
return _meta->getValueAttribute()->getWritableMemory(this);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
daeElement::appendResolveElement(daeElement* elem)
|
||||
{
|
||||
resolveArray.append(elem);
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// resolveArray.append(elem);
|
||||
pResolveArray->append(elem);
|
||||
//----------------------
|
||||
}
|
||||
void
|
||||
daeElement::resolveAll()
|
||||
{
|
||||
int cnt;
|
||||
while(resolveArray.getCount()) {
|
||||
cnt = (int)resolveArray.getCount();
|
||||
daeElementRef elem = resolveArray[cnt-1];
|
||||
resolveArray.removeIndex(cnt-1);
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// while(resolveArray.getCount()) {
|
||||
while(pResolveArray->getCount()) {
|
||||
// cnt = (int)resolveArray.getCount();
|
||||
cnt = (int)pResolveArray->getCount();
|
||||
// daeElementRef elem = resolveArray[cnt-1];
|
||||
daeElementRef elem = (*pResolveArray)[cnt-1];
|
||||
// resolveArray.removeIndex(cnt-1);
|
||||
pResolveArray->removeIndex(cnt-1);
|
||||
//--------------------------
|
||||
elem->resolve();
|
||||
}
|
||||
/*size_t cnt = resolveArray.getCount();
|
||||
@@ -324,13 +384,22 @@ daeElement::resolveAll()
|
||||
resolveArray.clear();*/
|
||||
}
|
||||
|
||||
void
|
||||
daeElement::clearResolveArray()
|
||||
{
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// resolveArray.clear();
|
||||
pResolveArray->clear();
|
||||
//------------------------
|
||||
}
|
||||
|
||||
void
|
||||
daeElement::resolve()
|
||||
{
|
||||
if (_meta == NULL)
|
||||
return;
|
||||
|
||||
daeMetaAttributeRefArray& maa = _meta->getMetaAttributes();
|
||||
daeMetaAttributePtrArray& maa = _meta->getMetaResolvers();
|
||||
int n = (int)maa.getCount();
|
||||
int i;
|
||||
for(i=0;i<n;i++)
|
||||
@@ -363,9 +432,9 @@ daeElement::setup(daeMetaElement* meta)
|
||||
attrs[i]->set(this, attrs[i]->getDefault());
|
||||
_validAttributeArray[i] = true;
|
||||
}
|
||||
else {
|
||||
_validAttributeArray[i] = false;
|
||||
}
|
||||
// else {
|
||||
// _validAttributeArray[i] = false;
|
||||
// }
|
||||
}
|
||||
|
||||
#if 0
|
||||
@@ -438,6 +507,7 @@ daeSmartRef<daeElement> daeElement::clone(daeString idSuffix, daeString nameSuff
|
||||
for ( unsigned int i = 0; i < attrs.getCount(); i++ ) {
|
||||
//memcpy( attrs[i]->getWritableMemory( ret ), attrs[i]->getWritableMemory( this ), attrs[i]->getSize() );
|
||||
attrs[i]->copy( ret, this );
|
||||
ret->_validAttributeArray[i] = _validAttributeArray[i];
|
||||
}
|
||||
if ( _meta->getValueAttribute() != NULL ) {
|
||||
daeMetaAttribute *val = _meta->getValueAttribute();
|
||||
@@ -458,7 +528,8 @@ daeSmartRef<daeElement> daeElement::clone(daeString idSuffix, daeString nameSuff
|
||||
if ( strcmp( str, "" ) ) {
|
||||
strcat( str, idSuffix );
|
||||
}
|
||||
id->getType()->stringToMemory( str, id->getWritableMemory( ret ) );
|
||||
//id->getType()->stringToMemory( str, id->getWritableMemory( ret ) );
|
||||
id->set( ret, str );
|
||||
}
|
||||
//mangle the name
|
||||
daeMetaAttribute *nm = _meta->getMetaAttribute("name");
|
||||
@@ -468,7 +539,8 @@ daeSmartRef<daeElement> daeElement::clone(daeString idSuffix, daeString nameSuff
|
||||
if ( strcmp( str, "" ) ) {
|
||||
strcat( str, nameSuffix );
|
||||
}
|
||||
nm->getType()->stringToMemory( str, nm->getWritableMemory( ret ) );
|
||||
//nm->getType()->stringToMemory( str, nm->getWritableMemory( ret ) );
|
||||
nm->set( ret, str );
|
||||
}
|
||||
//ret->_intObject = _intObject;
|
||||
return ret;
|
||||
|
||||
@@ -15,7 +15,9 @@
|
||||
#include <dae/daeDatabase.h>
|
||||
#include <dae/daeErrorHandler.h>
|
||||
|
||||
daeIDRefResolverPtrArray daeIDRefResolver::_KnownResolvers;
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
daeIDRefResolverPtrArray* daeIDRefResolver::_KnownResolvers = NULL;
|
||||
//----------------------------------
|
||||
|
||||
void
|
||||
daeIDRef::initialize()
|
||||
@@ -49,6 +51,7 @@ daeIDRef::daeIDRef(daeIDRef& copyFrom)
|
||||
element = copyFrom.element;
|
||||
setID(copyFrom.getID());
|
||||
state = copyFrom.state;
|
||||
container = copyFrom.container;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -57,6 +60,7 @@ daeIDRef::copyFrom(daeIDRef& copyFrom)
|
||||
element = copyFrom.element;
|
||||
setID(copyFrom.getID());
|
||||
state = copyFrom.state;
|
||||
container = copyFrom.container;
|
||||
}
|
||||
|
||||
daeString emptyID = "";
|
||||
@@ -134,25 +138,54 @@ daeIDRef::resolveID()
|
||||
}
|
||||
}
|
||||
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
void daeIDRefResolver::initializeIDRefSolver(void)
|
||||
{
|
||||
if(!_KnownResolvers) {
|
||||
_KnownResolvers = new daeIDRefResolverPtrArray();
|
||||
}
|
||||
}
|
||||
|
||||
void daeIDRefResolver::terminateIDRefSolver(void)
|
||||
{
|
||||
if(_KnownResolvers) {
|
||||
delete _KnownResolvers;
|
||||
_KnownResolvers = NULL;
|
||||
}
|
||||
}
|
||||
//-------------------------------------
|
||||
|
||||
void
|
||||
daeIDRefResolver::attemptResolveElement(daeIDRef& id, daeString typeNameHint)
|
||||
{
|
||||
int i;
|
||||
int cnt = (int)_KnownResolvers.getCount();
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// int cnt = (int)_KnownResolvers.getCount();
|
||||
int cnt = (int)_KnownResolvers->getCount();
|
||||
//-------------------------------
|
||||
|
||||
for(i=0;i<cnt;i++)
|
||||
if (_KnownResolvers[i]->resolveElement(id, typeNameHint))
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// if (_KnownResolvers[i]->resolveElement(id, typeNameHint))
|
||||
if ((*_KnownResolvers)[i]->resolveElement(id, typeNameHint))
|
||||
//-------------------------
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
daeIDRefResolver::attemptResolveID(daeIDRef& id)
|
||||
{
|
||||
int i,cnt = (int)_KnownResolvers.getCount();
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// int i,cnt = (int)_KnownResolvers.getCount();
|
||||
int i,cnt = (int)_KnownResolvers->getCount();
|
||||
//-------------------------------
|
||||
|
||||
// daeBool foundProtocol = false;
|
||||
for(i=0;i<cnt;i++)
|
||||
if (_KnownResolvers[i]->resolveID(id))
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// if (_KnownResolvers[i]->resolveID(id))
|
||||
if ((*_KnownResolvers)[i]->resolveID(id))
|
||||
//-----------------------------
|
||||
return;
|
||||
|
||||
#if defined(_DEBUG) && defined(WIN32)
|
||||
@@ -165,12 +198,18 @@ daeIDRefResolver::attemptResolveID(daeIDRef& id)
|
||||
|
||||
daeIDRefResolver::daeIDRefResolver()
|
||||
{
|
||||
_KnownResolvers.append((daeIDRefResolver*)this);
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// _KnownResolvers.append((daeIDRefResolver*)this);
|
||||
_KnownResolvers->append((daeIDRefResolver*)this);
|
||||
//------------------------------
|
||||
}
|
||||
|
||||
daeIDRefResolver::~daeIDRefResolver()
|
||||
{
|
||||
_KnownResolvers.remove((daeIDRefResolver*)this);
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// _KnownResolvers.remove((daeIDRefResolver*)this);
|
||||
_KnownResolvers->remove((daeIDRefResolver*)this);
|
||||
//-----------------------------------------
|
||||
}
|
||||
|
||||
|
||||
@@ -208,7 +247,15 @@ daeDefaultIDRefResolver::resolveElement(daeIDRef& idref, daeString typeNameHint)
|
||||
|
||||
daeString id = idref.getID();
|
||||
|
||||
status = _database->getElement(&resolved,0,id,typeNameHint,NULL);
|
||||
if ( idref.getContainer() == NULL )
|
||||
{
|
||||
char msg[128];
|
||||
sprintf(msg,"daeDefaultIDRefResolver::resolveElement() - failed to resolve %s\n",idref.getID(), ". IDRef needs a container element!" );
|
||||
daeErrorHandler::get()->handleWarning( msg );
|
||||
return false;
|
||||
}
|
||||
|
||||
status = _database->getElement( &resolved, 0, id, typeNameHint, idref.getContainer()->getDocumentURI()->getURI() );
|
||||
|
||||
idref.setElement( resolved );
|
||||
|
||||
|
||||
@@ -43,7 +43,8 @@ daeBool daeMetaAny::removeElement( daeElement *parent, daeElement *child ) {
|
||||
daeMetaElement * daeMetaAny::findChild( daeString elementName ) {
|
||||
if ( elementName != NULL ) {
|
||||
const daeMetaElementRefArray &metas = daeMetaElement::getAllMetas();
|
||||
for ( size_t x = 0; x < metas.getCount(); x++ ) {
|
||||
size_t cnt = metas.getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
if ( !metas[x]->getIsInnerClass() && strcmp( elementName, metas[x]->getName() ) == 0 ) {
|
||||
return metas[x];
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ daeMetaAttribute::set(daeElement* e, daeString s)
|
||||
|
||||
void daeMetaAttribute::copy(daeElement* to, daeElement *from) {
|
||||
daeChar str[4096];
|
||||
_type->memoryToString( getWritableMemory(from), str, 2048 );
|
||||
_type->memoryToString( getWritableMemory(from), str, 4096 );
|
||||
_type->stringToMemory( str, getWritableMemory( to ) );
|
||||
//memcpy( getWritableMemory( to ), getWritableMemory( from ), getSize() );
|
||||
}
|
||||
@@ -110,7 +110,18 @@ void
|
||||
daeMetaAttribute::resolve(daeElementRef element)
|
||||
{
|
||||
if (_type != NULL)
|
||||
_type->resolve(element, this);
|
||||
_type->resolve(element, getWritableMemory(element) );
|
||||
}
|
||||
|
||||
void
|
||||
daeMetaArrayAttribute::resolve(daeElementRef element)
|
||||
{
|
||||
daeArray* era = (daeArray*)getWritableMemory(element);
|
||||
size_t cnt = era->getCount();
|
||||
for ( size_t i = 0; i < cnt; i++ )
|
||||
{
|
||||
_type->resolve( element, era->getRawData()+(i*era->getElementSize()) );
|
||||
}
|
||||
}
|
||||
|
||||
daeInt
|
||||
|
||||
@@ -34,8 +34,10 @@ daeElement *daeMetaChoice::placeElement( daeElement *parent, daeElement *child,
|
||||
}
|
||||
|
||||
daeElement *retVal = NULL;
|
||||
size_t cnt = _children.getCount();
|
||||
|
||||
for ( daeInt i = 0; ( i < _maxOccurs || _maxOccurs == -1 ); i++ ) {
|
||||
for ( size_t x = 0; x < _children.getCount(); x++ ) {
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
if ( _children[x]->placeElement( parent, child, ordinal, i, before, after ) != NULL ) {
|
||||
retVal = child;
|
||||
ordinal = ordinal + _ordinalOffset;
|
||||
@@ -68,7 +70,8 @@ daeElement *daeMetaChoice::placeElement( daeElement *parent, daeElement *child,
|
||||
}
|
||||
|
||||
daeBool daeMetaChoice::removeElement( daeElement *parent, daeElement *child ) {
|
||||
for ( size_t x = 0; x < _children.getCount(); x++ ) {
|
||||
size_t cnt = _children.getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
if ( _children[x]->removeElement( parent, child ) ) {
|
||||
return true;
|
||||
}
|
||||
@@ -78,7 +81,8 @@ daeBool daeMetaChoice::removeElement( daeElement *parent, daeElement *child ) {
|
||||
|
||||
daeMetaElement * daeMetaChoice::findChild( daeString elementName ) {
|
||||
daeMetaElement *me = NULL;
|
||||
for ( size_t x = 0; x < _children.getCount(); x++ ) {
|
||||
size_t cnt = _children.getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
me = _children[x]->findChild( elementName );
|
||||
if ( me != NULL ) {
|
||||
return me;
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
#include <dae/daeMetaCMPolicy.h>
|
||||
#include <dae/daeMetaElementAttribute.h>
|
||||
|
||||
daeMetaElementRefArray daeMetaElement::_metas;
|
||||
static daeMetaElementRefArray *mera = NULL;
|
||||
static daeTArray< daeMetaElement** > *mes = NULL;
|
||||
|
||||
daeElementRef
|
||||
daeMetaElement::create()
|
||||
@@ -101,6 +102,7 @@ daeMetaElement::daeMetaElement()
|
||||
_elementSize = sizeof(daeElement);
|
||||
_metaValue = NULL;
|
||||
_metaContents = NULL;
|
||||
_metaContentsOrder = NULL; // sthomas
|
||||
_metaIntegration = NULL;
|
||||
_metaID = NULL;
|
||||
_isTrackableForQueries = true;
|
||||
@@ -109,7 +111,7 @@ daeMetaElement::daeMetaElement()
|
||||
_isAbstract = false;
|
||||
_allowsAny = false;
|
||||
_innerClass = false;
|
||||
_metas.append(this);
|
||||
_metas().append(this);
|
||||
|
||||
_contentModel = NULL;
|
||||
}
|
||||
@@ -118,6 +120,17 @@ daeMetaElement::~daeMetaElement()
|
||||
{
|
||||
if (_metaContents)
|
||||
delete _metaContents;
|
||||
if (_contentModel) // sthomas
|
||||
delete _contentModel;
|
||||
if (_metaContentsOrder) // sthomas
|
||||
delete _metaContentsOrder;
|
||||
}
|
||||
|
||||
void daeMetaElement::setCMRoot( daeMetaCMPolicy *cm )
|
||||
{
|
||||
if (_contentModel)
|
||||
delete _contentModel;
|
||||
_contentModel = cm;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -139,6 +152,10 @@ daeMetaElement::addContentsOrder(daeInt offset)
|
||||
meaa->setName("contentsOrder");
|
||||
meaa->setOffset(offset);
|
||||
meaa->setContainer( this);
|
||||
|
||||
if (_metaContentsOrder)
|
||||
delete _metaContentsOrder;
|
||||
|
||||
_metaContentsOrder = meaa;
|
||||
}
|
||||
|
||||
@@ -237,7 +254,23 @@ daeMetaElement::getMetaAttribute(daeString s)
|
||||
|
||||
void daeMetaElement::releaseMetas()
|
||||
{
|
||||
_metas.clear();
|
||||
_metas().clear();
|
||||
size_t count = _classMetaPointers().getCount();
|
||||
for ( size_t i = 0; i < count; i++ )
|
||||
{
|
||||
*(_classMetaPointers()[i]) = NULL;
|
||||
}
|
||||
_classMetaPointers().clear();
|
||||
if (mera)
|
||||
{
|
||||
delete mera;
|
||||
mera = NULL;
|
||||
}
|
||||
if (mes)
|
||||
{
|
||||
delete mes;
|
||||
mes = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
daeBool daeMetaElement::place(daeElement *parent, daeElement *child, daeUInt *ordinal )
|
||||
@@ -261,7 +294,8 @@ daeBool daeMetaElement::place(daeElement *parent, daeElement *child, daeUInt *or
|
||||
daeUIntArray* contentsOrder =
|
||||
(daeUIntArray*)_metaContentsOrder->getWritableMemory(parent);
|
||||
daeBool needsAppend = true;
|
||||
for ( size_t x = 0; x < contentsOrder->getCount(); x++ ) {
|
||||
size_t cnt = contentsOrder->getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
if ( contentsOrder->get(x) > ord ) {
|
||||
contents->insertAt( x, retVal );
|
||||
contentsOrder->insertAt( x, ord );
|
||||
@@ -300,7 +334,12 @@ daeBool daeMetaElement::placeAt( daeInt index, daeElement *parent, daeElement *c
|
||||
validLoc = contentsOrder->get(index) >= ord && contentsOrder->get(index) <= ord;
|
||||
}
|
||||
else {
|
||||
validLoc = contentsOrder->get(index) >= ord;
|
||||
if ( contentsOrder->getCount() == 0 ) {
|
||||
validLoc = true;
|
||||
}
|
||||
else {
|
||||
validLoc = contentsOrder->get(index) >= ord;
|
||||
}
|
||||
}
|
||||
if ( validLoc ) {
|
||||
contents->insertAt( index, retVal );
|
||||
@@ -462,3 +501,22 @@ void daeMetaElement::getChildren( daeElement* parent, daeElementRefArray &array
|
||||
_contentModel->getChildren( parent, array );
|
||||
}
|
||||
}
|
||||
|
||||
daeMetaElementRefArray &daeMetaElement::_metas()
|
||||
{
|
||||
if (!mera)
|
||||
{
|
||||
mera = new daeMetaElementRefArray();
|
||||
}
|
||||
return *mera;
|
||||
}
|
||||
|
||||
daeTArray< daeMetaElement** > &daeMetaElement::_classMetaPointers()
|
||||
{
|
||||
if (!mes)
|
||||
{
|
||||
mes = new daeTArray< daeMetaElement** >();
|
||||
}
|
||||
return *mes;
|
||||
}
|
||||
|
||||
|
||||
@@ -141,29 +141,24 @@ daeMetaElementArrayAttribute::placeElement(daeElement* parent, daeElement* child
|
||||
if ( child->getMeta() != _elementType || ( child->getElementName() != NULL && strcmp( child->getElementName(), _name ) != 0 ) ) {
|
||||
return NULL;
|
||||
}
|
||||
if (child->getParentElement() == parent) {
|
||||
//I Don't know why this gets called when the child already has this as parent.
|
||||
return child;
|
||||
}
|
||||
daeElement *p = child->getParentElement();
|
||||
daeElementRefArray* era = (daeElementRefArray*)getWritableMemory(parent);
|
||||
if ( _maxOccurs != -1 && (daeInt)era->getCount()-offset >= _maxOccurs ) {
|
||||
return NULL;
|
||||
}
|
||||
removeElement( child->getParentElement(), child );
|
||||
removeElement( p, child );
|
||||
child->setParentElement( parent );
|
||||
|
||||
if ( before != NULL || after != NULL ) {
|
||||
if ( before != NULL && before->getMeta() == _elementType ) {
|
||||
size_t idx(0);
|
||||
if ( era->find( before, idx ) == DAE_OK ) {
|
||||
era->insertAt( idx, child );
|
||||
}
|
||||
if ( before != NULL && before->getMeta() == _elementType ) {
|
||||
size_t idx(0);
|
||||
if ( era->find( before, idx ) == DAE_OK ) {
|
||||
era->insertAt( idx, child );
|
||||
}
|
||||
else if ( after != NULL && after->getMeta() == _elementType ) {
|
||||
size_t idx(0);
|
||||
if ( era->find( after, idx ) == DAE_OK ) {
|
||||
era->insertAt( idx+1, child );
|
||||
}
|
||||
}
|
||||
else if ( after != NULL && after->getMeta() == _elementType ) {
|
||||
size_t idx(0);
|
||||
if ( era->find( after, idx ) == DAE_OK ) {
|
||||
era->insertAt( idx+1, child );
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -225,7 +220,8 @@ void daeMetaElementAttribute::getChildren( daeElement *parent, daeElementRefArra
|
||||
|
||||
void daeMetaElementArrayAttribute::getChildren( daeElement *parent, daeElementRefArray &array ) {
|
||||
daeElementRefArray* era = (daeElementRefArray*)getWritableMemory(parent);
|
||||
for ( size_t x = 0; x < era->getCount(); x++ ) {
|
||||
size_t cnt = era->getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
array.append( era->get(x) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,8 +34,9 @@ daeElement *daeMetaSequence::placeElement( daeElement *parent, daeElement *child
|
||||
}
|
||||
}
|
||||
|
||||
size_t cnt = _children.getCount();
|
||||
for ( daeInt i = 0; ( i < _maxOccurs || _maxOccurs == -1 ); i++ ) {
|
||||
for ( size_t x = 0; x < _children.getCount(); x++ ) {
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
if ( _children[x]->placeElement( parent, child, ordinal, i, before, after ) != NULL ) {
|
||||
ordinal = ordinal + (i * ( _maxOrdinal + 1 )) + _ordinalOffset;
|
||||
return child;
|
||||
@@ -46,7 +47,8 @@ daeElement *daeMetaSequence::placeElement( daeElement *parent, daeElement *child
|
||||
}
|
||||
|
||||
daeBool daeMetaSequence::removeElement( daeElement *parent, daeElement *child ) {
|
||||
for ( size_t x = 0; x < _children.getCount(); x++ ) {
|
||||
size_t cnt = _children.getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
if ( _children[x]->removeElement( parent, child ) ) {
|
||||
return true;
|
||||
}
|
||||
@@ -56,7 +58,8 @@ daeBool daeMetaSequence::removeElement( daeElement *parent, daeElement *child )
|
||||
|
||||
daeMetaElement * daeMetaSequence::findChild( daeString elementName ) {
|
||||
daeMetaElement *me = NULL;
|
||||
for ( size_t x = 0; x < _children.getCount(); x++ ) {
|
||||
size_t cnt = _children.getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
me = _children[x]->findChild( elementName );
|
||||
if ( me != NULL ) {
|
||||
return me;
|
||||
@@ -66,7 +69,8 @@ daeMetaElement * daeMetaSequence::findChild( daeString elementName ) {
|
||||
}
|
||||
|
||||
void daeMetaSequence::getChildren( daeElement *parent, daeElementRefArray &array ) {
|
||||
for ( size_t x = 0; x < _children.getCount(); x++ ) {
|
||||
size_t cnt = _children.getCount();
|
||||
for ( size_t x = 0; x < cnt; x++ ) {
|
||||
_children[x]->getChildren( parent, array );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
|
||||
daeSIDResolver::daeSIDResolver( daeElement *container, daeString target, daeString profile )
|
||||
{
|
||||
element = NULL;
|
||||
doubleArray = NULL;
|
||||
doublePtr = NULL;
|
||||
|
||||
this->container = container;
|
||||
if ( target != NULL ) {
|
||||
this->target = new char[ strlen( target ) +1 ];
|
||||
@@ -161,6 +165,7 @@ void daeSIDResolver::resolve()
|
||||
if ( idref.getState() != daeIDRef::id_success ) {
|
||||
state = sid_failed_not_found;
|
||||
delete[] id;
|
||||
element = NULL;
|
||||
return;
|
||||
}
|
||||
element = idref.getElement();
|
||||
|
||||
@@ -13,17 +13,41 @@
|
||||
|
||||
#include <dae/daeStringRef.h>
|
||||
|
||||
daeStringTable daeStringRef::_stringTable;
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// Nus: Use global pointer instead of local static.
|
||||
static daeStringTable *pST = NULL;
|
||||
//---------------------------
|
||||
|
||||
daeStringTable &daeStringRef::_stringTable()
|
||||
{
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// static daeStringTable *st = new daeStringTable();
|
||||
// return *st;
|
||||
if(!pST)
|
||||
pST = new daeStringTable();
|
||||
return *pST;
|
||||
}
|
||||
|
||||
void daeStringRef::releaseStringTable(void)
|
||||
{
|
||||
if(pST) {
|
||||
delete pST;
|
||||
pST = NULL;
|
||||
}
|
||||
}
|
||||
//--------------------------------
|
||||
|
||||
daeStringRef::daeStringRef(daeString string)
|
||||
{
|
||||
_string = _stringTable.allocString(string);
|
||||
daeStringTable &st = _stringTable();
|
||||
_string = st.allocString(string);
|
||||
}
|
||||
|
||||
const daeStringRef&
|
||||
daeStringRef::set(daeString string)
|
||||
{
|
||||
_string = _stringTable.allocString(string);
|
||||
daeStringTable &st = _stringTable();
|
||||
_string = st.allocString(string);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,8 +15,9 @@
|
||||
|
||||
daeStringTable::daeStringTable(int stringBufferSize):_stringBufferSize(stringBufferSize), _empty( "" )
|
||||
{
|
||||
_stringBufferIndex = _stringBufferSize;
|
||||
//allocate initial buffer
|
||||
allocateBuffer();
|
||||
//allocateBuffer();
|
||||
}
|
||||
|
||||
daeString daeStringTable::allocateBuffer()
|
||||
|
||||
@@ -26,21 +26,59 @@ daeString safeCreate(daeString src);
|
||||
void safeDelete(daeString src);
|
||||
daeString findCharacterReverse(daeString string, daeChar stopChar);
|
||||
|
||||
daeURIResolverPtrArray daeURIResolver::_KnownResolvers;
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
static daeURIResolverPtrArray *pKR = NULL;
|
||||
//---------------------------
|
||||
|
||||
static daeURI ApplicationURI(1);
|
||||
daeURIResolverPtrArray &daeURIResolver::_KnownResolvers()
|
||||
{
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// static daeURIResolverPtrArray *kr = new daeURIResolverPtrArray();
|
||||
// return *kr;
|
||||
return *pKR;
|
||||
//--------------------------------
|
||||
}
|
||||
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
static daeURI* pAppURI = NULL;
|
||||
// static daeURI ApplicationURI(1);
|
||||
|
||||
extern "C" void initializeURI(void)
|
||||
{
|
||||
if(!pAppURI) {
|
||||
pAppURI = new daeURI(1);
|
||||
}
|
||||
if(!pKR) {
|
||||
pKR = new daeURIResolverPtrArray();
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void terminateURI(void)
|
||||
{
|
||||
delete pAppURI;
|
||||
pAppURI = NULL;
|
||||
delete pKR;
|
||||
pKR = NULL;
|
||||
}
|
||||
//--------------------------------------
|
||||
|
||||
void
|
||||
daeURI::setBaseURI(daeURI& uri)
|
||||
{
|
||||
ApplicationURI.reset();
|
||||
ApplicationURI.setURI(uri.getURI());
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// ApplicationURI.reset();
|
||||
// ApplicationURI.setURI(uri.getURI());
|
||||
pAppURI->reset();
|
||||
pAppURI->setURI(uri.getURI());
|
||||
//------------------------
|
||||
}
|
||||
|
||||
daeURI*
|
||||
daeURI::getBaseURI()
|
||||
{
|
||||
return &ApplicationURI;
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
return pAppURI;
|
||||
//--------------------------------------
|
||||
}
|
||||
|
||||
void
|
||||
@@ -252,6 +290,18 @@ void safeDelete(daeString src)
|
||||
void
|
||||
daeURI::setURI(daeString _URIString)
|
||||
{
|
||||
//Contributed by Nus - Wed, 08 Nov 2006
|
||||
// Nus: Checking for existing string.
|
||||
if(originalURIString && _URIString) {
|
||||
if(strcmp(originalURIString, _URIString) == 0)
|
||||
return;
|
||||
}
|
||||
// Nus: If the string exist, delete it first.
|
||||
if(originalURIString) {
|
||||
safeDelete(originalURIString);
|
||||
originalURIString = NULL;
|
||||
}
|
||||
//---------------------------
|
||||
originalURIString = safeCreate(_URIString);
|
||||
internalSetURI(_URIString);
|
||||
}
|
||||
@@ -646,7 +696,7 @@ daeURI::validate(daeURI* baseURI)
|
||||
uriString = newURI;
|
||||
state = uri_pending;
|
||||
|
||||
if ( container != NULL ) {
|
||||
if ( container != NULL && container->getDocumentURI() != NULL ) {
|
||||
daeString fp = container->getDocumentURI()->getFilepath();
|
||||
daeString f = container->getDocumentURI()->getFile();
|
||||
if ( strcmp( fp, filepath ) != 0 || strcmp( f, file ) != 0 ) {
|
||||
@@ -897,27 +947,27 @@ void
|
||||
daeURIResolver::attemptResolveElement(daeURI& uri, daeString typeNameHint)
|
||||
{
|
||||
int i;
|
||||
int cnt =(int) _KnownResolvers.getCount();
|
||||
int cnt =(int) _KnownResolvers().getCount();
|
||||
|
||||
for(i=0;i<cnt;i++)
|
||||
if ((_KnownResolvers[i]->isProtocolSupported(uri.getProtocol()))&&
|
||||
if ((_KnownResolvers()[i]->isProtocolSupported(uri.getProtocol()))&&
|
||||
((uri.getFile() == NULL) ||
|
||||
(uri.getFile()[0] == '\0') ||
|
||||
(_KnownResolvers[i]->isExtensionSupported(uri.getExtension()))) &&
|
||||
(_KnownResolvers[i]->resolveElement(uri, typeNameHint)))
|
||||
(_KnownResolvers()[i]->isExtensionSupported(uri.getExtension()))) &&
|
||||
(_KnownResolvers()[i]->resolveElement(uri, typeNameHint)))
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
daeURIResolver::attemptResolveURI(daeURI& uri)
|
||||
{
|
||||
int i,cnt = (int)_KnownResolvers.getCount();
|
||||
int i,cnt = (int)_KnownResolvers().getCount();
|
||||
|
||||
daeBool foundProtocol = false;
|
||||
for(i=0;i<cnt;i++)
|
||||
if (_KnownResolvers[i]->isProtocolSupported(uri.getProtocol())) {
|
||||
if (_KnownResolvers()[i]->isProtocolSupported(uri.getProtocol())) {
|
||||
foundProtocol = true;
|
||||
if (_KnownResolvers[i]->resolveURI(uri))
|
||||
if (_KnownResolvers()[i]->resolveURI(uri))
|
||||
return;
|
||||
}
|
||||
#if defined(_DEBUG) && defined(WIN32)
|
||||
@@ -949,12 +999,12 @@ daeBool daeURIResolver::_loadExternalDocuments = true;
|
||||
|
||||
daeURIResolver::daeURIResolver()
|
||||
{
|
||||
_KnownResolvers.append((daeURIResolver*)this);
|
||||
_KnownResolvers().append((daeURIResolver*)this);
|
||||
}
|
||||
|
||||
daeURIResolver::~daeURIResolver()
|
||||
{
|
||||
_KnownResolvers.remove((daeURIResolver*)this);
|
||||
_KnownResolvers().remove((daeURIResolver*)this);
|
||||
}
|
||||
// This code is loosely based on the RFC 2396 normalization code from
|
||||
// libXML. Specifically it does the RFC steps 6.c->6.g from section 5.2
|
||||
@@ -1220,3 +1270,13 @@ int daeURI::makeRelativeTo(daeURI* relativeToURI)
|
||||
return(DAE_OK);
|
||||
}
|
||||
|
||||
void daeURIResolver::setAutoLoadExternalDocuments( daeBool load )
|
||||
{
|
||||
_loadExternalDocuments = load;
|
||||
}
|
||||
|
||||
daeBool daeURIResolver::getAutoLoadExternalDocuments()
|
||||
{
|
||||
return _loadExternalDocuments;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,14 +37,18 @@ domAny::registerElement()
|
||||
daeMetaElement *_Meta = new daeMetaElement;
|
||||
_Meta->setName( "any" );
|
||||
//_Meta->setStaticPointerAddress(&domAny::_Meta);
|
||||
_Meta->registerConstructor(domAny::create);
|
||||
_Meta->registerClass(domAny::create);
|
||||
_Meta->setIsInnerClass( true );
|
||||
|
||||
daeMetaCMPolicy *cm = NULL;
|
||||
cm = new daeMetaSequence( _Meta, cm, 0, 1, 1 );
|
||||
|
||||
cm = new daeMetaAny( _Meta, cm, 0, 0, -1 );
|
||||
cm->getParent()->appendChild( cm ); // sthomas
|
||||
cm = cm->getParent();
|
||||
|
||||
cm->setMaxOrdinal( 0 );
|
||||
_Meta->setCMRoot( cm );
|
||||
_Meta->setCMRoot( cm );
|
||||
_Meta->setAllowsAny( true );
|
||||
|
||||
_Meta->addContents(daeOffsetOf(domAny,_contents));
|
||||
|
||||
Reference in New Issue
Block a user