some updates
authorxchaos <xchaos@4bb87942-c103-4e5a-b51c-0ebff58f8515>
Fri, 1 Feb 2008 11:38:04 +0000 (11:38 +0000)
committerxchaos <xchaos@4bb87942-c103-4e5a-b51c-0ebff58f8515>
Fri, 1 Feb 2008 11:38:04 +0000 (11:38 +0000)
git-svn-id: https://dev.arachne.cz/repos/cll1h/trunk@51 4bb87942-c103-4e5a-b51c-0ebff58f8515

cll1.h

diff --git a/cll1.h b/cll1.h
index 1b1d36280756d371da3b9a6b326b422628be51ee..dbef96d5b6ab68d54a9323be988bc101cdc28833 100644 (file)
--- a/cll1.h
+++ b/cll1.h
 #define bool_str(VALUE) ((VALUE)?"TRUE":"FALSE")
 #define _CLL1_GLOBALS char *NIL="NULL", *EOL="\n", *OFS=" ", *IFS=" \t\n"; time_t RANDOM_SEED=0;
 /* .----------------------------------------------------------------------.
-  /  4. C<<1 data declaration and allocation, updated 2008-01-07 xCh.
+  /  4. C<<1 data declaration and allocation, updated 2008-01-31 xCh.
  '----------------------------------------------------------------------- */
 #define mem struct
-#define uses_mem(TYPE) struct *TYPE this
+#define this_is(TYPE) struct *TYPE this
 #define create_mem(ID,...) struct _ARG1(__VA_ARGS__,) *ID=get_mem(__VA_ARGS__)
 #define new_mem(ID,...) struct _ARG1(__VA_ARGS__,) *ID=init_mem(__VA_ARGS__)
 #define define_mem(ID,TYPE) struct TYPE *ID=NULL
 #define define_mems(ID1,ID2,TYPE) define_mem(ID1,TYPE); define_mem(ID2,TYPE)
 #define get_mem(...) (struct _ARG1(__VA_ARGS__,)*)_cll1_malloc(sizeof(struct _ARG1(__VA_ARGS__,)), _ARG2(__VA_ARGS__,,) - 0 )
 #define init_mem(...)  _mem_##TYPE##_( _ARG2(__VA_ARGS__,,) - 0 )
-#define construct_mem(TYPE) (struct TYPE *) _mem_##TYPE##_(void) {   }
+#define construct_mem(TYPE) (struct TYPE *)_mem_##TYPE##_(void) { create_mem(this,TYPE);/* <-' */ _init_mem_##TYPE##_(this); return this; } _init_mem_##TYPE##_(this_is(TYPE))
 #define create_list(ID1,I2,TYPE) create_mem(ID1,TYPE); struct TYPE *ID2=((ID1->__next=NULL),ID1)
 #define create_str(ID,INIT) char *ID=INIT
+#define new_str(ID,...) char *ID=_cll1_get_str(__VA_ARGS__,NIL)
 #define define_str(ID) char *ID=NULL
-#define get_str(...) (char *)_cll1_get_str(__VA_ARGS__,NIL)
+#define get_str(...) _cll1_get_str(__VA_ARGS__,NIL)
 #define create_context(ID) create_mem(ID,_CTXAtom)
 #define define_context(ID) define_mem(ID,_CTXAtom)
 #define list(TYPE) struct TYPE *__next
 #define tree(TYPE) struct TYPE *__next; struct TYPE *__seek
-#define dictionary(TYPE) tree(TYPE); char *__key
-#define array(TYPE) tree(TYPE); int __key
+#define dictionary(TYPE) struct TYPE *__next; struct TYPE *__seek; char *__key
+#define array(TYPE) struct TYPE *__next; struct TYPE *__seek; int __key
 #define interface(TYPE) struct TYPE *__interface
 /* .----------------------------------------------------------------------.
   /  5. C<<1 string manipulation, updated 2008-01-26 xCh.
 #define file_echo(...) _cll1_fecho(_F,__VA_ARGS__,NIL)
 #define suffix(A,B,C) (((A=strrchr(B,C))&&!(*(A++)=0))||(A=B))
 #define prefix(A,B,C) ((A=B),((B=strchr(B,C))&&!(*(B++)=0)||(B=A)))
-#define tr(STR,B,C) {char *_S=STR; /***/ while(S && *_S) {if(*_S==B)*_S=C; _S++;} }
+#define tr(STR,B,C) _NEW(S,STR) while(S && *_S) { if(*_S==B)*_S=C; /* <-' */ _S++; }
 /* .----------------------------------------------------------------------.
   /  6. C<<1 data container manipulation, updated 2008-01-26 xCh.
  '----------------------------------------------------------------------- */
 #define if_column_number(A,B,C,V) _FOR_COLUMNS(A,B,C) if(_I==V)
 #define if_valid_column_number(A,B,C,V) _FOR_VALID_COLUMNS(A,B,C) if(_I==V)
 /* .----------------------------------------------------------------------.
-  /  8. C<<1 object oriented infrastructure, updated 2008-01-26
+  /  8. C<<1 object oriented infrastructure, updated 2008-01-31
  '----------------------------------------------------------------------- */
