uIP 1.0
|
00001 /* 00002 * Copyright (c) 2004-2005, Swedish Institute of Computer Science. 00003 * Все права зарезервированы. * 00004 * Повторное распространение, использование в исходном и двоичном виде, 00005 * с модификацией или без - разрешается, если выполняются следующие 00006 * условия: 00007 * 1. Распространение исходного кода должно сохранить вышеуказанную пометку 00008 * копирайта, этот список условий и следующую правовую оговорку. 00009 * 2. Распространение исходного кода должно сохранить вышеуказанную пометку 00010 * копирайта, этот список условий и следующую правовую оговорку в 00011 * документации и/или других материалах, которые будут предоставлены 00012 * вместе с распространяемыми материалами. 00013 * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть 00014 * продукты, написанные с использованием этого программного обеспечения 00015 * без специального на то разрешения. 00016 * 00017 * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ 00018 * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ, 00019 * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ 00020 * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН 00021 * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ 00022 * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ 00023 * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ; 00024 * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, 00025 * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ 00026 * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ 00027 * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ 00028 * ТАКОГО ПОВРЕЖДЕНИЯ. 00029 * 00030 * Этот файл является частью стека uIP TCP/IP. 00031 * 00032 * Author: Adam Dunkels <adam@sics.se> 00033 * 00034 * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $ 00035 */ 00036 00037 /** 00038 * \addtogroup lc 00039 * @{ 00040 */ 00041 00042 /** 00043 * \file 00044 * Реализация локальных продолжителей (local continuations, LC) на основе 00045 * оператора switch() 00046 * \author Adam Dunkels <adam@sics.se> 00047 * 00048 * Эта реализация LC использует оператор switch() языка C для возобновления 00049 * выполнения функции в некоторой точке её тела. Реализация основана на 00050 * том факте, что опеатор switch() способен сделать переход напрямую 00051 * в тело структуры управления, такой как операторы if() или while(). 00052 * 00053 * Эта реализация использоваала в основном сопрограммы от Simon Tatham, 00054 * реализованные на C: 00055 * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html 00056 */ 00057 00058 #ifndef __LC_SWITCH_H__ 00059 #define __LC_SWTICH_H__ 00060 00061 /* ВНИМАНИЕ! Реализация LC с использование switch() не будет работать, если 00062 LC_SET() будет выполнен в другом операторе switch()! */ 00063 00064 /** \hideinitializer */ 00065 typedef unsigned short lc_t; 00066 00067 #define LC_INIT(s) s = 0; 00068 00069 #define LC_RESUME(s) switch(s) { case 0: 00070 00071 #define LC_SET(s) s = __LINE__; case __LINE__: 00072 00073 #define LC_END(s) } 00074 00075 #endif /* __LC_SWITCH_H__ */ 00076 00077 /** @} */