From 13c52f52d36767af5c9af99153b404a3a4a8b31b Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Thu, 15 Feb 2007 20:07:28 +0100 Subject: [PATCH] add acogc types --- engine/engine.c | 24 ++++++++++++------------ engine/mala_globals.c | 15 +++++++++++++-- engine/strings.h | 14 ++++++++++++++ tests/bench-stringbucket.c | 9 ++++++--- tests/test-mala_strings.c | 9 ++++++--- 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/engine/engine.c b/engine/engine.c index 46fa069..4b3264d 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -104,8 +104,8 @@ mala_engine_init (MalaEngine self) mala_global_bucketfactory_high, mala_stringbucket_acogc_mark, mala_stringbucket_acogc_initize, - NULL); - self->gcfactory_buckets.factory_name="bucket"; + NULL, + mala_global_type_stringbucket); acogc_factory_init (&self->gcfactory_strings, @@ -115,8 +115,8 @@ mala_engine_init (MalaEngine self) mala_global_stringsfactory_high, mala_string_acogc_mark, mala_string_acogc_initize, - mala_string_acogc_finalize); - self->gcfactory_strings.factory_name="string"; + mala_string_acogc_finalize, + mala_global_type_string); acogc_factory_init (&self->gcfactory_stringbucketnodes, &self->gcroot, @@ -125,8 +125,8 @@ mala_engine_init (MalaEngine self) mala_global_splayfactory_high, mala_stringbucketnode_acogc_mark, mala_stringbucketnode_acogc_initize, - mala_stringbucketnode_acogc_finalize); - self->gcfactory_stringbucketnodes.factory_name="stringbucketnode"; + mala_stringbucketnode_acogc_finalize, + mala_global_type_stringbucketnode); acogc_factory_init (&self->gcfactory_stringlists, &self->gcroot, @@ -135,8 +135,8 @@ mala_engine_init (MalaEngine self) mala_global_stringlistfactory_high, mala_stringlist_acogc_mark, mala_stringlist_acogc_initize, - mala_stringlist_acogc_finalize); - self->gcfactory_stringlists.factory_name="stringlist"; + mala_stringlist_acogc_finalize, + mala_global_type_stringlist); acogc_factory_init (&self->gcfactory_actions, &self->gcroot, @@ -145,8 +145,8 @@ mala_engine_init (MalaEngine self) mala_global_actionfactory_high, mala_action_acogc_mark, mala_action_acogc_initize, - mala_action_acogc_finalize); - self->gcfactory_actions.factory_name="action"; + mala_action_acogc_finalize, + mala_global_type_action); acogc_factory_init (&self->gcfactory_programs, &self->gcroot, @@ -155,8 +155,8 @@ mala_engine_init (MalaEngine self) mala_global_programfactory_high, mala_program_acogc_mark, mala_program_acogc_initize, - NULL); - self->gcfactory_programs.factory_name="program"; + NULL, + mala_global_type_program); self->words = mala_stringbucket_new (MALA_STRING_FWD, &self->gcfactory_buckets, diff --git a/engine/mala_globals.c b/engine/mala_globals.c index 2b3f572..3a70946 100644 --- a/engine/mala_globals.c +++ b/engine/mala_globals.c @@ -26,10 +26,10 @@ #ifdef MALA_TYPES_H #define MALA_GLOBAL(type, name, value) extern type mala_global_##name -#define MALA_GLOBAL_CONST(type, name, value) static const type mala_global_##name +#define MALA_GLOBAL_CONST(type, name, value) extern const type mala_global_##name #else #define MALA_GLOBAL(type, name, value) type mala_global_##name = value -#define MALA_GLOBAL_CONST(type, name, value) +#define MALA_GLOBAL_CONST(type, name, value) const type mala_global_##name = value #endif /* @@ -70,6 +70,17 @@ MALA_GLOBAL_CONST (unsigned, stringbucket_splay_zigzag, 0); MALA_GLOBAL_CONST (unsigned, stringbucket_splay_zig, 6); /* + * type identifiers for the acogc typesystem + */ +MALA_GLOBAL_CONST (char*, type_stringbucket, "mala_stringbucket"); +MALA_GLOBAL_CONST (char*, type_string, "mala_string"); +MALA_GLOBAL_CONST (char*, type_stringbucketnode, "mala_stringbucketnode"); +MALA_GLOBAL_CONST (char*, type_stringlist, "mala_stringlist"); +MALA_GLOBAL_CONST (char*, type_action, "mala_action"); +MALA_GLOBAL_CONST (char*, type_program, "mala_program"); + + +/* // Local Variables: // mode: C // c-file-style: "gnu" diff --git a/engine/strings.h b/engine/strings.h index 69bf088..23c5f2b 100644 --- a/engine/strings.h +++ b/engine/strings.h @@ -25,6 +25,7 @@ #include #include "mala_types.h" #include "acogc.h" +#include "action.h" #include "stringbucket.h" #include "llist.h" @@ -40,6 +41,7 @@ struct mala_string_struct int integer; MalaString string; }; + // TODO acogc_alloc_type short str_alloc_type:4; short user_alloc_type:4; }; @@ -104,6 +106,18 @@ mala_string_action (const_MalaString self) static inline const char* +mala_string_action_cstr (const_MalaString self) +{ + REQUIRE (self); + + if (self->action && acogc_object_typecheck (self->action, mala_global_type_string)) + return self->action->string->str; + else + return NULL; +} + + +static inline const char* mala_string_cstr (const_MalaString s) { return s ? s->str : NULL; diff --git a/tests/bench-stringbucket.c b/tests/bench-stringbucket.c index 7256bf5..d9ff90d 100644 --- a/tests/bench-stringbucket.c +++ b/tests/bench-stringbucket.c @@ -151,7 +151,8 @@ int main(int argc, char* argv[]) 20, mala_stringbucket_acogc_mark, mala_stringbucket_acogc_initize, - NULL); + NULL, + mala_global_type_stringbucket); acogc_factory_init (&gcfactory_strings, &gcroot, @@ -160,7 +161,8 @@ int main(int argc, char* argv[]) mala_global_stringsfactory_high, mala_string_acogc_mark, mala_string_acogc_initize, - mala_string_acogc_finalize); + mala_string_acogc_finalize, + mala_global_type_string); acogc_factory_init (&gcfactory_splaynodes, &gcroot, @@ -169,7 +171,8 @@ int main(int argc, char* argv[]) mala_global_splayfactory_high, mala_stringbucketnode_acogc_mark, mala_stringbucketnode_acogc_initize, - mala_stringbucketnode_acogc_finalize); + mala_stringbucketnode_acogc_finalize, + mala_global_type_stringbucketnode); for (int i = 0; i<65536; ++i) asprintf(&strtable[i], "--%X", bench_fast_prng ()); diff --git a/tests/test-mala_strings.c b/tests/test-mala_strings.c index e61d4aa..4905ac7 100644 --- a/tests/test-mala_strings.c +++ b/tests/test-mala_strings.c @@ -124,7 +124,8 @@ int main() 20, mala_stringbucket_acogc_mark, mala_stringbucket_acogc_initize, - NULL); + NULL, + mala_global_type_stringbucket); acogc_factory_init (&gcfactory_strings, &gcroot, @@ -133,7 +134,8 @@ int main() mala_global_stringsfactory_high, mala_string_acogc_mark, mala_string_acogc_initize, - mala_string_acogc_finalize); + mala_string_acogc_finalize, + mala_global_type_string); acogc_factory_init (&gcfactory_splaynodes, &gcroot, @@ -142,7 +144,8 @@ int main() mala_global_splayfactory_high, mala_stringbucketnode_acogc_mark, mala_stringbucketnode_acogc_initize, - mala_stringbucketnode_acogc_finalize); + mala_stringbucketnode_acogc_finalize, + mala_global_type_stringbucketnode); MalaStringBucket testbucket = mala_stringbucket_new (MALA_STRING_FWD, &bucketfactory, &gcfactory_strings, &gcfactory_splaynodes); -- 2.11.4.GIT