SFBMemory.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00029 #ifndef SFBMEMORY_H
00030 #define SFBMEMORY_H
00031
00032 #include "SFBFrame.h"
00033 #include "SFBHeap.h"
00034 #include "SFBReactor.h"
00035
00036 #define MAX_PACKETS_IN_MEMORY 20
00037
00041 class SFBMemory {
00042
00043 public:
00044
00045 SFBMemory() ;
00046
00047 void reflex(const char type, PacketHandler ph) {
00048 ::reflex(type, ph, SFBReactor::TRIGGER_MEMORY);
00049 }
00050
00051 bool dispatch(int maxPackets, u32 deadline) ;
00052
00053 int remember(const u8 * packet) ;
00054
00055 int rememberUnread(const u8 * packet,u8 sourceOverride = MAX_FACE_INDEX) ;
00056
00057 u8 * makeNewMemory(u32 packetLength) ;
00058
00059 void forget() {
00060 if (inTrigger)
00061 killIt = true;
00062 }
00063
00064 void remember() {
00065 if (inTrigger)
00066 killIt = false;
00067 }
00068
00069 bool forget(u32 index) ;
00070
00071 u8 * get(const u32 index) {
00072 API_ASSERT_MAX(index,MAX_PACKETS_IN_MEMORY);
00073 return packets[index];
00074 }
00075 bool fire(const u32 index) ;
00076 int find(const u8 type) {
00077 return find((const char *) &type, 1);
00078 }
00079 int find(const char * prefix, const int len = -1) ;
00080
00081 private:
00082 SFBHeap heap;
00083 u8 * packets[MAX_PACKETS_IN_MEMORY];
00084 u8 spinner;
00085 u8 inUse;
00086 bool inTrigger;
00087 bool killIt;
00088 };
00089
00090 extern SFBMemory Memory;
00091
00092 #endif
00093