extern "C" { | |
typedef struct _IO_FILE FILE; | |
extern struct _IO_FILE *stderr; | |
extern int fprintf (FILE *__restrict __stream, __const char *__restrict __format, ...); | |
} | |
enum { | |
kPOVMSObjectClassID = 'OCLA', kPOVMSMessageClassID = 'MCLA', kPOVMSMessageIdentID = 'MIDE', kPOVMSSourceAddressID = 'MSRC', kPOVMSDestinationAddressID = 'MDST', kPOVMSMessageTimeoutID = 'TOUT', kPOVMSMessageErrorID = 'MERR' }; | |
typedef void * POVMSContext; | |
typedef struct POVMSData POVMSObject, *POVMSObjectPtr; | |
typedef struct POVMSData POVMSAttribute, *POVMSAttributePtr; | |
struct POVMSData { | |
union { | |
struct POVMSNode *root; | |
}; | |
}; | |
struct POVMSNode { | |
struct POVMSNode *next; | |
unsigned int key; | |
struct POVMSData data; | |
}; | |
int POVMSObject_New (POVMSObjectPtr object, unsigned int objclass); | |
int POVMSObject_Set (POVMSObjectPtr object, POVMSAttributePtr attr, unsigned int key); | |
int POVMSAttr_Copy (POVMSAttributePtr sourceattr, POVMSAttributePtr destattr); | |
int POVMSUtil_GetType (POVMSObjectPtr object, unsigned int key, unsigned int *typevalue); | |
namespace pov_base { | |
enum { | |
kNoError = 0, kNoErr = kNoError, kParamErr = -1, kMemFullErr = -2, kOutOfMemoryErr = kMemFullErr, kInvalidDataSizeErr = -3, kCannotHandleDataErr = -4, kNullPointerErr = -5, kChecksumErr = -6, kParseErr = -7, kCannotOpenFileErr = -8, kInvalidDestAddrErr = -9, kCannotConnectErr = -10, kDisconnectedErr = -11, kHostDisconnectedErr = -12, kNetworkDataErr = -13, kNetworkConnectionErr = -14, kObjectAccessErr = -15, kVersionErr = -16, kFileDataErr = -17, kAuthorisationErr = -18, kDataTypeErr = -19, kTimeoutErr = -20, kInvalidContextErr = -21 }; | |
} | |
using namespace pov_base; | |
struct POVMSContextData { | |
}; | |
int POVMS_AssertFunction (int cond, const char *str, const char *filename, int line); | |
int POVMS_OpenContext(POVMSContext *contextrefptr) { | |
POVMSContextData *context = __null; | |
if(contextrefptr == __null) return kParamErr; | |
if(POVMS_AssertFunction(context != __null, "POVMS_Open_Context failed, out of memory", "povms.cpp", 283) == false) return kMemFullErr; | |
return kNoErr; | |
} | |
int POVMS_AssertFunction(int cond, const char *str, const char *filename, int line) { | |
if(cond == false) { | |
fprintf(stderr, "POVMS_ASSERT failed in %s line %d: %s\n", filename, (int)line, str); | |
} | |
} | |
int POVMSObject_Copy(POVMSObjectPtr sourceobject, POVMSObjectPtr destobject) { | |
POVMSNode *cur = __null; | |
POVMSAttribute attr; | |
unsigned int t; | |
int ret = kNoErr; | |
if(sourceobject == destobject) return kParamErr; | |
if(POVMSUtil_GetType(sourceobject, kPOVMSObjectClassID, &t) != kNoErr) return kObjectAccessErr; | |
if(POVMSObject_New(destobject, t) != kNoErr) return kObjectAccessErr; | |
for(cur = sourceobject->root; | |
cur != __null; | |
cur = cur->next) { | |
if(POVMS_AssertFunction(POVMSAttr_Copy(&(cur->data), &attr) == kNoErr, "POVMSObject_Copy failed, out of memory", "povms.cpp", 2028) == false) { | |
} | |
if(POVMS_AssertFunction(POVMSObject_Set(destobject, &attr, cur->key) == kNoErr, "POVMSObject_Copy failed, out of memory", "povms.cpp", 2034) == false) { | |
} | |
} | |
return ret; | |
} | |
int POVMSObject_Merge(POVMSObjectPtr sourceobject, POVMSObjectPtr destobject) { | |
POVMSNode *cur = __null; | |
POVMSAttribute attr; | |
unsigned int t1, t2; | |
int ret = kNoErr; | |
if(destobject == __null) return kParamErr; | |
if(POVMSUtil_GetType(sourceobject, kPOVMSObjectClassID, &t1) != kNoErr) return kObjectAccessErr; | |
if(POVMSUtil_GetType(sourceobject, kPOVMSObjectClassID, &t2) != kNoErr) return kObjectAccessErr; | |
for(cur = sourceobject->root; | |
cur != __null; | |
cur = cur->next) { | |
if(POVMS_AssertFunction(POVMSObject_Set(destobject, &attr, cur->key) == kNoErr, "POVMSObject_Merge failed, out of memory", "povms.cpp", 2090) == false) { | |
} | |
} | |
return ret; | |
} |