summaryrefslogtreecommitdiff
path: root/dict.h
diff options
context:
space:
mode:
Diffstat (limited to 'dict.h')
-rw-r--r--dict.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/dict.h b/dict.h
new file mode 100644
index 0000000..4e4aac5
--- /dev/null
+++ b/dict.h
@@ -0,0 +1,54 @@
+// Copyright © 2016 by Justin Bedő
+//
+// Permission to use, copy, modify, and/or distribute this software for
+// any purpose with or without fee is hereby granted, provided that the
+// above copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+// WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
+// BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+// OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+// WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+// ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+// SOFTWARE.
+
+#ifndef __dict_h
+#define __dict_h
+
+#define error(msg) \
+ do { perror(msg); exit(EXIT_FAILURE); } while (0)
+
+#define BLOOMDEG 23
+#define BLOOMSIZE (1 << BLOOMDEG)
+#define bit(bf, i) \
+ ((bf)[((i) >> 6) & (BLOOMSIZE - 1)] & (1UL << ((i) & 63)))
+#define set(bf, i) \
+ ((bf)[((i) >> 6) & (BLOOMSIZE - 1)] |= (1UL << ((i) & 63)))
+
+// Command line args
+char *argv0;
+#define SET(x) ((x) = 0)
+#define USED(x) ((void)(x))
+#define ARGBEGIN for((argv0?0:(argv0=*argv)),argv++,argc--;\
+ argv[0] && argv[0][0]=='-' && argv[0][1];\
+ argc--, argv++) {\
+ char *_args, *_argt;\
+ char _argc;\
+ _args = &argv[0][1];\
+ if(_args[0]=='-' && _args[1]==0){\
+ argc--; argv++; break;\
+ }\
+ _argc = 0;\
+ while(*_args && (_args += (_argc = *_args, 1)))\
+ switch(_argc)
+#define ARGEND SET(_argt);USED(_argt);USED(_argc);USED(_args);}USED(argv);USED(argc);
+#define ARGF() (_argt=_args, _args="",\
+ (*_argt? _argt: argv[1]? (argc--, *++argv): 0))
+#define EARGF(x) (_argt=_args, _args="",\
+ (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0)))
+
+#define ARGC() _argc
+
+
+#endif