preliminary work on object oriented tools (no useful macros yet)
[svn/Cll1h/.git] / cll1.h
diff --git a/cll1.h b/cll1.h
index 597a76adcbb260f32fbe04ddf127ae84fb3904f4..0ce6ba004e66dee573491aa365a5de613a6052cf 100644 (file)
--- a/cll1.h
+++ b/cll1.h
 #define push(A,B) ((A && A!=B)?A->_next=B:0,B=A)
 #define pop(A,B) (B?((A?free(A):0),A=B=B->_next):(A=NULL))
 #define append(A,B) if(B) { void *N=A; A->_next=NULL; for_search(A,B,!A->_next) {A->_next=N; break;}} else push(A,B);
-#define remove(A,B,C) { void **_D=NULL; for_search(A,B,C) { if(_D)*_D=A->_next; else B=A->_next; free(A); A=NULL;} else _D=(void *)&(A->_next); }
+#define remove(A,B,C) { void **_D=NULL; for_search(A,B,C) { if(_D)*_D=A->_next; else B=A->_next; free(A); } else _D=(void *)&(A->_next); }
 #define drop(A,B) for( A=B; A || (B=NULL); B=A, A=A->_next, free(B) )
 /* ------------------------------------------------------------------- */
 /* 3. C<<1 iterators - updated 2008-01-07 by xCh.                      */
 /* ------------------------------------------------------------------- */
 #define loop while(TRUE)
-#define repeat(N) _NEW_I for_range(_I,1,N)
-#define for_range(VAR,FROM,TO) for(VAR=FROM; FROM<=TO?VAR<=TO:VAR>=TO; FROM<=TO?VAR++:VAR--)
+#define repeat(N) if(N>0) _NEW_I for_range(_I,1,N)
+#define for_range(VAR,FROM,TO) for( VAR=FROM ; FROM<=TO?VAR<=TO:VAR>=TO ; FROM<=TO?VAR++:VAR--)
 #define for_each(A,B) for(A=B; A; A=A->_next)
 #define for_search(A,B,C) for_each(A,B) if(C)
 /*to do: #define for_file_lines(STR,F) _NEW_F for() */
This page took 0.123327 seconds and 4 git commands to generate.