* ðÏÉÓË ÚÎÁÞÅÎÉÑ ÐÏ ËÌÀÞÕ, × ÓÌÕÞÁÅ ÕÓÐÅÈÁ ×ÏÚ×ÒÁÝÁÅÔ
* ÕËÁÚÁÔÅÌØ ÎÁ ÚÎÁÞÅÎÉÅ, ÉÎÁÞÅ - 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);
/*
* éÎÉÃÉÁÌÉÚÁÃÉÑ ÉÔÅÒÁÔÏÒÁ × ÎÁÞÁÌÏ ÄÅÒÅ×Á
typedef struct SFSTreeDumpHeader {
u_int32_t version;
- u_int32_t opaquesize;
- u_int32_t headersize;
+ 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)) )
+#define SFSTDHSZ MAXALIGN( sizeof(SFSTreeDumpHeader) )
/*
* óÏÚÄÁÅÔ dump ÄÅÒÅ×Á, ÎÅ ÔÒÅÂÕÅÔ ÂÏÌØÛÏÇÏ ÒÁÓÈÏÄÁ ÐÁÍÑÔÉ
*/
-void SFSWriteDump(SFSTree *info, char *filename);
+void SFSWriteDump(SFSTree *info, char *filename, void *extradata, u_int32_t extrasize);
/*
* óÏÚÄÁÅÔ "ÏÂÙÞÎÏÅ" (ÎÅ ÐÌÏÓËÏÅ) ÄÅÒÅ×Ï ÉÚ ÄÁÍÐÁ,
* ÎÅ ÔÒÅÂÕÅÔ ÂÏÌØÛÏÇÏ ÒÁÓÈÏÄÁ ÐÁÍÑÔÉ
* ïÂÎÕÌÑÅÔ info!
*/
-void SFSReadDump(SFSTree *info, char *filename);
+void SFSReadDump(SFSTree *info, char *filename, void **extradata, u_int32_t *extrasize);
/*
* éÎÉÃÉÁÌÉÚÉÒÕÅÔ "ÐÌÏÓËÏÅ" ÄÅÒÅ×Ï ÉÚ ÏÂÒÁÚÁ ÄÁÍÐÁ
* ïÂÎÕÌÑÅÔ info!
*/
-void SFSInitFromDump(SFSTree *info, void *pointer, u_int64_t size);
+void SFSInitFromDump(SFSTree *info, void *pointer, u_int64_t size, void **extradata, u_int32_t *extrasize);
#endif