00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef VARSTRING_INCLUDED
00027 #include "export.h"
00028
00029 struct varstr;
00030 typedef struct varstr VarString;
00031
00032 struct varstr_ops {
00033 void (*set)(VarString*,char*);
00034
00035 void (*setv)(VarString*,VarString*);
00036 void (*append)(VarString*,char*);
00037
00038 void (*prepend)(VarString*,char*);
00039 void (*appendv)(VarString*,VarString*);
00040 void (*appendc)(VarString*,char);
00041 void (*prependv)(VarString*,VarString*);
00042 int (*compare)(VarString*,VarString*);
00043 int (*strcmp)(VarString*,char*);
00044
00045
00046 void (*appendblk)(VarString*,char*,int);
00047
00048 void (*prependblk)(VarString*,char*,int);
00049 void (*null_terminate)(VarString*);
00050 void (*ensure_size)(VarString*,int);
00051 void (*shrink)(VarString*,int);
00052
00053
00054 void (*destroy)(VarString*);
00055 };
00056
00057
00058
00059
00060
00061 struct varstr {
00062
00063 int size;
00064 int increment;
00065
00066
00067 int length;
00068 char *string;
00069
00070 struct varstr_ops *op;
00071 };
00072
00073
00074 extern DllExport void call_conv varstring_init(VarString *vstr);
00075 extern DllExport void call_conv varstring_create(VarString **vstr);
00076 extern DllExport struct varstr_ops VarStrOps;
00077
00078
00079 #define XSB_StrSet(vstr,str) (vstr)->op->set(vstr,str)
00080 #define XSB_StrSetV(vstr1,vstr2) (vstr1)->op->setv(vstr1,vstr2)
00081 #define XSB_StrAppend(vstr,str) (vstr)->op->append(vstr,str)
00082 #define XSB_StrPrepend(vstr,str) (vstr)->op->prepend(vstr,str)
00083 #define XSB_StrAppendV(vstr1,vstr2) (vstr1)->op->appendv(vstr1,vstr2)
00084 #define XSB_StrAppendC(vstr,code) (vstr)->op->appendc(vstr,code)
00085 #define XSB_StrPrependV(vstr1,vstr2) (vstr)->op->prependv(vstr1,vstr2)
00086 #define XSB_StrCompare(vstr1,vstr2) (vstr1)->op->compare(vstr1,vstr2)
00087 #define XSB_StrCmp(vstr,str) (vstr)->op->strcmp(vstr,str)
00088 #define XSB_StrAppendBlk(vstr,blk,sz) (vstr)->op->appendblk(vstr,blk,sz)
00089 #define XSB_StrPrependBlk(vstr,blk,sz) (vstr)->op->prependblk(vstr,blk,sz)
00090 #define XSB_StrNullTerminate(vstr) (vstr)->op->null_terminate(vstr)
00091 #define XSB_StrEnsureSize(vstr,size) (vstr)->op->ensure_size(vstr,size)
00092 #define XSB_StrShrink(vstr,incr) (vstr)->op->shrink(vstr,incr)
00093
00094 #define XSB_StrDestroy(vstr) (vstr)->op->destroy(vstr)
00095
00096
00097
00098
00099
00100 #define XSB_StrDefine(vstr) VarString vstr = {0,0,0,NULL,&VarStrOps}
00101
00102
00103 #define XSB_StrCreate(vstr) varstring_create(vstr)
00104
00105 #define XSB_StrInit(vstr) varstring_init(vstr)
00106
00107
00108 #define VARSTRING_INCLUDED
00109
00110 #endif