1#!/usr/bin/python2
2
3def get(old,wc,rc,cc):
4    if ('xxx' in (rc, wc, cc)):
5        return "0",255
6
7    if ('add' in (rc, wc, cc)):
8        events = []
9        if rc == 'add' or (rc != 'del' and 'r' in old):
10            events.append("EPOLLIN")
11        if wc == 'add' or (wc != 'del' and 'w' in old):
12            events.append("EPOLLOUT")
13        if cc == 'add' or (cc != 'del' and 'c' in old):
14            events.append("EPOLLRDHUP")
15
16        if old == "0":
17            op = "EPOLL_CTL_ADD"
18        else:
19            op = "EPOLL_CTL_MOD"
20        return "|".join(events), op
21
22    if ('del' in (rc, wc, cc)):
23        delevents = []
24        modevents = []
25        op = "EPOLL_CTL_DEL"
26
27        if 'r' in old:
28            modevents.append("EPOLLIN")
29        if 'w' in old:
30            modevents.append("EPOLLOUT")
31        if 'c' in old:
32            modevents.append("EPOLLRDHUP")
33
34        for item, event in [(rc,"EPOLLIN"),
35                            (wc,"EPOLLOUT"),
36                            (cc,"EPOLLRDHUP")]:
37            if item == 'del':
38                delevents.append(event)
39                if event in modevents:
40                    modevents.remove(event)
41
42        if modevents:
43            return "|".join(modevents), "EPOLL_CTL_MOD"
44        else:
45            return "|".join(delevents), "EPOLL_CTL_DEL"
46
47    return 0, 0
48
49
50def fmt(op, ev, old, wc, rc, cc):
51    entry = "{ %s, %s },"%(op, ev)
52    print "\t/* old=%3s, write:%3s, read:%3s, close:%3s */\n\t%s" % (
53        old, wc, rc, cc, entry)
54    return len(entry)
55
56for old in ('0','r','w','rw','c','cr','cw','crw'):
57    for wc in ('0', 'add', 'del', 'xxx'):
58        for rc in ('0', 'add', 'del', 'xxx'):
59            for cc in ('0', 'add', 'del', 'xxx'):
60
61                op,ev = get(old,wc,rc,cc)
62
63                fmt(op, ev, old, wc, rc, cc)
64