|
/* Gamelon API - C++ Language * Copyright (c) 1993-1997 Menai Corporation * All rights reserved. U.S. Patent # 5,568,639 and patent pending. * Menai Corporation, Menlo Park, California */
/* Interfaces available for other computer languages, including * C, Delphi and Java. Interface available also for ActiveX. */
/* Notes. * * 1. A small number of functions can be called directly, rather than * through a CURSOR: these provide information about the library * and the computer node at which it is operating. * * 2. Most functions are available in two formats, designed the * 'e prototype' and 'n prototype' formats. The 'e' indicates that * the function returns a numeric indication of outcome in which * a "zero" value indicates success and a "non-zero" value indicates * some specific malfunction or failure. The 'n' indicates that * the function is 'not' an 'e' format, and that it can be expected * to return a meaningful value that relates to the outcome of the * function call, such as a number that represents a count performed * by the function. In both formats the same information is available, * but the 'n' prototype requires a follow-up call to ascertain the * error return value. The 'e' format is very helpful for error * detection and self-documentation of code; the 'n' format is needed * for inline function calls.
/* Functions that do not require an open Cursor: */
/* Note: CursorQueryError will not return errors generated by the * Local functions. */
/* e prototype functions */
EC0 DLL_LINKAGE eLocalSetTmpPath(const char *tmppath); EC0 DLL_LINKAGE eLocalQueryTmpPath(char *tmppath, size_t size); EC0 DLL_LINKAGE eLocalQueryProduct(char *product, size_t size); EC0 DLL_LINKAGE eLocalQueryVersion(char *version, size_t size); EC0 DLL_LINKAGE eLocalQueryErrorString(EC0 error, char *estr, size_t size); EC0 DLL_LINKAGE eLocalQueryNodeIdentity(unsigned long *nodeid);
/* n prototype functions */ void DLL_LINKAGE nLocalSetTmpPath(const char *tmppath); char * DLL_LINKAGE nLocalQueryTmpPath(char *tmppath, size_t size); char * DLL_LINKAGE nLocalQueryProduct(char *product, size_t size); char * DLL_LINKAGE nLocalQueryVersion(char *version, size_t size); char * DLL_LINKAGE nLocalQueryErrorString(EC0 error, char *estr, size_t size); unsigned long DLL_LINKAGE nLocalQueryNodeIdentity(void);
/* CURSOR member functions: */
class CURSOR { public: enum OTYPE { OT_OBJ, OT_AGGR, OT_DATA, OT_SINT, OT_UINT, OT_FLT, OT_CHAR, OT_STR, OT_BIN, OT_OSF, OT_BAD, OT_IDX, OT_REF, OT_UNIC, OT_UNIS }; enum ACCESSMODE { AM_SHARED, AM_KEYED, AM_EXCLUSIVE }; enum EXPORTMODE { EM_OVERWRITE, EM_FAIL, EM_BACKUP }; enum KEYTYPE { KT_PRIM, KT_SINT, KT_UINT, KT_STR, KT_BIN };
/* Cursor Creation and Deletion */ CURSOR(const char *filename, ACCESSMODE accessmode=AM_SHARED, const void *key=NULL, size_t keysize=0) { p=NULL; d=0; InitCursor(filename, accessmode, key, keysize); } ~CURSOR() { TerminateCursor(); }
/* e prototype functions */
/* Node */ EC0 DLL_LINKAGE eNodeSetTmpPath(const char *tmppath); EC0 DLL_LINKAGE eNodeQueryTmpPath(char *tmppath, size_t size); EC0 DLL_LINKAGE eNodeQueryProduct(char *product, size_t size); EC0 DLL_LINKAGE eNodeQueryVersion(char *version, size_t size); EC0 DLL_LINKAGE eNodeQueryErrorString(EC0 error, char *estr, size_t size); EC0 DLL_LINKAGE eNodeQueryNodeIdentity(unsigned long *nodeid);
/* File Control */ EC0 DLL_LINKAGE eFileQueryNameStrLen(size_t *len); EC0 DLL_LINKAGE eFileQueryName(char *name, size_t size); EC0 DLL_LINKAGE eFileQueryAccessMode(ACCESSMODE *accessmode); EC0 DLL_LINKAGE eFileQueryLength(unsigned long *length); EC0 DLL_LINKAGE eFileQueryNodeIdentity(unsigned long *nodeid); EC0 DLL_LINKAGE eFileQueryForeign(int *foreign);
/* Cursor Settings */ EC0 DLL_LINKAGE eCursorSetDataObjectsOnly(int on); EC0 DLL_LINKAGE eCursorSetFollow(int on); EC0 DLL_LINKAGE eCursorSetValidate(int on); EC0 DLL_LINKAGE eCursorSetAutoIdentity(int on); EC0 DLL_LINKAGE eCursorQueryDataObjectsOnly(int *on); EC0 DLL_LINKAGE eCursorQueryFollow(int *on); EC0 DLL_LINKAGE eCursorQueryValidate(int *on); EC0 DLL_LINKAGE eCursorQueryAutoIdentity(int *on);
/* Cursor Rights */ EC0 DLL_LINKAGE eCursorSetRights(unsigned char rights); EC0 DLL_LINKAGE eCursorGrantRights(unsigned char rights); EC0 DLL_LINKAGE eCursorRevokeRights(unsigned char rights); EC0 DLL_LINKAGE eCursorQueryRights(unsigned char *rights); EC0 DLL_LINKAGE eCursorQueryRights(unsigned char rights, int *on);
/* Cursor Actions */ EC0 DLL_LINKAGE eCursorMoveIn(void); EC0 DLL_LINKAGE eCursorMoveOut(void); EC0 DLL_LINKAGE eCursorMovePrior(OTYPE target=OT_OBJ); EC0 DLL_LINKAGE eCursorMoveNext(OTYPE target=OT_OBJ); EC0 DLL_LINKAGE eCursorMoveFirst(OTYPE target=OT_OBJ); EC0 DLL_LINKAGE eCursorMoveLast(OTYPE target=OT_OBJ); EC0 DLL_LINKAGE eCursorMovePreFirst(void); EC0 DLL_LINKAGE eCursorMovePostLast(void); EC0 DLL_LINKAGE eCursorMoveTo(CURSOR *dest); EC0 DLL_LINKAGE eCursorMoveTo(const char *position); EC0 DLL_LINKAGE eCursorMoveTo(unsigned long objectid); EC0 DLL_LINKAGE eCursorMoveTo(unsigned long objectid, CURSOR *index); EC0 DLL_LINKAGE eCursorMoveTo(const char *filename, ACCESSMODE accessmode, const void *key, size_t keysize); EC0 DLL_LINKAGE eCursorJumpTo(void); EC0 DLL_LINKAGE eCursorJumpTo(CURSOR *index); EC0 DLL_LINKAGE eCursorSeizeObject(void); EC0 DLL_LINKAGE eCursorUnseizeObject(void); EC0 DLL_LINKAGE eCursorUnseizeAllObjects(void); EC0 DLL_LINKAGE eCursorCountObjects(unsigned long *count, OTYPE otype=OT_OBJ);
/* Cursor Index Actions */ EC0 DLL_LINKAGE eCursorAssociate(CURSOR *index); EC0 DLL_LINKAGE eCursorDisassociate(CURSOR *index);
/* Miscellaneous Cursor Queries */ EC0 DLL_LINKAGE eCursorQueryValid(int *valid); EC0 DLL_LINKAGE eCursorQueryLevel(long *level); EC0 DLL_LINKAGE eCursorQueryOffset(long *offset); EC0 DLL_LINKAGE eCursorQueryPositionStrLen(size_t *len); EC0 DLL_LINKAGE eCursorQueryPosition(char *position, size_t size); EC0 DLL_LINKAGE eCursorQueryOnSamePosition(CURSOR *otherc, int *onsame); EC0 DLL_LINKAGE eCursorQueryOnObject(int *onobject); EC0 DLL_LINKAGE eCursorQueryOnNull(int *onnull); EC0 DLL_LINKAGE eCursorQueryOnPreFirst(int *onprefirst); EC0 DLL_LINKAGE eCursorQueryOnPostLast(int *onpostlast); EC0 DLL_LINKAGE eCursorQueryOnSeizedObject(int *onseized); EC0 DLL_LINKAGE eCursorQueryError(EXTEC0 *error);
/* Alteration Actions */ EC0 DLL_LINKAGE eAltInsert(void); EC0 DLL_LINKAGE eAltAppend(void); EC0 DLL_LINKAGE eAltReplace(void); EC0 DLL_LINKAGE eAltModify(void); EC0 DLL_LINKAGE eAltRemove(void); EC0 DLL_LINKAGE eAltStartAggregating(void); EC0 DLL_LINKAGE eAltStartBuffering(void); EC0 DLL_LINKAGE eAltCommit(void); EC0 DLL_LINKAGE eAltAbandon(void); EC0 DLL_LINKAGE eAltAbandonPendingAnnotations(void); EC0 DLL_LINKAGE eAltBeginFixedTransaction(void); EC0 DLL_LINKAGE eAltCommitFixedTransaction(void); EC0 DLL_LINKAGE eAltAbandonFixedTransaction(void); EC0 DLL_LINKAGE eAltBeginWanderingTransaction(void); EC0 DLL_LINKAGE eAltCommitWanderingTransaction(void); EC0 DLL_LINKAGE eAltAbandonWanderingTransaction(void); EC0 DLL_LINKAGE eAltQueryAltState(unsigned short *altstate); EC0 DLL_LINKAGE eAltEncrypt(const unsigned char *key, size_t size); EC0 DLL_LINKAGE eAltDecrypt(const unsigned char *key, size_t size); EC0 DLL_LINKAGE eAltDecryptForeign(const unsigned char *key, size_t size, const char *logfilename);
/* Object Read Actions */ EC0 DLL_LINKAGE eObjRead(signed char *sc); EC0 DLL_LINKAGE eObjRead(short *ss); EC0 DLL_LINKAGE eObjRead(long *sl); EC0 DLL_LINKAGE eObjRead(unsigned char *uc); EC0 DLL_LINKAGE eObjRead(unsigned short *us); EC0 DLL_LINKAGE eObjRead(unsigned long *ul); EC0 DLL_LINKAGE eObjRead(float *f); EC0 DLL_LINKAGE eObjRead(double *d); EC0 DLL_LINKAGE eObjRead(char *c); EC0 DLL_LINKAGE eObjRead(char *s, size_t size); EC0 DLL_LINKAGE eObjReadUnicodeChar(unichar *unic); EC0 DLL_LINKAGE eObjReadUnicodeString(unichar *unis, size_t size); EC0 DLL_LINKAGE eObjRead(void *buffer, size_t *size, long offset=0);
/* Object Write Actions */ EC0 DLL_LINKAGE eObjWriteAggregate(void); EC0 DLL_LINKAGE eObjWriteAbsent(OTYPE otype); EC0 DLL_LINKAGE eObjWrite(signed char sc); EC0 DLL_LINKAGE eObjWrite(short ss); EC0 DLL_LINKAGE eObjWrite(long sl); EC0 DLL_LINKAGE eObjWrite(unsigned char uc); EC0 DLL_LINKAGE eObjWrite(unsigned short us); EC0 DLL_LINKAGE eObjWrite(unsigned long ul); EC0 DLL_LINKAGE eObjWrite(float f); EC0 DLL_LINKAGE eObjWrite(double d); EC0 DLL_LINKAGE eObjWrite(char c); EC0 DLL_LINKAGE eObjWrite(const char *s); EC0 DLL_LINKAGE eObjWriteUnicodeChar(unichar unic); EC0 DLL_LINKAGE eObjWriteUnicodeString(const unichar *unis); EC0 DLL_LINKAGE eObjWrite(const void *buffer, size_t size); EC0 DLL_LINKAGE eObjWritePrimaryIndex(const char *filename=NULL); EC0 DLL_LINKAGE eObjWriteSecondaryIndex(KEYTYPE keytype, size_t keysize); EC0 DLL_LINKAGE eObjWriteReference(CURSOR *target); EC0 DLL_LINKAGE eObjWriteReference(unsigned long objectid);
/* Import and Export */ EC0 DLL_LINKAGE eObjImportBinary(const char *pathname); EC0 DLL_LINKAGE eObjExportBinary(const char *pathname, EXPORTMODE mode=EM_OVERWRITE); EC0 DLL_LINKAGE eObjImportOSFile(const char *pathname, unsigned long retain=OSF_ALL); EC0 DLL_LINKAGE eObjExportOSFile(const char *pathname, EXPORTMODE mode=EM_OVERWRITE); EC0 DLL_LINKAGE eObjImportObject(void *buffer, size_t size, const char *logfilename); EC0 DLL_LINKAGE eObjExportObject(void *buffer, size_t *size); EC0 DLL_LINKAGE eObjImportObject(const char *pathname, const char *logfilename); EC0 DLL_LINKAGE eObjExportObject(const char *pathname, EXPORTMODE mode=EM_OVERWRITE);
/* Object Transfers between Cursors */ EC0 DLL_LINKAGE eObjCopyFrom(CURSOR *source); EC0 DLL_LINKAGE eObjMoveFrom(CURSOR *source);
/* Object Content Management */ EC0 DLL_LINKAGE eObjApplyIdentity(unsigned long *objectid=NULL); EC0 DLL_LINKAGE eObjSetClass(unsigned long classnum); EC0 DLL_LINKAGE eObjSetName(const char *name); EC0 DLL_LINKAGE eObjSetComment(const char *comment); EC0 DLL_LINKAGE eObjPurgeAnnotations(unsigned long annotations); EC0 DLL_LINKAGE eObjChangeIndexTarget(const char *filename); EC0 DLL_LINKAGE eObjQueryNodeIdentity(unsigned long *nodeid); EC0 DLL_LINKAGE eObjQueryForeign(int *foreign); EC0 DLL_LINKAGE eObjQueryObjectIdentity(unsigned long *objectid); EC0 DLL_LINKAGE eObjQueryClass(unsigned long *classnum); EC0 DLL_LINKAGE eObjQueryNameStrLen(size_t *len); EC0 DLL_LINKAGE eObjQueryCommentStrLen(size_t *len); EC0 DLL_LINKAGE eObjQueryName(char *name, size_t size); EC0 DLL_LINKAGE eObjQueryComment(char *comment, size_t size); EC0 DLL_LINKAGE eObjQueryEncryption(unsigned long *method); EC0 DLL_LINKAGE eObjQueryIndexTarget(char *filename, size_t size);
/* Object Queries */ EC0 DLL_LINKAGE eObjQueryValid(int *valid); EC0 DLL_LINKAGE eObjQueryType(OTYPE *otype, size_t *size=NULL); EC0 DLL_LINKAGE eObjQueryAggregate(int *aggregate); EC0 DLL_LINKAGE eObjQueryData(int *data); EC0 DLL_LINKAGE eObjQueryDataAbsent(int *absent); EC0 DLL_LINKAGE eObjQueryDataSize(size_t *size); EC0 DLL_LINKAGE eObjQueryObjectSize(size_t *size); EC0 DLL_LINKAGE eObjQueryAggregateEmpty(int *empty); EC0 DLL_LINKAGE eObjQueryOSFileNameStrLen(size_t *len); EC0 DLL_LINKAGE eObjQueryOSFilePathStrLen(size_t *len); EC0 DLL_LINKAGE eObjQueryOSFileName(char *name, size_t size); EC0 DLL_LINKAGE eObjQueryOSFilePath(char *path, size_t size); EC0 DLL_LINKAGE eObjQueryOSFileLastModTime(time_t *modtime); EC0 DLL_LINKAGE eObjQueryOSFileLength(unsigned long *length); EC0 DLL_LINKAGE eObjQueryReference(unsigned long *objectid); EC0 DLL_LINKAGE eObjQueryIndexKeyType(KEYTYPE *keytype, size_t *keysize);
/* Object Display Actions */ EC0 DLL_LINKAGE eObjQueryDisplayStrLen(size_t *len); EC0 DLL_LINKAGE eObjDisplay(char *s, size_t size); EC0 DLL_LINKAGE eObjExportDisplay(const char *filename);
/* Indexing */ EC0 DLL_LINKAGE eIndexOpen(void); EC0 DLL_LINKAGE eIndexOpen(ACCESSMODE accessmode, const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(long key1, long key2)); EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(unsigned long key1, unsigned long key2)); EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(const char *key1, const char *key2)); EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(const void *key1, size_t keysize1, const void *key2, size_t keysize2)); EC0 DLL_LINKAGE eIndexClose(void); EC0 DLL_LINKAGE eIndexFlush(void); EC0 DLL_LINKAGE eIndexErase(void); EC0 DLL_LINKAGE eIndexSetAutoPurge(int on); EC0 DLL_LINKAGE eIndexQueryAutoPurge(int *on); EC0 DLL_LINKAGE eIndexInclude(CURSOR *object); EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid); EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, long key); EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, unsigned long key); EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, const char *key); EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexChange(unsigned long objectid, long key, long newkey); EC0 DLL_LINKAGE eIndexChange(unsigned long objectid, unsigned long key, unsigned long newkey); EC0 DLL_LINKAGE eIndexChange(unsigned long objectid, const char *key, const char *newkey); EC0 DLL_LINKAGE eIndexChange(unsigned long objectid, const void *key, size_t keysize, const void *newkey, size_t newkeysize); EC0 DLL_LINKAGE eIndexExclude(CURSOR *object); EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid); EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, long key); EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, unsigned long key); EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, const char *key); EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexExcludeAll(long key); EC0 DLL_LINKAGE eIndexExcludeAll(unsigned long key); EC0 DLL_LINKAGE eIndexExcludeAll(const char *key); EC0 DLL_LINKAGE eIndexExcludeAll(const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexAttachTo(CURSOR *cursor); EC0 DLL_LINKAGE eIndexDetachFrom(CURSOR *cursor); EC0 DLL_LINKAGE eIndexRegister(CURSOR *range); EC0 DLL_LINKAGE eIndexDeregister(CURSOR *range); EC0 DLL_LINKAGE eIndexQueryCount(unsigned long *count); EC0 DLL_LINKAGE eIndexQueryCount(unsigned long objectid, unsigned long *count); EC0 DLL_LINKAGE eIndexQueryCountKey(long key, unsigned long *count); EC0 DLL_LINKAGE eIndexQueryCountKey(unsigned long key, unsigned long *count); EC0 DLL_LINKAGE eIndexQueryCountKey(const char *key, unsigned long *count); EC0 DLL_LINKAGE eIndexQueryCountKey(const void *key, size_t keysize, unsigned long *count); EC0 DLL_LINKAGE eIndexQueryIncluded(unsigned long objectid, int *included); EC0 DLL_LINKAGE eIndexQueryCurrentKeySize(size_t *keysize); EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid); EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid, long *key); EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid, unsigned long *key); EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid, char *key, size_t *keysize); EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid, void *key, size_t *keysize); EC0 DLL_LINKAGE eIndexChangeCurrent(long key); EC0 DLL_LINKAGE eIndexChangeCurrent(unsigned long key); EC0 DLL_LINKAGE eIndexChangeCurrent(const char *key); EC0 DLL_LINKAGE eIndexChangeCurrent(const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexExcludeCurrent(void); EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, long key); EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, unsigned long key); EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, const char *key); EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexSeekFirst(void); EC0 DLL_LINKAGE eIndexSeekFirst(long key); EC0 DLL_LINKAGE eIndexSeekFirst(unsigned long key); EC0 DLL_LINKAGE eIndexSeekFirst(const char *key); EC0 DLL_LINKAGE eIndexSeekFirst(const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexSeekLast(void); EC0 DLL_LINKAGE eIndexSeekLast(long key); EC0 DLL_LINKAGE eIndexSeekLast(unsigned long key); EC0 DLL_LINKAGE eIndexSeekLast(const char *key); EC0 DLL_LINKAGE eIndexSeekLast(const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexSeekPrior(void); EC0 DLL_LINKAGE eIndexSeekPrior(long key); EC0 DLL_LINKAGE eIndexSeekPrior(unsigned long key); EC0 DLL_LINKAGE eIndexSeekPrior(const char *key); EC0 DLL_LINKAGE eIndexSeekPrior(const void *key, size_t keysize); EC0 DLL_LINKAGE eIndexSeekNext(void); EC0 DLL_LINKAGE eIndexSeekNext(long key); EC0 DLL_LINKAGE eIndexSeekNext(unsigned long key); EC0 DLL_LINKAGE eIndexSeekNext(const char *key); EC0 DLL_LINKAGE eIndexSeekNext(const void *key, size_t keysize); private: void *p; int d; unsigned long e;
/* InitCursor and TerminateCursor are called by the constructor and * destructor, respectively, to improve portability of the DLL among * compilers. These functions are not intended to be used for any other * purpose. */ void DLL_LINKAGE InitCursor(const char *filename, ACCESSMODE accessmode, const void *key, size_t keysize); void DLL_LINKAGE TerminateCursor(void); }; /* Copyright (c) 1993-1997 Menai Corporation */ |
||||||||||||||||
| |
||||||||||||||||
|
Home | Product | Consulting | Programming | Reviews | Company | Site Map | Guest Book |
||||||||||||||||
|
Menai Corporation, 1010 El Camino Real, Suite 300, Menlo Park, California 94025-4335 |
||||||||||||||||
|
Copyright © 1996-98 Menai Corporation. All Rights Reserved. Menai, Gamelon and gamelon(stylized) are worldwide trademarks of Menai Corporation, registered in the United States of America, and the .[g] logo is a worldwide trademark of Menai Corporation. All other trademarks are owned by their respective owners. |
||||||||||||||||