-/* .----------------------------------------------------------------------.
+ /* .----------------------------------------------------------------------.
/ C<<1 header file - C language style sheet - GNU C/ANSI C99 compliant
/ Cumbersome Extraction and Report Language - http://cll1h.arachne.cz/
'---------------------------------------------------------------------- */
#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.
'----------------------------------------------------------------------- */
#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)
/* .----------------------------------------------------------------------.
/ 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__)
#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.