This package includes the SharkSSL lite library and header files.

Dependents:   WebSocket-Client-Example SharkMQ-LED-Demo

SharkSSL-Lite

Description: SharkSSL is an SSL v3.0 TLS v1.0/1.1/1.2 implementation of the TLS and SSL protocol standard. With its array of compile-time options and Raycrypto proprietary cryptographic algorithms, SharkSSL can be fine-tuned to a footprint that occupies less than 20 kB, while maintaining full x.509 authentication. The SharkSSL-Lite download includes a subset of SharkSSL and header files made for use in non-commercial and for evaluation purposes.

Features

Examples

Limitations

SharkSSL-Lite includes a limited set of ciphers. To use SharkSSL-Lite, the peer side must support Elliptic Curve Cryptography (ECC) and you must use ECC certificates. The peer side must also support the new ChaCha20/Poly1305 cipher combination.

ChaCha20 and Poly1305 for TLS is published RFC 7905. The development of this new cipher was a response to many attacks discovered against other widely used TLS cipher suites. ChaCha20 is the cipher and Poly1305 is an authenticated encryption mode.

SharkSSL-Lite occupies less than 20kB, while maintaining full x.509 authentication. The ChaCha20/Poly1305 cipher software implementation is equally as fast as many hardware accelerated AES engines.

Creating ECC Certificates for SharkSSL-Lite

The following video shows how to create an Elliptic Curve Cryptography (ECC) certificate for a server, how to install the certificate in the server, and how to make the mbed clients connecting to the server trust this certificate. The server in this video is installed on a private/personal computer on a private network for test purposes. The video was produced for the embedded.com article How to run your own secure IoT cloud server.

