]> git.llucax.com Git - personal/website.git/blob - source/proj/ev.d/index.rst
Add a bunch of new blog posts
[personal/website.git] / source / proj / ev.d / index.rst
1
2 .. raw:: html
3
4    <div style="width: 220px; height: 270px; float: right; margin-left: 1em; margin-top: 1em">
5    <iframe width="220" height="270" style="border: none; outline: none" src="http://tools.flattr.net/widgets/thing.html?thing=1141695"></iframe>
6    </div>
7
8
9 ====
10 ev.d
11 ====
12
13 .. highlight:: d
14
15
16 Introduction
17 ============
18
19
20 **ev.d** is both a low and high level libev_  bindings for the `D Programming
21 Language`_ .
22
23 All modules are placed in the ``ev`` package.
24
25 .. note::
26
27    libev_ should be compiled with ``EV_MULTIPLICITY=1`` to work with **ev.d**.
28
29
30
31 Low level API (``ev.c``)
32 ========================
33
34 The low level bindings directly expose the C API, without any specific D magic.
35 You can almost port a simple C libev example changing a few lines of code, for
36 example::
37
38    import ev.c;
39    // ....
40    void main()
41    {
42            ev_io stdin_watcher;
43            auto loop = ev_default_loop();
44            /* initialise an io watcher, then start it */
45            ev_io_init(&stdin_watcher, &stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
46            ev_io_start(loop, &stdin_watcher);
47            /* loop till timeout or data ready */
48            ev_loop(loop, 0);
49    }
50
51 For a complete example see `ctest.d`__.
52
53 __ http://git.llucax.com.ar/w/software/ev.d.git/blob/HEAD:/ctest.d
54
55
56
57 High level API (``ev.d``)
58 =========================
59
60 The high level API adds some D sugar on top of the low level API, providing
61 a more D-ish experience.
62
63 You can use delegates to handle events and is a little more object oriented.
64
65 Here is a very simple example::
66
67    import std.stdio;
68    import ev.d;
69
70    void main()
71    {
72            (new Timer(5.5,
73                    (Timer w, int revents)
74                    {
75                            writefln("timeout, revents = ", revents);
76                            w.loop.unloop(Unloop.ONE); // example syntax
77                    }
78            )).start;
79            loop.loop;
80    }
81
82 For a complete example see `dtest.d`__.
83
84 __ http://git.llucax.com.ar/w/software/ev.d.git/blob/HEAD:/dtest.d
85
86
87
88 Compile-time options
89 ====================
90
91 You can disable specific watchers types at compile-time (this should be in
92 sync with libev watchers support).
93
94 To do that, use version ``EV_ENABLE_SELECT`` and then select the specific
95 watchers you want to enable.
96
97 For example: ``gdc -fversion=EV_ENABLE_SELECT -fversion=EV_STAT_ENABLE`` to
98 enable only the ``ev_stat`` extra watcher.
99
100
101
102 Download
103 ========
104
105 There are no proper releases yet, but mainly because the code is so simple,
106 not because the code is not working or stable enough. You can get the code
107 from the Git_ repository__ (you can get a tarball there too, if you don't have
108 Git_ installed).
109
110 __ http://git.llucax.com.ar/w/software/ev.d.git
111
112
113
114 Support
115 =======
116
117 If you have any problems/comments/suggestions, you can contact me directly at
118 luca@llucax.com.ar.  If at any time there is enough people interested in
119 **ev.d** I might open a mailing list for it, but for now it seems overkill to
120 do so =).
121
122
123
124 Author
125 ======
126
127 **ev.d** was written by Leandro Lucarella.
128
129
130
131 License
132 =======
133
134 **ev.d** is placed under the BOLA_ License which is basically Public Domain.
135
136
137 .. _libev: http://software.schmorp.de/pkg/libev.html
138 .. _`D Programming Language`: http://www.digitalmars.com/d/
139 .. _BOLA: http://auriga.wearlab.de/~alb/bola/
140 .. _Git: http://git.or.cz/
141
142 .. vim: set et sw=3 sts=3 tw=78 :