(struct CONCORD_Object_Header): New structure.
authorMORIOKA Tomohiko <tomo.git@chise.org>
Fri, 10 Aug 2012 10:32:08 +0000 (19:32 +0900)
committerMORIOKA Tomohiko <tomo.git@chise.org>
Fri, 10 Aug 2012 10:32:08 +0000 (19:32 +0900)
(CONCORD_OBJECT_TYPE_NULL): New macro.
(CONCORD_OBJECT_TYPE_C_STRING): New macro.
(CONCORD_OBJECT_TYPE_INT): New macro.
(CONCORD_OBJECT_TYPE_DS): New macro.
(CONCORD_OBJECT_TYPE_GENRE): New macro.
(CONCORD_OBJECT_TYPE_FEATURE): New macro.
(CONCORD_OBJECT_TYPE_INDEX): New macro.
(CONCORD_OBJECT_TYPE_OBJECT): New macro.
(struct CONCORD_DS_Table): Add new member `header'.
(concord_open_ds): Setup ds->header.
(struct CONCORD_Genre_Table): Add new member `header'.
(concord_ds_open_genre): Setup ds->header.
(struct CONCORD_Feature_Table): Add new member `header'.
(concord_genre_open_feature): Setup ds->header.
(struct CONCORD_INDEX_Table): Add new member `header'.
(concord_genre_open_index): Setup ds->header.

concord.c

index f115960..2bac1df 100644 (file)
--- a/concord.c
+++ b/concord.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003,2004,2005,2006 MORIOKA Tomohiko
+/* Copyright (C) 2003,2004,2005,2006,2011 MORIOKA Tomohiko
    This file is part of the CONCORD Library.
 
    The CONCORD Library is free software; you can redistribute it and/or
@@ -66,8 +66,25 @@ CONCORD_Object
 concord_default_read_object (const unsigned char* string, size_t length);
 
 
+typedef struct CONCORD_Object_Header
+{
+  unsigned char prefix;
+  unsigned char type;
+} CONCORD_Object_Header;
+
+#define CONCORD_OBJECT_TYPE_NULL         0
+#define CONCORD_OBJECT_TYPE_C_STRING     1
+#define CONCORD_OBJECT_TYPE_INT                  2
+#define CONCORD_OBJECT_TYPE_DS          16
+#define CONCORD_OBJECT_TYPE_GENRE       17
+#define CONCORD_OBJECT_TYPE_FEATURE     18
+#define CONCORD_OBJECT_TYPE_INDEX       19
+#define CONCORD_OBJECT_TYPE_OBJECT     128
+
+
 struct CONCORD_DS_Table
 {
+  CONCORD_Object_Header header;
   CONCORD_Backend_Type type;
   char *location;
   CONCORD_NAME_TABLE* genre_names;
@@ -100,6 +117,8 @@ concord_open_ds (CONCORD_Backend_Type type, const char* location,
   if (ds == NULL)
     return NULL;
 
+  ds->header.prefix = 0xff;
+  ds->header.type = CONCORD_OBJECT_TYPE_DS;
   ds->type = type;
   ds->subtype = ( (subtype != 0) ? subtype : DB_HASH );
   ds->modemask = modemask;
@@ -271,6 +290,7 @@ concord_ds_foreach_genre_name (CONCORD_DS ds,
 
 struct CONCORD_Genre_Table
 {
+  CONCORD_Object_Header header;
   CONCORD_DS ds;
   char *name;
   CONCORD_NAME_TABLE* feature_names;
@@ -290,6 +310,8 @@ concord_ds_open_genre (CONCORD_DS ds, const char* name)
   if (genre == NULL)
     return NULL;
 
+  genre->header.prefix = 0xff;
+  genre->header.type = CONCORD_OBJECT_TYPE_GENRE;
   genre->ds = ds;
   genre->name = (char*)malloc (len + 1);
   if (genre->name == NULL)
@@ -529,6 +551,7 @@ concord_genre_get_index (CONCORD_Genre genre, const char* name)
 
 struct CONCORD_Feature_Table
 {
+  CONCORD_Object_Header header;
   CONCORD_Genre genre;
   char* name;
   DB* db;
@@ -548,6 +571,8 @@ concord_genre_open_feature (CONCORD_Genre genre, const char* feature)
   if (table == NULL)
     return NULL;
 
+  table->header.prefix = 0xff;
+  table->header.type = CONCORD_OBJECT_TYPE_FEATURE;
   table->genre = genre;
   table->db = NULL;
   table->access = 0;
@@ -743,6 +768,7 @@ concord_feature_foreach_obj_string (CONCORD_Feature feature,
 
 struct CONCORD_INDEX_Table
 {
+  CONCORD_Object_Header header;
   CONCORD_Genre genre;
   char *name;
   DB* db;
@@ -762,6 +788,8 @@ concord_genre_open_index (CONCORD_Genre genre, const char* index)
   if (table == NULL)
     return NULL;
 
+  table->header.prefix = 0xff;
+  table->header.type = CONCORD_OBJECT_TYPE_INDEX;
   table->genre = genre;
   table->db = NULL;
   table->access = 0;