Committer:
wini
Date:
Mon May 23 13:56:30 2016 +0000
Revision:
1:d5e0e1dcf0d6
Parent:
0:e0adec41ad6b
Type conflict fix (U8-U32) for latest mbed release.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wini 0:e0adec41ad6b 1 /*
wini 0:e0adec41ad6b 2 * ____ _________ __ _
wini 0:e0adec41ad6b 3 * / __ \___ ____ _/ /_ __(_)___ ___ ___ / / ____ ____ _(_)____
wini 0:e0adec41ad6b 4 * / /_/ / _ \/ __ `/ / / / / / __ `__ \/ _ \/ / / __ \/ __ `/ / ___/
wini 0:e0adec41ad6b 5 * / _, _/ __/ /_/ / / / / / / / / / / / __/ /___/ /_/ / /_/ / / /__
wini 0:e0adec41ad6b 6 * /_/ |_|\___/\__,_/_/ /_/ /_/_/ /_/ /_/\___/_____/\____/\__, /_/\___/
wini 0:e0adec41ad6b 7 * /____/
wini 0:e0adec41ad6b 8 *
wini 0:e0adec41ad6b 9 * Barracuda Embedded Web-Server
wini 0:e0adec41ad6b 10 *
wini 0:e0adec41ad6b 11 ****************************************************************************
wini 0:e0adec41ad6b 12 * HEADER
wini 0:e0adec41ad6b 13 *
wini 0:e0adec41ad6b 14 * $Id: DoubleList.h 2881 2013-04-22 22:34:04Z wini $
wini 0:e0adec41ad6b 15 *
wini 0:e0adec41ad6b 16 * COPYRIGHT: Real Time Logic, 2004 - 2012
wini 0:e0adec41ad6b 17 *
wini 0:e0adec41ad6b 18 * This software is copyrighted by and is the sole property of Real
wini 0:e0adec41ad6b 19 * Time Logic LLC. All rights, title, ownership, or other interests in
wini 0:e0adec41ad6b 20 * the software remain the property of Real Time Logic LLC. This
wini 0:e0adec41ad6b 21 * software may only be used in accordance with the terms and
wini 0:e0adec41ad6b 22 * conditions stipulated in the corresponding license agreement under
wini 0:e0adec41ad6b 23 * which the software has been supplied. Any unauthorized use,
wini 0:e0adec41ad6b 24 * duplication, transmission, distribution, or disclosure of this
wini 0:e0adec41ad6b 25 * software is expressly forbidden.
wini 0:e0adec41ad6b 26 *
wini 0:e0adec41ad6b 27 * This Copyright notice may not be removed or modified without prior
wini 0:e0adec41ad6b 28 * written consent of Real Time Logic LLC.
wini 0:e0adec41ad6b 29 *
wini 0:e0adec41ad6b 30 * Real Time Logic LLC. reserves the right to modify this software
wini 0:e0adec41ad6b 31 * without notice.
wini 0:e0adec41ad6b 32 *
wini 0:e0adec41ad6b 33 * http://www.realtimelogic.com
wini 0:e0adec41ad6b 34 ****************************************************************************
wini 0:e0adec41ad6b 35 *
wini 0:e0adec41ad6b 36 * DiskIo implements the abstract class IoIntf. See the reference
wini 0:e0adec41ad6b 37 * manual for more information on the IoIntf (IO interface)
wini 0:e0adec41ad6b 38 * requirements.
wini 0:e0adec41ad6b 39 *
wini 0:e0adec41ad6b 40 * This is a generic header file for all file systems and
wini 0:e0adec41ad6b 41 * platforms. See the sub-directories for platform specific
wini 0:e0adec41ad6b 42 * implementations.
wini 0:e0adec41ad6b 43 */
wini 0:e0adec41ad6b 44
wini 0:e0adec41ad6b 45 #ifndef _DoubleList_h
wini 0:e0adec41ad6b 46 #define _DoubleList_h
wini 0:e0adec41ad6b 47
wini 0:e0adec41ad6b 48 #include <TargConfig.h>
wini 0:e0adec41ad6b 49
wini 0:e0adec41ad6b 50 struct DoubleList;
wini 0:e0adec41ad6b 51
wini 0:e0adec41ad6b 52 typedef struct DoubleLink
wini 0:e0adec41ad6b 53 {
wini 0:e0adec41ad6b 54 #ifdef __cplusplus
wini 0:e0adec41ad6b 55 void *operator new(size_t s) { return ::baMalloc(s); }
wini 0:e0adec41ad6b 56 void operator delete(void* d) { if(d) ::baFree(d); }
wini 0:e0adec41ad6b 57 void *operator new(size_t, void *place) { return place; }
wini 0:e0adec41ad6b 58 void operator delete(void*, void *) { }
wini 0:e0adec41ad6b 59 DoubleLink();
wini 0:e0adec41ad6b 60 ~DoubleLink();
wini 0:e0adec41ad6b 61 void insertAfter(DoubleLink* newLink);
wini 0:e0adec41ad6b 62 void insertBefore(DoubleLink* newLink);
wini 0:e0adec41ad6b 63 void unlink();
wini 0:e0adec41ad6b 64 bool isLinked();
wini 0:e0adec41ad6b 65 DoubleLink* getNext();
wini 0:e0adec41ad6b 66 #endif
wini 0:e0adec41ad6b 67 struct DoubleLink* next;
wini 0:e0adec41ad6b 68 struct DoubleLink* prev;
wini 0:e0adec41ad6b 69 } DoubleLink;
wini 0:e0adec41ad6b 70
wini 0:e0adec41ad6b 71
wini 0:e0adec41ad6b 72
wini 0:e0adec41ad6b 73 typedef struct DoubleList
wini 0:e0adec41ad6b 74 {
wini 0:e0adec41ad6b 75 #ifdef __cplusplus
wini 0:e0adec41ad6b 76 DoubleList();
wini 0:e0adec41ad6b 77 void insertFirst(DoubleLink* newLink);
wini 0:e0adec41ad6b 78 void insertLast(DoubleLink* newLink);
wini 0:e0adec41ad6b 79 bool isLast(DoubleLink* n);
wini 0:e0adec41ad6b 80 DoubleLink* firstNode();
wini 0:e0adec41ad6b 81 DoubleLink* lastNode();
wini 0:e0adec41ad6b 82 bool isEmpty();
wini 0:e0adec41ad6b 83 DoubleLink* removeFirst();
wini 0:e0adec41ad6b 84 bool isInList(DoubleLink* n);
wini 0:e0adec41ad6b 85 #endif
wini 0:e0adec41ad6b 86 DoubleLink* next;
wini 0:e0adec41ad6b 87 DoubleLink* prev;
wini 0:e0adec41ad6b 88 } DoubleList;
wini 0:e0adec41ad6b 89
wini 0:e0adec41ad6b 90
wini 0:e0adec41ad6b 91 #define DoubleLink_constructor(o) do { \
wini 0:e0adec41ad6b 92 ((DoubleLink*)o)->next = 0; \
wini 0:e0adec41ad6b 93 ((DoubleLink*)o)->prev = 0; \
wini 0:e0adec41ad6b 94 } while(0)
wini 0:e0adec41ad6b 95
wini 0:e0adec41ad6b 96
wini 0:e0adec41ad6b 97 #define DoubleLink_destructor(o) do { \
wini 0:e0adec41ad6b 98 if(DoubleLink_isLinked(o)) \
wini 0:e0adec41ad6b 99 DoubleLink_unlink(o); \
wini 0:e0adec41ad6b 100 } while(0)
wini 0:e0adec41ad6b 101
wini 0:e0adec41ad6b 102 #define DoubleLink_insertAfter(o, newLink) do { \
wini 0:e0adec41ad6b 103 baAssert(((DoubleLink*)newLink)->prev==0&&((DoubleLink*)newLink)->next==0);\
wini 0:e0adec41ad6b 104 ((DoubleLink*)newLink)->next = ((DoubleLink*)o)->next; \
wini 0:e0adec41ad6b 105 ((DoubleLink*)newLink)->prev = ((DoubleLink*)o); \
wini 0:e0adec41ad6b 106 ((DoubleLink*)o)->next->prev = ((DoubleLink*)newLink); \
wini 0:e0adec41ad6b 107 ((DoubleLink*)o)->next = ((DoubleLink*)newLink); \
wini 0:e0adec41ad6b 108 } while(0)
wini 0:e0adec41ad6b 109
wini 0:e0adec41ad6b 110
wini 0:e0adec41ad6b 111 #define DoubleLink_insertBefore(o, newLink) do { \
wini 0:e0adec41ad6b 112 baAssert(((DoubleLink*)newLink)->prev==0&&((DoubleLink*)newLink)->next==0);\
wini 0:e0adec41ad6b 113 ((DoubleLink*)newLink)->prev = ((DoubleLink*)o)->prev; \
wini 0:e0adec41ad6b 114 ((DoubleLink*)newLink)->next = ((DoubleLink*)o); \
wini 0:e0adec41ad6b 115 ((DoubleLink*)o)->prev->next = ((DoubleLink*) newLink); \
wini 0:e0adec41ad6b 116 ((DoubleLink*)o)->prev = ((DoubleLink*) newLink); \
wini 0:e0adec41ad6b 117 } while(0)
wini 0:e0adec41ad6b 118
wini 0:e0adec41ad6b 119
wini 0:e0adec41ad6b 120 #define DoubleLink_unlink(o) do { \
wini 0:e0adec41ad6b 121 baAssert(((DoubleLink*)o)->prev && ((DoubleLink*)o)->next);\
wini 0:e0adec41ad6b 122 ((DoubleLink*) o)->next->prev = ((DoubleLink*)o)->prev; \
wini 0:e0adec41ad6b 123 ((DoubleLink*) o)->prev->next = ((DoubleLink*)o)->next; \
wini 0:e0adec41ad6b 124 ((DoubleLink*) o)->next = 0; \
wini 0:e0adec41ad6b 125 ((DoubleLink*) o)->prev = 0; \
wini 0:e0adec41ad6b 126 } while(0)
wini 0:e0adec41ad6b 127
wini 0:e0adec41ad6b 128 #ifdef NDEBUG
wini 0:e0adec41ad6b 129 #define DoubleLink_isLinked(o) \
wini 0:e0adec41ad6b 130 (((DoubleLink*)o)->prev ? TRUE : FALSE)
wini 0:e0adec41ad6b 131 #else
wini 0:e0adec41ad6b 132 #define DoubleLink_isLinked(o) \
wini 0:e0adec41ad6b 133 (((DoubleLink*)o)->prev ? (baAssert(((DoubleLink*)o)->next), TRUE) : FALSE)
wini 0:e0adec41ad6b 134 #endif
wini 0:e0adec41ad6b 135
wini 0:e0adec41ad6b 136 #define DoubleLink_getNext(o) ((DoubleLink*)(o))->next
wini 0:e0adec41ad6b 137
wini 0:e0adec41ad6b 138
wini 0:e0adec41ad6b 139 #define DoubleList_constructor(o) do { \
wini 0:e0adec41ad6b 140 (o)->next = (DoubleLink*)o; \
wini 0:e0adec41ad6b 141 (o)->prev = (DoubleLink*)o; \
wini 0:e0adec41ad6b 142 } while(0)
wini 0:e0adec41ad6b 143
wini 0:e0adec41ad6b 144
wini 0:e0adec41ad6b 145 #define DoubleList_insertFirst(o, newLink) do { \
wini 0:e0adec41ad6b 146 baAssert(((DoubleLink*)newLink)->prev==0&&((DoubleLink*)newLink)->next==0);\
wini 0:e0adec41ad6b 147 ((DoubleLink*)newLink)->next = (o)->next; \
wini 0:e0adec41ad6b 148 ((DoubleLink*)newLink)->prev = (DoubleLink*)o; \
wini 0:e0adec41ad6b 149 (o)->next->prev = ((DoubleLink*) newLink); \
wini 0:e0adec41ad6b 150 (o)->next = ((DoubleLink*) newLink); \
wini 0:e0adec41ad6b 151 } while(0)
wini 0:e0adec41ad6b 152
wini 0:e0adec41ad6b 153
wini 0:e0adec41ad6b 154 #define DoubleList_insertLast(o, newLink) do { \
wini 0:e0adec41ad6b 155 baAssert(((DoubleLink*)newLink)->prev==0&&((DoubleLink*)newLink)->next==0);\
wini 0:e0adec41ad6b 156 ((DoubleLink*)newLink)->next = (DoubleLink*)o; \
wini 0:e0adec41ad6b 157 ((DoubleLink*)newLink)->prev = (o)->prev; \
wini 0:e0adec41ad6b 158 (o)->prev->next = ((DoubleLink*)newLink); \
wini 0:e0adec41ad6b 159 (o)->prev = ((DoubleLink*)newLink); \
wini 0:e0adec41ad6b 160 } while(0)
wini 0:e0adec41ad6b 161
wini 0:e0adec41ad6b 162
wini 0:e0adec41ad6b 163 #define DoubleList_isLast(o, n) (((DoubleLink*)(n))->next == (DoubleLink*)(o))
wini 0:e0adec41ad6b 164 #define DoubleList_isEnd(o, n) ((DoubleLink*)(n) == (DoubleLink*)(o))
wini 0:e0adec41ad6b 165
wini 0:e0adec41ad6b 166 #define DoubleList_firstNode(o) \
wini 0:e0adec41ad6b 167 ((o)->next != (DoubleLink*)o ? (o)->next : 0)
wini 0:e0adec41ad6b 168
wini 0:e0adec41ad6b 169
wini 0:e0adec41ad6b 170 #define DoubleList_lastNode(o) \
wini 0:e0adec41ad6b 171 ((o)->prev != (DoubleLink*)o ? (o)->prev : 0)
wini 0:e0adec41ad6b 172
wini 0:e0adec41ad6b 173
wini 0:e0adec41ad6b 174
wini 0:e0adec41ad6b 175 #define DoubleList_isEmpty(o) \
wini 0:e0adec41ad6b 176 (((DoubleLink*)(o))->next == (DoubleLink*)(o))
wini 0:e0adec41ad6b 177
wini 0:e0adec41ad6b 178
wini 0:e0adec41ad6b 179 #ifdef __cplusplus
wini 0:e0adec41ad6b 180 extern "C" {
wini 0:e0adec41ad6b 181 #endif
wini 0:e0adec41ad6b 182
wini 0:e0adec41ad6b 183 BA_API DoubleLink* DoubleList_removeFirst(DoubleList* o);
wini 0:e0adec41ad6b 184
wini 0:e0adec41ad6b 185 /* Returns true if the node is in any list. You cannot
wini 0:e0adec41ad6b 186 * use this function for testing if the node is in a particular list, that
wini 0:e0adec41ad6b 187 * is your problem. The function performs some additional tests if
wini 0:e0adec41ad6b 188 * NDEBUG is not defined and asserts that if the node is in a list, it should
wini 0:e0adec41ad6b 189 * be in this list.
wini 0:e0adec41ad6b 190 */
wini 0:e0adec41ad6b 191 #ifdef NDEBUG
wini 0:e0adec41ad6b 192 #define DoubleList_isInList(o, node) (((DoubleLink*)node)->prev ? TRUE : FALSE)
wini 0:e0adec41ad6b 193 #else
wini 0:e0adec41ad6b 194 #define DoubleList_isInList(o, node) DoubleList_isInListF(o, node, __FILE__, __LINE__)
wini 0:e0adec41ad6b 195 BA_API BaBool DoubleList_isInListF(DoubleList* o,void* node,const char* file,int line);
wini 0:e0adec41ad6b 196 #endif
wini 0:e0adec41ad6b 197
wini 0:e0adec41ad6b 198
wini 0:e0adec41ad6b 199 #ifdef __cplusplus
wini 0:e0adec41ad6b 200 }
wini 0:e0adec41ad6b 201 inline DoubleLink::DoubleLink() {
wini 0:e0adec41ad6b 202 DoubleLink_constructor(this);
wini 0:e0adec41ad6b 203 }
wini 0:e0adec41ad6b 204 inline DoubleLink::~DoubleLink() {
wini 0:e0adec41ad6b 205 DoubleLink_destructor(this);
wini 0:e0adec41ad6b 206 }
wini 0:e0adec41ad6b 207 inline void DoubleLink::insertAfter(DoubleLink* newLink) {
wini 0:e0adec41ad6b 208 DoubleLink_insertAfter(this, newLink);
wini 0:e0adec41ad6b 209 }
wini 0:e0adec41ad6b 210 inline void DoubleLink::insertBefore(DoubleLink* newLink) {
wini 0:e0adec41ad6b 211 DoubleLink_insertBefore(this, newLink);
wini 0:e0adec41ad6b 212 }
wini 0:e0adec41ad6b 213 inline void DoubleLink::unlink() {
wini 0:e0adec41ad6b 214 DoubleLink_unlink(this);
wini 0:e0adec41ad6b 215 }
wini 0:e0adec41ad6b 216 inline bool DoubleLink::isLinked() {
wini 0:e0adec41ad6b 217 return DoubleLink_isLinked(this) ? true : false;
wini 0:e0adec41ad6b 218 }
wini 0:e0adec41ad6b 219 inline DoubleLink* DoubleLink::getNext() {
wini 0:e0adec41ad6b 220 return DoubleLink_getNext(this);
wini 0:e0adec41ad6b 221 }
wini 0:e0adec41ad6b 222 inline DoubleList::DoubleList() {
wini 0:e0adec41ad6b 223 DoubleList_constructor(this);
wini 0:e0adec41ad6b 224 }
wini 0:e0adec41ad6b 225 inline void DoubleList::insertFirst(DoubleLink* newLink) {
wini 0:e0adec41ad6b 226 DoubleList_insertFirst(this, newLink);
wini 0:e0adec41ad6b 227 }
wini 0:e0adec41ad6b 228 inline void DoubleList::insertLast(DoubleLink* newLink) {
wini 0:e0adec41ad6b 229 DoubleList_insertLast(this, newLink);
wini 0:e0adec41ad6b 230 }
wini 0:e0adec41ad6b 231 inline bool DoubleList::isLast(DoubleLink* n) {
wini 0:e0adec41ad6b 232 return DoubleList_isLast(this, n) ? true : false;
wini 0:e0adec41ad6b 233 }
wini 0:e0adec41ad6b 234 inline DoubleLink* DoubleList::firstNode() {
wini 0:e0adec41ad6b 235 return DoubleList_firstNode(this);
wini 0:e0adec41ad6b 236 }
wini 0:e0adec41ad6b 237 inline DoubleLink* DoubleList::lastNode() {
wini 0:e0adec41ad6b 238 return DoubleList_lastNode(this);
wini 0:e0adec41ad6b 239 }
wini 0:e0adec41ad6b 240 inline bool DoubleList::isEmpty() {
wini 0:e0adec41ad6b 241 return DoubleList_isEmpty(this) ? true : false;
wini 0:e0adec41ad6b 242 }
wini 0:e0adec41ad6b 243 inline DoubleLink* DoubleList::removeFirst() {
wini 0:e0adec41ad6b 244 return DoubleList_removeFirst(this);
wini 0:e0adec41ad6b 245 }
wini 0:e0adec41ad6b 246 inline bool DoubleList::isInList(DoubleLink* n) {
wini 0:e0adec41ad6b 247 return DoubleList_isInList(this, n) ? true : false;
wini 0:e0adec41ad6b 248 }
wini 0:e0adec41ad6b 249 #endif
wini 0:e0adec41ad6b 250
wini 0:e0adec41ad6b 251
wini 0:e0adec41ad6b 252
wini 0:e0adec41ad6b 253
wini 0:e0adec41ad6b 254 /*===========================================================================
wini 0:e0adec41ad6b 255 *
wini 0:e0adec41ad6b 256 * Class: DoubleListEnumerator
wini 0:e0adec41ad6b 257 *---------------------------------------------------------------------------
wini 0:e0adec41ad6b 258 * Description:
wini 0:e0adec41ad6b 259 * Usage:
wini 0:e0adec41ad6b 260 * DoubleListEnumerator e(list);
wini 0:e0adec41ad6b 261 * for(DoubleLink* link = e.getElement() ; link ; link = e.nextElement())
wini 0:e0adec41ad6b 262 * or
wini 0:e0adec41ad6b 263 * DoubleListEnumerator e(list);
wini 0:e0adec41ad6b 264 * DoubleLink* link = e.getElement();
wini 0:e0adec41ad6b 265 * while(link)
wini 0:e0adec41ad6b 266 * {
wini 0:e0adec41ad6b 267 * if(link bla bla)
wini 0:e0adec41ad6b 268 * //Deletes current element and returns next element
wini 0:e0adec41ad6b 269 * link = e.deleteElement();
wini 0:e0adec41ad6b 270 * else
wini 0:e0adec41ad6b 271 * link = e.nextElement();
wini 0:e0adec41ad6b 272 * }
wini 0:e0adec41ad6b 273 */
wini 0:e0adec41ad6b 274 typedef struct DoubleListEnumerator
wini 0:e0adec41ad6b 275 {
wini 0:e0adec41ad6b 276 #ifdef __cplusplus
wini 0:e0adec41ad6b 277 DoubleListEnumerator(){}
wini 0:e0adec41ad6b 278 DoubleListEnumerator(DoubleList* list);
wini 0:e0adec41ad6b 279 DoubleLink* getElement();
wini 0:e0adec41ad6b 280 DoubleLink* nextElement();
wini 0:e0adec41ad6b 281 DoubleLink* removeElement();
wini 0:e0adec41ad6b 282 private:
wini 0:e0adec41ad6b 283 #endif
wini 0:e0adec41ad6b 284 DoubleList* list;
wini 0:e0adec41ad6b 285 DoubleLink* curElement;
wini 0:e0adec41ad6b 286 } DoubleListEnumerator;
wini 0:e0adec41ad6b 287
wini 0:e0adec41ad6b 288 #define DoubleListEnumerator_constructor(o, listMA) do \
wini 0:e0adec41ad6b 289 { \
wini 0:e0adec41ad6b 290 (o)->list = listMA; \
wini 0:e0adec41ad6b 291 (o)->curElement = DoubleList_firstNode((o)->list);\
wini 0:e0adec41ad6b 292 } while(0)
wini 0:e0adec41ad6b 293
wini 0:e0adec41ad6b 294 #define DoubleListEnumerator_getElement(o) (o)->curElement
wini 0:e0adec41ad6b 295
wini 0:e0adec41ad6b 296 #define DoubleListEnumerator_nextElement(o) \
wini 0:e0adec41ad6b 297 ((o)->curElement ? ( \
wini 0:e0adec41ad6b 298 (o)->curElement = (o)->curElement->next == (DoubleLink*)(o)->list ? 0 : (o)->curElement->next, \
wini 0:e0adec41ad6b 299 (o)->curElement \
wini 0:e0adec41ad6b 300 ) : 0)
wini 0:e0adec41ad6b 301
wini 0:e0adec41ad6b 302 #ifdef __cplusplus
wini 0:e0adec41ad6b 303 extern "C" {
wini 0:e0adec41ad6b 304 #endif
wini 0:e0adec41ad6b 305 BA_API DoubleLink* DoubleListEnumerator_removeElement(DoubleListEnumerator* o);
wini 0:e0adec41ad6b 306 #ifdef __cplusplus
wini 0:e0adec41ad6b 307 }
wini 0:e0adec41ad6b 308 inline DoubleListEnumerator::DoubleListEnumerator(DoubleList* list) {
wini 0:e0adec41ad6b 309 DoubleListEnumerator_constructor(this, list); }
wini 0:e0adec41ad6b 310 inline DoubleLink*
wini 0:e0adec41ad6b 311 DoubleListEnumerator::removeElement() {
wini 0:e0adec41ad6b 312 return DoubleListEnumerator_removeElement(this); }
wini 0:e0adec41ad6b 313 inline DoubleLink*
wini 0:e0adec41ad6b 314 DoubleListEnumerator::getElement() {return DoubleListEnumerator_getElement(this);}
wini 0:e0adec41ad6b 315 inline DoubleLink*
wini 0:e0adec41ad6b 316 DoubleListEnumerator::nextElement() {return DoubleListEnumerator_nextElement(this); }
wini 0:e0adec41ad6b 317 #endif
wini 0:e0adec41ad6b 318
wini 0:e0adec41ad6b 319
wini 0:e0adec41ad6b 320 #endif