summaryrefslogtreecommitdiff
path: root/dict.h
blob: 4e4aac59c7182348cc8b00fe315d874b81ebcdff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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