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.h,v 1.2 2006/06/12 08:00:30 adam Exp $ 00035 */ 00036 00037 /** 00038 * \addtogroup pt 00039 * @{ 00040 */ 00041 00042 /** 00043 * \defgroup lc Локальные продолжения (Local continuations, далее LC) 00044 * @{ 00045 * 00046 * LC являются базой для реализации протопотоков. LC может быть <i>set</i> 00047 * (установлено) в отдельной функции в захват состояния функции. После того, 00048 * как LC было установлено, оно может быть <i>resumed</i> (возобновлено) 00049 * для восстановления состояния функции в точке, где было установлено LC. 00050 * 00051 * 00052 */ 00053 00054 /** 00055 * \file lc.h 00056 * Local continuations (локальные продолжения, LC) 00057 * \author 00058 * Adam Dunkels <adam@sics.se> 00059 * 00060 */ 00061 00062 #ifdef DOXYGEN 00063 /** 00064 * Инициализирует LC. 00065 * 00066 * Эта операция инициализирует LC, так что сбрасывается любое ранее 00067 * установленное состояние LC. 00068 * 00069 * \hideinitializer 00070 */ 00071 #define LC_INIT(lc) 00072 00073 /** 00074 * Установка LC. 00075 * 00076 * Операция set (установка) сохраняет состояние функции в точке, где 00077 * операция установки была выполнена. Операция set сохраняет состояние 00078 * функции не очень глубоко, так что это сохранение <b>не</b> включает 00079 * переменные, передаваемые через стек (call-stack) или локальные 00080 * (автоматические) переменные. Сохраняется только программный счетчик 00081 * и регистры CPU, которые должны быть сохранены. 00082 * 00083 * \hideinitializer 00084 */ 00085 #define LC_SET(lc) 00086 00087 /** 00088 * Возобновление LC. 00089 * 00090 * Операция resume (возобновление) восстанавливает выполнение ранее 00091 * установленного LC, так что выполнение функции продолжается с места, 00092 * где LC было установлено. Если LC не было ранее установлено, то 00093 * resume ничего не делает. 00094 * 00095 * \hideinitializer 00096 */ 00097 #define LC_RESUME(lc) 00098 00099 /** 00100 * Пометка места окончания использования LC. 00101 * 00102 * Операция end (завершение) обозначает, что LC не должны больше нигде 00103 * далее использоваться в функции. Эта операция не нужна для большинства 00104 * реализаций LC, но в некоторых случаях она нужна. 00105 * 00106 * \hideinitializer 00107 */ 00108 #define LC_END(lc) 00109 00110 /** 00111 * \var typedef lc_t; 00112 * 00113 * Тип для LC. 00114 * 00115 * \hideinitializer 00116 */ 00117 #endif /* DOXYGEN */ 00118 00119 #ifndef __LC_H__ 00120 #define __LC_H__ 00121 00122 #ifdef LC_CONF_INCLUDE 00123 #include LC_CONF_INCLUDE 00124 #else 00125 #include "lc-switch.h" 00126 #endif /* LC_CONF_INCLUDE */ 00127 00128 #endif /* __LC_H__ */ 00129 00130 /** @} */ 00131 /** @} */