simplification, object redefiniton
[svn/Cll1h/.git] / cll1.h
diff --git a/cll1.h b/cll1.h
index 711b951a3213b901ed44c0bb43f13cf950e4ab26..b8405b035f92a40664227b89636f770b61c0dfd5 100644 (file)
--- a/cll1.h
+++ b/cll1.h
@@ -1,4 +1,4 @@
-/* .----------------------------------------------------------------------.
+   /* .----------------------------------------------------------------------.
   /  C<<1 header file - C language style sheet - GNU C/ANSI C99 compliant 
  /  Cumbersome Extraction and Report Language - http://cll1h.arachne.cz/ 
 '---------------------------------------------------------------------- */
@@ -97,12 +97,13 @@ extern  unsigned RANDOM_SEED;
 #define init_mem(...)  _init_##_ARG1(__VA_ARGS__,)( _ARG2(__VA_ARGS__,,) - 0 )
 #define create_mem(ID,...) _ARG1(__VA_ARGS__,) ID=_GET_MEM(__VA_ARGS__,NULL)
 #define new_mem(ID,...) _ARG1(__VA_ARGS__,) ID=init_mem(__VA_ARGS__)
+#define mem_len(TYPE) sizeof(struct  _##TYPE##_t)
+//#define mem_copy 
 #define list(TYPE) TYPE __next
 #define tree(TYPE) TYPE __next; TYPE __seek
-#define dictionary(TYPE) TYPE __next; TYPE __seek; str __key
-#define array(TYPE) TYPE __next; TYPE __seek; int __key
+#define dict(TYPE) tree(TYPE); str __key
+#define array(TYPE) tree(TYPE); int __key
 #define interface(TYPE) TYPE __interface
-#define this_must_be(TYPE) TYPE this
 /* .----------------------------------------------------------------------.
   /  5. C<<1 string manipulation, updated 2008-01-26 xCh.
  '----------------------------------------------------------------------- */
@@ -162,7 +163,7 @@ extern  unsigned RANDOM_SEED;
 #define skip_next _I++
 #define if_exists(NODE,HEAD,EXPR) for_search(NODE,HEAD,EXPR) break; if(NODE)
 #define if_args if(argc>1)
-#define switch_for_args  for_args switch_str(this_arg)
+#define switch_for_args for_args switch_str(this_arg)
 #define switch_str(STR) _NEW(S,STR)
 #define if_case(VAL) if(eq(argv[_I],VAL))
 #define for_fields(FIELD,STR) for_valid_split(FIELD,STR,*OFS)
@@ -175,9 +176,9 @@ extern  unsigned RANDOM_SEED;
 /* .----------------------------------------------------------------------.
   /  8. C<<1 object oriented infrastructure, updated 2008-02-04
  '----------------------------------------------------------------------- */
-#define I_must_be(TYPE) TYPE self, void  *_method
-#define we_can_be(TYPE) TYPE _we, void  *_method
-#define we_can_be_whatever void *_we, void  *_method
+/* too non-C: #define I_must_be(TYPE) TYPE self, void  *_method * */
+#define member_of(TYPE) TYPE _we
+#define anonymous void *_we
 #define I_am(TYPE) TYPE self=(TYPE)_we
 #define def_community(METATYPE,ITYPE) def_mem(METATYPE) { ITYPE __interface; };
 #define def_method(RET,NAME,...) RET (*NAME)(__VA_ARGS__)
@@ -188,8 +189,8 @@ extern  unsigned RANDOM_SEED;
 #define construct_object(MTYPE,...) (void *)_init_##TYPE##_()
 #define init_object(TYPE,...) (TYPE)_init_##TYPE##_(__VA_ARGS__)
 #define init_polymorph(TYPE,COMMUNITY,...) (COMMUNITY)_init_##TYPE##_(__VA_ARGS__)
-#define _(OBJECT,...) ( _ASSERT(OBJECT), (*( OBJECT->interface->_ARG1(__VA_ARGS__,) )) ( OBJECT,OBJECT->interface->__VA_ARGS__ ) )
-#define __(OBJECT,...) ( _ASSERT(OBJECT), (*( __cll1_seekmethod(OBJECT->interface,_ARG1(__VA_ARGS__,)) )) ( OBJECT,OBJECT->interface->__VA_ARGS__ ) )
+#define _(METHOD,...) ( _ASSERT(ARG1(__VA_ARGS__,)), (*( ARG1(__VA_ARGS__,)->__interface->METHOD )) ( __VA_ARGS__ ) )
+#define __(METHOD,...) ( _ASSERT(ARG1(__VA_ARGS__,)), (*( __cll1_seekmethod(ARG1(__VA_ARGS__,)->__interface,METHOD) )) ( __VA_ARGS__ ) )
 #define call(OBJTYPE,METHOD,...) { int _N=0; OBJTYPE _OBJ; /* <-' */ while( (_OBJ=(OBJTYPE)_cll1_for_ptrs(_N++,__VA_ARGS__,NIL))!=(struct OBJTYPE *)NIL ) _(_OBJ,METHOD); }
 /* .----------------------------------------------------------------------.
   /  9. implementation of C<<1 library functions, updated 2008-01-26 xCh.
This page took 0.128362 seconds and 4 git commands to generate.