X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=cos-i.h;h=4ed55405573da318dd5b6e4d5d184ff5101d7261;hb=c4cc23a6e3b2a8c5a398422464d1ca8ed6a78594;hp=1468fd8340e4273ab9456d1968fdc9ca4802fc40;hpb=3568b4b3840dc6e7968c0949b16507b250a0365f;p=chise%2Fconcord.git diff --git a/cos-i.h b/cos-i.h index 1468fd8..4ed5540 100644 --- 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