update.
[chise/concord.git] / cos-i.h
diff --git a/cos-i.h b/cos-i.h
index 1468fd8..4ed5540 100644 (file)
--- a/cos-i.h
+++ b/cos-i.h
@@ -101,6 +101,7 @@ enum COS_Object_Type {
   COS_Object_Type_char,
   COS_Object_Type_String,
   COS_Object_Type_Symbol,
+  COS_Object_Type_Cons,
   COS_Object_Type_Container,
   COS_Object_Type_Sexp,
   COS_Object_Type_Binary,
@@ -114,6 +115,7 @@ enum COS_Object_Type {
 #define COS_FAT_OBJECT_TYPE_MIN COS_Object_Type_String
 #define COS_OBJECT_TYPE_MAX COS_Object_Type_DB_Object
 
+extern int (*COS_Object_retain_function_table[]) (COS_Object);
 extern int (*COS_Object_release_function_table[]) (COS_Object);
 
 struct COS_Object_ent
@@ -154,6 +156,9 @@ COS_Object cos_allocate_object_0 (enum COS_Object_Type type,
 #define COS_OBJECT_SYMBOL_P(obj) \
   COS_OBJECT_TYPE_P (obj, Symbol)
 
+#define COS_OBJECT_CONS_P(obj) \
+  COS_OBJECT_TYPE_P (obj, Cons)
+
 #define COS_OBJECT_DS_P(obj) \
   COS_OBJECT_TYPE_P (obj, DS)
 
@@ -175,6 +180,7 @@ struct COS_String_ent
   unsigned char* data;
 };
 
+int cos_retain_string (COS_Object obj);
 int cos_release_string (COS_Object obj);
 
 
@@ -188,6 +194,7 @@ struct COS_Symbol_ent
 
 COS_Symbol cos_make_symbol (COS_String string);
 
+int cos_retain_symbol (COS_Object obj);
 int cos_release_symbol (COS_Object obj);
 
 
@@ -212,6 +219,23 @@ COS_Symbol
 cos_symbol_table_intern (COS_Symbol_Table table, COS_object name);
 
 
+struct COS_Cons_ent
+{
+  COS_Object_Header header;
+
+  COS_object car;
+  COS_object cdr;
+};
+
+#define COS_CAR(obj) \
+  (((COS_Cons)(obj))->car)
+#define COS_CDR(obj) \
+  (((COS_Cons)(obj))->cdr)
+
+int cos_retain_cons (COS_Object obj);
+int cos_release_cons (COS_Object obj);
+
+
 struct COS_Container_ent
 {
   COS_Object_Header header;
@@ -223,6 +247,7 @@ struct COS_Container_ent
   COS_Object* data;
 };
 
+int cos_retain_container (COS_Object obj);
 int cos_release_container (COS_Object obj);
 
 
@@ -234,6 +259,7 @@ struct COS_Sexp_ent
   char* data;
 };
 
+int cos_retain_sexp (COS_Object obj);
 int cos_release_sexp (COS_Object obj);
 
 
@@ -245,22 +271,27 @@ struct COS_Binary_ent
   unsigned char* data;
 };
 
+int cos_retain_binary (COS_Object obj);
 int cos_release_binary (COS_Object obj);
 
 
+int cos_retain_ds (COS_Object obj);
 int cos_release_ds (COS_Object obj);
 
 
+int cos_retain_genre (COS_Object obj);
 int cos_release_genre (COS_Object obj);
 
 int concord_close_genre (COS_Genre genre);
 
 
+int cos_retain_feature (COS_Object obj);
 int cos_release_feature (COS_Object obj);
 
 int concord_close_feature (COS_Feature feature);
 
 
+int cos_retain_index (COS_Object obj);
 int cos_release_index (COS_Object obj);
 
 int concord_close_index (COS_Feature_INDEX table);
@@ -274,6 +305,7 @@ struct COS_DB_Object_ent
   COS_Object id;
 };
 
+int cos_retain_db_object (COS_Object obj);
 int cos_release_db_object (COS_Object obj);
 
 #if 0