WEIRDINT constant added -> for_ints() interator now accepts negative integers
authorxchaos <xchaos@4bb87942-c103-4e5a-b51c-0ebff58f8515>
Fri, 1 Feb 2008 22:57:18 +0000 (22:57 +0000)
committerxchaos <xchaos@4bb87942-c103-4e5a-b51c-0ebff58f8515>
Fri, 1 Feb 2008 22:57:18 +0000 (22:57 +0000)
git-svn-id: https://dev.arachne.cz/repos/cll1h/trunk@53 4bb87942-c103-4e5a-b51c-0ebff58f8515

cll1.h
demos/for_ints_strs.c

diff --git a/cll1.h b/cll1.h
index 08a9a8e37d2e4561b9cb2a83b7693fc0bf0e4f73..b3c65a41e204708ea4cb2a37554a66fb7d903bd1 100644 (file)
--- a/cll1.h
+++ b/cll1.h
@@ -76,6 +76,7 @@
 #define bool int
 #define TRUE 1
 #define FALSE 0
+#define WEIRDINT (1<<(sizeof(int)*8-1))
 #define btoa(EXPR) ((EXPR)?"TRUE":"FALSE")
 #define coalesce(VAR,EXPR) (VAR?VAR:(EXPR))
 #define _CLL1_GLOBALS char *NIL="NULL", *EOL="\n", *OFS=" ", *IFS=" \t\n"; unsigned RANDOM_SEED=0;
 #define for_search(NODE,HEAD,EXPR) for_each(NODE,HEAD) if(EXPR)
 #define for_file_lines(STR,FNAME) /* _NEW(CTX,get_context()) file_read(FNAME) for(use_context(_CTX),STR=file_line(_F);release_context(_M),(*S && !feof(_F));STR=file_line(_F),end_context()) _CATCH */
 #define for_input_lines(S,L) /* _NEW(CTX,get_context()) for(use_context(_CTX),STR=file_get_line(stdin);release_context(_M),(*S && !feof(stdin));STR=file_get_line(stdin)) _CATCH */
-#define for_ints(VAR,...) _NEW(I,0) while( (VAR=_cll1_for_ints(_I++,__VA_ARGS__,-1))>=0 )
+#define for_ints(VAR,...) _NEW(I,0) while( (VAR=_cll1_for_ints(_I++,__VA_ARGS__,WEIRDINT))!=WEIRDINT )
 #define for_strs(VAR,...) _NEW(I,0) while( (VAR=(char *)_cll1_for_ptrs(_I++,__VA_ARGS__,NIL))!=NIL )
 #define for_args _NEW(I,1) while(_I++<argc)
 #define this_arg argv[_I]
 #define _ECHO void _cll1_echo(char *s,...) _CLL1_FECHO(stdout)
 #define _FECHO void _cll1_fecho(FILE *f,char *s,...) _CLL1_FECHO(f)
 #define _CLL1_OUT _PRINT _FPRINT _ECHO _FECHO
-#define _FOR_INTS int _cll1_for_ints(int i, int n, ...) { int j=0;va_list ap; /* <-' */ va_start(ap,n); while(n>=0 && j++<i) n=va_arg(ap,int); return n; }
+#define _FOR_INTS int _cll1_for_ints(int i, int n, ...) { int j=0;va_list ap; /* <-' */ va_start(ap,n); while(n!=WEIRDINT && j++<i) n=va_arg(ap,int); return n; }
 #define _FOR_PTRS void *_cll1_for_ptrs(int i, void *v, ...) { int j=0;va_list ap; /* <-' */ va_start(ap,v); while(v!=(void *)NIL && j++<i) v=va_arg(ap,void *); return v; }
 #define _CLL1_ARGS _FOR_INTS _FOR_PTRS
 #define _STRCMP int _cll1_strcmp(char *a,char *b) { if(a && b) return strcmp(a,b); else return (int)(a-b); }
index a58e9701b46f1388b0f66f2a940767264202f104..e21987a4c70f5f0565bd6ee39cd37db6aba1c0ed 100644 (file)
@@ -5,11 +5,11 @@ program
  int i;
  char *s;
  
- echo("for_ints(i in(8,1,2,745,32,64,27,4) ): ");
- for_ints(i, 8,1,2,745,32,64,27,4 ) printf(" [%d]",i);
+ echo("for_ints(i,  8,1,-2,745,-32,-64,27,4) ): ");
+ for_ints(i,  8,1,-2,745,-32,-64,27,4 ) printf(" [%d]",i);
  print("");
 
- echo("for_strs(s in( \"aasd\",\"snres\",\"sdfrm\",\"ojffgt\",\"wweqwe\" )): ");
- for_strs(s, "aasd","snres","sdfrm","ojffgt","wweqwe" ) echo(" [",s,"]");
+ echo("for_strs(s \"aasd\",\"snres\",\"sdfrm\",\"ojffgt\",\"wweqwe\" )): ");
+ for_strs(s,  "aasd","snres","sdfrm","ojffgt","wweqwe" ) echo(" [",s,"]");
  print("");
 }
This page took 0.204721 seconds and 4 git commands to generate.