]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_LPC1768_GCC_RedSuite/src/webserver/lc-switch.h
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / CORTEX_LPC1768_GCC_RedSuite / src / webserver / lc-switch.h
1 /*\r
2  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.\r
3  * All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that the following conditions\r
7  * are met:\r
8  * 1. Redistributions of source code must retain the above copyright\r
9  *    notice, this list of conditions and the following disclaimer.\r
10  * 2. Redistributions in binary form must reproduce the above copyright\r
11  *    notice, this list of conditions and the following disclaimer in the\r
12  *    documentation and/or other materials provided with the distribution.\r
13  * 3. Neither the name of the Institute nor the names of its contributors\r
14  *    may be used to endorse or promote products derived from this software\r
15  *    without specific prior written permission.\r
16  *\r
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
27  * SUCH DAMAGE.\r
28  *\r
29  * This file is part of the uIP TCP/IP stack\r
30  *\r
31  * Author: Adam Dunkels <adam@sics.se>\r
32  *\r
33  * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $\r
34  */\r
35 \r
36 /**\r
37  * \addtogroup lc\r
38  * @{\r
39  */\r
40 \r
41 /**\r
42  * \file\r
43  * Implementation of local continuations based on switch() statment\r
44  * \author Adam Dunkels <adam@sics.se>\r
45  *\r
46  * This implementation of local continuations uses the C switch()\r
47  * statement to resume execution of a function somewhere inside the\r
48  * function's body. The implementation is based on the fact that\r
49  * switch() statements are able to jump directly into the bodies of\r
50  * control structures such as if() or while() statmenets.\r
51  *\r
52  * This implementation borrows heavily from Simon Tatham's coroutines\r
53  * implementation in C:\r
54  * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html\r
55  */\r
56 \r
57 #ifndef __LC_SWITCH_H__\r
58 #define __LC_SWTICH_H__\r
59 \r
60 /* WARNING! lc implementation using switch() does not work if an\r
61    LC_SET() is done within another switch() statement! */\r
62 \r
63 /** \hideinitializer */\r
64 typedef unsigned short lc_t;\r
65 \r
66 #define LC_INIT(s) s = 0;\r
67 \r
68 #define LC_RESUME(s) switch(s) { case 0:\r
69 \r
70 #define LC_SET(s) s = __LINE__; case __LINE__:\r
71 \r
72 #define LC_END(s) }\r
73 \r
74 #endif /* __LC_SWITCH_H__ */\r
75 \r
76 /** @} */\r