From 547332b7650fec6dbcaf2053369fd9dc8c6af091 Mon Sep 17 00:00:00 2001 From: xchaos Date: Fri, 1 Feb 2008 11:38:04 +0000 Subject: [PATCH] some updates git-svn-id: https://dev.arachne.cz/repos/cll1h/trunk@51 4bb87942-c103-4e5a-b51c-0ebff58f8515 --- cll1.h | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/cll1.h b/cll1.h index 1b1d362..dbef96d 100644 --- a/cll1.h +++ b/cll1.h @@ -74,27 +74,28 @@ #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. @@ -109,7 +110,7 @@ #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. '----------------------------------------------------------------------- */ @@ -157,18 +158,22 @@ #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. @@ -188,16 +193,8 @@ #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) @@ -213,9 +210,10 @@ #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 /* .----------------------------------------------------------------------. -- 2.30.2