#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
/* .----------------------------------------------------------------------.
#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)