-#define method_args void *_self, void  *_method
+#define my_self(TYPE) struct *TYPE self, void  *_method
+#define we_are(TYPE) struct *TYPE _self, void  *_method
+#define anonymous void *_self, void  *_method
 #define I_am(TYPE) struct TYPE *self=(struct TYPE *)_self
-#define define_metaobject(METATYPE,ITYPE) struct METATYPE { struct ITYPE *__interface; };
-#define define_interface(MTYPE,ITYPE) struct ITYPE *_interface_##MTYPE##ITYPE(void *dummy, ...) { define_mem(_FACE,IFACE); va_list(ap); _FACE=get_mem(IFACE) _bind_##MTYPE##ITYPE(_FACE); return _FACE; } void _bind_##MTYPE##ITYPE(struct IFACE *_FACE)
+#define define_polymorph(METATYPE,ITYPE) struct METATYPE { struct ITYPE *__interface; };
+#define construct_interface(MTYPE,ITYPE) struct ITYPE *_interface_##MTYPE##ITYPE(void *dummy, ...) { define_mem(_FACE,ITYPE); va_list(ap);  _bind_##MTYPE##ITYPE(_FACE); return _FACE; } void _bind_##MTYPE##ITYPE(struct IFACE *_FACE)
 #define bind_method(METHOD,FUNCTION) _FACE->METHOD=FUNCTION
-#define construct_interface(MTYPE,...) _interface_##MTYPE##_ARG1(__VA_ARGS__)((void *)__get_##MTYPE##__VA_ARGS__)
-#define init_object(TYPE,...) _object_##TYPE##_(__VA_ARGS__)
-#define construct_object(TYPE,...) (struct TYPE *)_object_##TYPE##_
-#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 new_interface(ID,MTYPE,...) struct _ARG1(__VA_ARGS__,) *ID=_interface_##MTYPE##_ARG1(__VA_ARGS__,) ((void *)__get_##TYPE##__VA_ARGS__,)
+#define init_interface(TYPE,...)
+#define construct_object(TYPE,...) (struct _ARG2(__VA_ARGS__,TYPE,) *)_object_##TYPE##_()
+#define init_object(TYPE,...) (struct TYPE *)_object_##TYPE##_(__VA_ARGS__)
+#define init_polymorph(TYPE,...) _object_##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 call(OBJTYPE,METHOD,...) { int _N=0; struct OBJTYPE *_OBJ; /* <-' */ while( (_OBJ=(struct 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.
 #define _ARG1(ARG1,...) ARG1
 #define _ARG2(ARG1,ARG2,...) ARG2
 #define _ANYSTACK(TYPE,NAME) struct _##NAME##Atom { TYPE NAME; int C; list(_##NAME##Atom); } *_##NAME##atom,*_##NAME##stack=NULL;
-//#define _ISTACK struct _IAtom { int i; int C; list(_IAtom); } *_Iatom,*_Istack=NULL;
-//#define _SSTACK struct _SAtom { char *s; int C; list(_SAtom); } *_Satom,*_Sstack=NULL;
-//#define _FSTACK struct _FAtom { FILE *F; int C; list(_FAtom); } *_Fatom,*_Fstack=NULL;
-//#define _MSTACK struct _MAtom { void *ptr; size_t size; int C; tree(_MAtom); } *_Matom,*_Mstack=NULL;
 #define _CLL1_STACKS _ANYSTACK(int,I) _ANYSTACK(char *,S) _ANYSTACK(FILE *,F) _ANYSTACK(void *,CTX)
-//#define _NEW_(ATOM,STACK,TYPE) (ATOM=get_mem(TYPE),ATOM->C=1,push(ATOM,STACK);ATOM->C||(pop(ATOM,STACK),0);ATOM->C--)
 #define _NEW(NAME,VALUE) for(_##NAME##atom=get_mem(_##NAME##Atom),_##NAME##atom->NAME=(VALUE),_##NAME##atom->C=1,push(_##NAME##atom,_##NAME##stack);_##NAME##atom->C||(pop(_##NAME##atom,_##NAME##stack),0);_##NAME##atom->C--)
-//#define _NEW_I for _NEW_(_Iatom,_Istack,_IAtom)
-//#define _NEW_S for _NEW_(_Satom,_Sstack,_SAtom)
-//#define _NEW_F for _NEW_(_Fatom,_Fstack,_FAtom)
 #define _I (_Iatom->I)
 #define _S (_Satom->S)
 #define _F (_Satom->F)
 #endif
 #ifdef USE_MODULE_CGI
 #define cgi(MIME) { char *PTR; /* <-' */ recycle_context(_CGI); _CGIdict=NULL; for_split_str(PTR,getenv("QUERY_STRING"),'&')   /* _init_cgi */ if(MIME) printf("Content-type: %s\r\n\r\n",MIME); }
-//todo #define _GETCGI char *getcgi(VAR) {     }
+#define _GETCGI char *getcgi(VAR) {     }
 #define _CGI_GLOBALS define_context(_CGI); struct _CGIVariable { char *V; dictionary(_CGIVariable); } *_CGIvariable,*_CGIdict;
 #else
+#define _GETCGI
 #define _CGI_GLOBALS
 #endif
 /* .----------------------------------------------------------------------.
This page took 0.183872 seconds and 4 git commands to generate.