add .gitignore
[tedtools.git] / sfxstr.h
index d5a3c58..283326c 100644 (file)
--- a/sfxstr.h
+++ b/sfxstr.h
@@ -124,8 +124,9 @@ typedef struct SFSNodeStack {
 
 typedef struct {
        /* óÔÁÔÉÓÔÉÞÅÓËÉÅ ÄÁÎÎÙÅ */
-       u_int32_t       totalen; /* ÏÂÝÅÅ ËÏÌ-×Ï ÍÁÌÌÏÃÉÒÏ×ÁÎÎÏÊ ÐÁÍÑÔÉ */
-       u_int32_t       nnodes;  /* ÏÂÝÅÅ ËÏÌ-×Ï ÕÚÌÏ× ÄÅÒÅ×Á */
+       u_int64_t       totalen; /* ÏÂÝÅÅ ËÏÌ-×Ï ÍÁÌÌÏÃÉÒÏ×ÁÎÎÏÊ ÐÁÍÑÔÉ */
+       u_int64_t       nnodes;  /* ÏÂÝÅÅ ËÏÌ-×Ï ÕÚÌÏ× ÄÅÒÅ×Á */
+       char            plainmemory;  /* true ÅÓÌÉ ÄÅÒÅ×Ï × ÐÌÏÓËÏÊ ÐÁÍÑÔÉ */ 
 
        u_int32_t       datasize; /* ÒÁÚÍÅÒ ÚÎÁÞÅÎÉÑ (ËÒÁÔÅΠsizeof(u_int32_t))*/
         SFSNode        *node;    /* ËÏÒÎÅ×ÏÊ ÕÚÅÌ ÄÅÒÅ×Á */
@@ -182,7 +183,17 @@ void SFSAdd(SFSTree *info, SFSDataIO *in);
  * ðÏÉÓË ÚÎÁÞÅÎÉÑ ÐÏ ËÌÀÞÕ, × ÓÌÕÞÁÅ ÕÓÐÅÈÁ ×ÏÚ×ÒÁÝÁÅÔ 
  * ÕËÁÚÁÔÅÌØ ÎÁ ÚÎÁÞÅÎÉÅ, ÉÎÁÞÅ - NULL
  */
-void* SFSFindData(SFSTree *info, char *word);
+void* SFSFindData(SFSTree *info, char *word, int len /* optional */ );
+
+typedef struct SFSTreePosition {
+       SFSNode         **nodeptr;
+       SFSNode          *node;
+       int                       level;
+} SFSTreePosition;
+
+void* SFSFindDataOrSave(SFSTree *info, SFSDataIO *in, SFSTreePosition *position);
+void* SFSFindDataFromSavedOrSave(SFSTree *info, SFSDataIO *in, SFSTreePosition *position);
+void  SFSAddSaved(SFSTree *info, SFSDataIO *in, SFSTreePosition *position);
 
 /*
  * éÎÉÃÉÁÌÉÚÁÃÉÑ ÉÔÅÒÁÔÏÒÁ × ÎÁÞÁÌÏ ÄÅÒÅ×Á 
@@ -216,5 +227,46 @@ int SFSIterate(SFSTree *info, SFSDataIO *out);
  */
 int SFSRange(SFSTree *info, char *word, SFSDataIO *f, SFSDataIO *l); 
 
+/*
+ * ëÏÐÉÒÕÅÔ ÄÅÒÅ×Ï × "ÐÌÏÓËÕÀ" ÐÁÍÑÔØ. "ðÌÏÓËÏÅ" ÄÅÒÅ×Ï Read Only.
+ */
+void SFSMakePlain(SFSTree *info, void *pointer);
+
+/*
+ * ëÏÎ×ÅÒÔÉÒÕÅÔ "ÐÌÏÓËÏÅ" ÄÅÒÅ×Ï × ÏÂÙÞÎÏÅ. 
+ */
+void * SFSRevertPlain(SFSTree *info);
+
+typedef struct SFSTreeDumpHeader {
+       u_int32_t               version;
+       u_int16_t               opaquesize;
+       u_int16_t               headersize;
+       u_int32_t               datasize;
+       u_int32_t               extrasize;
+       u_int64_t               totalen;
+       u_int64_t               nnodes;
+} SFSTreeDumpHeader;
+
+#define  SFSTDHSZ      MAXALIGN( sizeof(SFSTreeDumpHeader) )
+
+/*
+ * óÏÚÄÁÅÔ dump ÄÅÒÅ×Á, ÎÅ ÔÒÅÂÕÅÔ ÂÏÌØÛÏÇÏ ÒÁÓÈÏÄÁ ÐÁÍÑÔÉ
+ */
+void SFSWriteDump(SFSTree *info, char *filename, void *extradata, u_int32_t extrasize);
+
+/*
+ * óÏÚÄÁÅÔ "ÏÂÙÞÎÏÅ" (ÎÅ ÐÌÏÓËÏÅ) ÄÅÒÅ×Ï ÉÚ ÄÁÍÐÁ, 
+ * ÎÅ ÔÒÅÂÕÅÔ ÂÏÌØÛÏÇÏ ÒÁÓÈÏÄÁ ÐÁÍÑÔÉ
+ * ïÂÎÕÌÑÅÔ info!
+ */
+void SFSReadDump(SFSTree *info, char *filename, void **extradata, u_int32_t *extrasize);
+
+/*
+ * éÎÉÃÉÁÌÉÚÉÒÕÅÔ "ÐÌÏÓËÏÅ" ÄÅÒÅ×Ï ÉÚ ÏÂÒÁÚÁ ÄÁÍÐÁ
+ * ïÂÎÕÌÑÅÔ info!
+ */
+void SFSInitFromDump(SFSTree *info, void *pointer, u_int64_t size, void **extradata, u_int32_t *extrasize);
+
+
 #endif