EventFramework library allows the creation of an event-driven infrastructure in which small "threads" can handle events in a multithreaded execution context. The EventFramework can be configured to act as a cooperative or a fully-preemptive kernel with fixed-priority scheduling. Furthermore, this kernel matches run-to-completion semantics, and hence a single-stack configuration is enough to keep running this multithreaded execution environment. As running threads shares global stack, a huge quantity of RAM is saved in contrast with traditional RTOSes.

Dependents:   sensors_KL46Z_xmn

Committer:
raulMrello
Date:
Wed Oct 03 21:02:16 2012 +0000
Revision:
1:ec12f2e32faf
Parent:
0:9d09acc8f9d9
Nesting correction on RestoreContext interface.; Erase invalid comment-block

Who changed what in which revision?

UserRevisionLine numberNew contents of line
raulMrello 0:9d09acc8f9d9 1 /* mbed EventFramework Library
raulMrello 0:9d09acc8f9d9 2 * Copyright (c) 2012 raulMrello
raulMrello 0:9d09acc8f9d9 3 *
raulMrello 0:9d09acc8f9d9 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
raulMrello 0:9d09acc8f9d9 5 * of this software and associated documentation files (the "Software"), to deal
raulMrello 0:9d09acc8f9d9 6 * in the Software without restriction, including without limitation the rights
raulMrello 0:9d09acc8f9d9 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
raulMrello 0:9d09acc8f9d9 8 * copies of the Software, and to permit persons to whom the Software is
raulMrello 0:9d09acc8f9d9 9 * furnished to do so, subject to the following conditions:
raulMrello 0:9d09acc8f9d9 10 *
raulMrello 0:9d09acc8f9d9 11 * The above copyright notice and this permission notice shall be included in
raulMrello 0:9d09acc8f9d9 12 * all copies or substantial portions of the Software.
raulMrello 0:9d09acc8f9d9 13 *
raulMrello 0:9d09acc8f9d9 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
raulMrello 0:9d09acc8f9d9 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
raulMrello 0:9d09acc8f9d9 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
raulMrello 0:9d09acc8f9d9 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
raulMrello 0:9d09acc8f9d9 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
raulMrello 0:9d09acc8f9d9 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
raulMrello 0:9d09acc8f9d9 20 * THE SOFTWARE.
raulMrello 0:9d09acc8f9d9 21 */
raulMrello 0:9d09acc8f9d9 22
raulMrello 0:9d09acc8f9d9 23 #include "List.h"
raulMrello 0:9d09acc8f9d9 24
raulMrello 0:9d09acc8f9d9 25 List::List(void* item){
raulMrello 0:9d09acc8f9d9 26 head = new Node(item);
raulMrello 0:9d09acc8f9d9 27 }
raulMrello 0:9d09acc8f9d9 28
raulMrello 0:9d09acc8f9d9 29 List::~List(){
raulMrello 0:9d09acc8f9d9 30 RemoveAll();
raulMrello 0:9d09acc8f9d9 31 head = NULL;
raulMrello 0:9d09acc8f9d9 32 }
raulMrello 0:9d09acc8f9d9 33
raulMrello 0:9d09acc8f9d9 34 Node* List::AddBefore(Node* node, void* item){
raulMrello 0:9d09acc8f9d9 35 Node* me = new Node(item);
raulMrello 0:9d09acc8f9d9 36 Node* prev = node->GetPrev();
raulMrello 0:9d09acc8f9d9 37 node->SetPrev(me);
raulMrello 0:9d09acc8f9d9 38 me->SetNext(node);
raulMrello 0:9d09acc8f9d9 39 if(prev){
raulMrello 0:9d09acc8f9d9 40 me->SetPrev(prev);
raulMrello 0:9d09acc8f9d9 41 prev->SetNext(me);
raulMrello 0:9d09acc8f9d9 42 return 0;
raulMrello 0:9d09acc8f9d9 43 }
raulMrello 0:9d09acc8f9d9 44 return me;
raulMrello 0:9d09acc8f9d9 45 }
raulMrello 0:9d09acc8f9d9 46
raulMrello 0:9d09acc8f9d9 47 void List::AddAfter(Node* node, void* item){
raulMrello 0:9d09acc8f9d9 48 Node* me = new Node(item);
raulMrello 0:9d09acc8f9d9 49 Node* next = node->GetNext();
raulMrello 0:9d09acc8f9d9 50 node->SetNext(me);
raulMrello 0:9d09acc8f9d9 51 me->SetPrev(node);
raulMrello 0:9d09acc8f9d9 52 if(next){
raulMrello 0:9d09acc8f9d9 53 me->SetNext(next);
raulMrello 0:9d09acc8f9d9 54 next->SetPrev(me);
raulMrello 0:9d09acc8f9d9 55 }
raulMrello 0:9d09acc8f9d9 56 }
raulMrello 0:9d09acc8f9d9 57
raulMrello 0:9d09acc8f9d9 58 void List::Remove(Node* node){
raulMrello 0:9d09acc8f9d9 59 Node* prev = node->GetPrev();
raulMrello 0:9d09acc8f9d9 60 Node* next = node->GetNext();
raulMrello 0:9d09acc8f9d9 61 if(prev){
raulMrello 0:9d09acc8f9d9 62 prev->SetNext(next);
raulMrello 0:9d09acc8f9d9 63 }
raulMrello 0:9d09acc8f9d9 64 else{
raulMrello 0:9d09acc8f9d9 65 head = next;
raulMrello 0:9d09acc8f9d9 66 }
raulMrello 0:9d09acc8f9d9 67 if(next){
raulMrello 0:9d09acc8f9d9 68 next->SetPrev(prev);
raulMrello 0:9d09acc8f9d9 69 }
raulMrello 0:9d09acc8f9d9 70 delete node;
raulMrello 0:9d09acc8f9d9 71 }
raulMrello 0:9d09acc8f9d9 72
raulMrello 0:9d09acc8f9d9 73 void List::RemoveItem(void* item){
raulMrello 0:9d09acc8f9d9 74 Node* cursor = head;
raulMrello 0:9d09acc8f9d9 75 while(cursor){
raulMrello 0:9d09acc8f9d9 76 void* data = cursor->GetData();
raulMrello 0:9d09acc8f9d9 77 if(data == item){
raulMrello 0:9d09acc8f9d9 78 Remove(cursor);
raulMrello 0:9d09acc8f9d9 79 return;
raulMrello 0:9d09acc8f9d9 80 }
raulMrello 0:9d09acc8f9d9 81 cursor = cursor->GetNext();
raulMrello 0:9d09acc8f9d9 82 }
raulMrello 0:9d09acc8f9d9 83 }
raulMrello 0:9d09acc8f9d9 84
raulMrello 0:9d09acc8f9d9 85 void List::RemoveAll(void){
raulMrello 0:9d09acc8f9d9 86 Node* cursor = head;
raulMrello 0:9d09acc8f9d9 87 while(cursor){
raulMrello 0:9d09acc8f9d9 88 Node* toRemove = cursor;
raulMrello 0:9d09acc8f9d9 89 cursor = cursor->GetNext();
raulMrello 0:9d09acc8f9d9 90 delete toRemove;
raulMrello 0:9d09acc8f9d9 91 }
raulMrello 0:9d09acc8f9d9 92 }
raulMrello 0:9d09acc8f9d9 93
raulMrello 0:9d09acc8f9d9 94 Node* List::GetFirstNode(void){
raulMrello 0:9d09acc8f9d9 95 return head;
raulMrello 0:9d09acc8f9d9 96 }
raulMrello 0:9d09acc8f9d9 97
raulMrello 0:9d09acc8f9d9 98 void List::SetFirstNode(Node* node){
raulMrello 0:9d09acc8f9d9 99 head = node;
raulMrello 0:9d09acc8f9d9 100 }
raulMrello 0:9d09acc8f9d9 101
raulMrello 0:9d09acc8f9d9 102