OSDN Git Service

add residhash wrapper to datcache.
authorornse01 <ornse01@users.sourceforge.jp>
Sun, 16 May 2010 11:49:42 +0000 (11:49 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Sun, 16 May 2010 11:49:42 +0000 (11:49 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchan/trunk@115 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/Makefile
src/cache.c
src/cache.h

index 896661f..447e637 100644 (file)
@@ -38,7 +38,7 @@ VPATH = $(S)
 HEADER := $(S) $(HEADER)
 
 # ¥½¡¼¥¹¥Õ¥¡¥¤¥ë
-SRC =  main.c cache.c parser.c layout.c window.c retriever.c tadlib.c confirm.c poptray.c postres.c http.c submit.c sjisstring.c parselib.c submitutil.c bchan_vobj.c tadurl.c bchan_panels.c bchan_menus.c
+SRC =  main.c cache.c parser.c layout.c window.c retriever.c tadlib.c confirm.c poptray.c postres.c http.c submit.c sjisstring.c parselib.c submitutil.c bchan_vobj.c tadurl.c bchan_panels.c bchan_menus.c residhash.c
 
 # ¥Ç¡¼¥¿¥Ü¥Ã¥¯¥¹¥½¡¼¥¹¥Õ¥¡¥¤¥ë
 DBSRC =
index 2a970e7..7f8ea2d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * cache.c
  *
- * Copyright (c) 2009 project bchan
+ * Copyright (c) 2009-2010 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -33,6 +33,7 @@
 #include       <bsys/queue.h>
 
 #include    "cache.h"
+#include    "residhash.h"
 
 typedef struct datcache_data_t_ datcache_data_t;
 
@@ -58,6 +59,7 @@ struct datcache_t_ {
        W thread_len;
        UB *latestheader;
        W latestheader_len;
+       residhash_t residhash;
 };
 
 struct datcache_datareadcontext_t_ {
@@ -404,6 +406,21 @@ EXPORT W datcache_writefile(datcache_t *cache)
        return 0;
 }
 
+EXPORT W datcache_addresiddata(datcache_t *cache, TC *idstr, W idstr_len, UW attr, COLOR color)
+{
+       return residhash_adddata(&cache->residhash, idstr, idstr_len, attr, color);
+}
+
+EXPORT W datcache_searchresiddata(datcache_t *cache, TC *idstr, W idstr_len, UW *attr, COLOR *color)
+{
+       return residhash_searchdata(&cache->residhash, idstr, idstr_len, attr, color);
+}
+
+EXPORT VOID datcache_removeresiddata(datcache_t *cache, TC *idstr, W idstr_len)
+{
+       residhash_removedata(&cache->residhash, idstr, idstr_len);
+}
+
 LOCAL W datcache_getrec_fromfile(W fd, W rectype, W subtype, UB **data, W *size)
 {
        W err, size0;
@@ -523,6 +540,16 @@ EXPORT datcache_t* datcache_new(VID vid)
        cache->latestheader = header;
        cache->latestheader_len = header_len;
 
+       err = residhash_initialize(&cache->residhash);
+       if (err < 0) {
+               free(retrinfo);
+               free(rawdat);
+               del_sem(semid);
+               cls_fil(fd);
+               free(cache);
+               return NULL;
+       }
+
        return cache;
 }
 
@@ -531,6 +558,8 @@ EXPORT VOID datcache_delete(datcache_t *cache)
        datcache_data_t *cache_data;
        Bool ok;
 
+       residhash_finalize(&cache->residhash);
+
        if (cache->latestheader != NULL) {
                free(cache->latestheader);
        }
index 9a32f1b..f750479 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * cache.h
  *
- * Copyright (c) 2009 project bchan
+ * Copyright (c) 2009-2010 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -35,6 +35,9 @@
 #define DATCACHE_RECORDSUBTYPE_RETRIEVE 0x0001
 #define DATCACHE_RECORDSUBTYPE_HEADER 0x0002
 
+#define DATCACHE_RESIDDATA_FLAG_NG    0x00000001
+#define DATCACHE_RESIDDATA_FLAG_COLOR 0x00000002
+
 typedef struct datcache_t_ datcache_t;
 typedef struct datcache_datareadcontext_t_ datcache_datareadcontext_t;
 
@@ -49,6 +52,11 @@ IMPORT VOID datcache_getborad(datcache_t *cache, UB **borad, W *len);
 IMPORT VOID datcache_getthread(datcache_t *cache, UB **thread, W *len);
 IMPORT W datcache_datasize(datcache_t *cache);
 IMPORT W datcache_writefile(datcache_t *cache);
+IMPORT W datcache_addresiddata(datcache_t *cache, TC *idstr, W idstr_len, UW attr, COLOR color);
+#define DATCACHE_SEARCHRESIDDATA_NOTFOUND 0 /* RESIDHASH_SEARCHDATA_NOTFOUND */
+#define DATCACHE_SEARCHRESIDDATA_FOUND    1 /* RESIDHASH_SEARCHDATA_FOUND */
+IMPORT W datcache_searchresiddata(datcache_t *cache, TC *idstr, W idstr_len, UW *attr, COLOR *color);
+IMPORT VOID datcache_removeresiddata(datcache_t *cache, TC *idstr, W idstr_len);
 IMPORT datcache_datareadcontext_t* datcache_startdataread(datcache_t *cache, W start);
 IMPORT VOID datcache_enddataread(datcache_t *cache, datcache_datareadcontext_t *context);