/*******************************************************************/ /* XDMF */ /* eXtensible Data Model and Format */ /* */ /* Id : Id */ /* Date : $Date$ */ /* Version : $Revision$ */ /* */ /* Author: */ /* Jerry A. Clarke */ /* clarke@arl.army.mil */ /* US Army Research Laboratory */ /* Aberdeen Proving Ground, MD */ /* */ /* Copyright @ 2002 US Army Research Laboratory */ /* All Rights Reserved */ /* See Copyright.txt or http://www.arl.hpc.mil/ice for details */ /* */ /* This software is distributed WITHOUT ANY WARRANTY; without */ /* even the implied warranty of MERCHANTABILITY or FITNESS */ /* FOR A PARTICULAR PURPOSE. See the above copyright notice */ /* for more information. */ /* */ /*******************************************************************/ #include "XdmfObject.h" #include namespace xdmf2 { static XdmfInt32 GlobalDebugFlag = 0; static XdmfInt64 NameCntr = 0; istrstream& XDMF_READ_STREAM64(istrstream& istr, XDMF_64_INT& i) { #if defined( XDMF_HAVE_64BIT_STREAMS ) istr >>i; #else // a double here seems to not work // for hex characters so use an int. // since XDMF_HAVE_64BIT_STREAMS is unset // we don't have a long long. // double d = 0; unsigned int d = 0; istr >> d; i = (XDMF_64_INT)d; #endif return istr; } // This is a comment XdmfObject::XdmfObject() { this->Debug = 0; } XdmfObject::~XdmfObject() { } XdmfInt32 XdmfObject::GetGlobalDebug(){ return GlobalDebugFlag; } void XdmfObject::SetGlobalDebug( XdmfInt32 Value ){ GlobalDebugFlag = Value; } XdmfConstString XdmfObject::GetUniqueName(XdmfConstString NameBase){ return(GetUnique(NameBase)); } XdmfInt32 GetGlobalDebug(){ return GlobalDebugFlag; } void SetGlobalDebug( XdmfInt32 Value ){ GlobalDebugFlag = Value; } void SetGlobalDebugOn(){ GlobalDebugFlag = 1; } void SetGlobalDebugOff(){ GlobalDebugFlag = 0; } XdmfString GetUnique( XdmfConstString Pattern ) { static char ReturnName[80]; ostrstream String(ReturnName,80); if( Pattern == NULL ) Pattern = "Xdmf_"; String << Pattern << XDMF_64BIT_CAST(NameCntr++) << ends; return( ReturnName ); } XdmfString XdmfObjectToHandle( XdmfObject *Source ){ ostrstream Handle; XDMF_64_INT RealObjectPointer; XdmfObject **Rpt = &Source; RealObjectPointer = reinterpret_cast(*Rpt); Handle << "_"; Handle.setf(ios::hex,ios::basefield); Handle << XDMF_64BIT_CAST(RealObjectPointer) << "_" << Source->GetClassName() << ends; // cout << "XdmfObjectToHandle : Source = " << Source << endl; // cout << "Handle = " << (XdmfString)Handle.str() << endl; return( (XdmfString)Handle.str() ); } XdmfObject * HandleToXdmfObject( XdmfConstString Source ){ XdmfString src = new char[ strlen(Source) + 1 ]; strcpy(src, Source); istrstream Handle( src, strlen(src)); char c; XDMF_64_INT RealObjectPointer; XdmfObject *RealObject = NULL, **Rpt = &RealObject; Handle >> c; if( c != '_' ) { XdmfErrorMessage("Bad Handle " << Source ); delete [] src; return( NULL ); } Handle.setf(ios::hex,ios::basefield); XDMF_READ_STREAM64(Handle, RealObjectPointer); // cout << "Source = " << Source << endl; // cout << "RealObjectPointer = " << RealObjectPointer << endl; *Rpt = reinterpret_cast(RealObjectPointer); delete [] src; return( RealObject ); } XdmfPointer VoidPointerHandleToXdmfPointer( XdmfConstString Source ){ XdmfString src = new char[ strlen(Source) + 1 ]; strcpy(src, Source); istrstream Handle( src, strlen(src)); char c; XDMF_64_INT RealObjectPointer; XdmfPointer RealObject = NULL, *Rpt = &RealObject; Handle >> c; if( c != '_' ) { XdmfErrorMessage("Bad Handle " << Source ); delete [] src; return( NULL ); } Handle.setf(ios::hex,ios::basefield); XDMF_READ_STREAM64(Handle, RealObjectPointer); // Handle >> RealObjectPointer; // cout << "Source = " << Source << endl; // cout << "RealObjectPointer = " << RealObjectPointer << endl; *Rpt = reinterpret_cast(RealObjectPointer); delete [] src; return( RealObject ); } }