CMSDK 2.0.1
Cross-platform C++ base library and SDK for the Psyclone AIOS platform
Loading...
Searching...
No Matches
MemoryMaps.cpp
Go to the documentation of this file.
1
4
5#include "MemoryMaps.h"
6
7namespace cmlabs {
8
9
11// TypeMap //
13
14// static
15bool MemoryMaps::CreateNewTypeLevel(uint16 id, const char* name, uint64 time) {
17 if (time)
18 entry->time = time;
20 return (entry != NULL);
21}
22
23// static
24bool MemoryMaps::GetTypeLevelName(uint16 id, char* name, uint32 maxSize) {
26}
27
28// static
29bool MemoryMaps::GetTypeLevelID(const char* name, uint16 &id) {
31}
32
33// static
34bool MemoryMaps::DeleteTypeLevel(const char* name) {
35 uint16 id;
37 return false;
39}
40
41// static
45
46// static
50
51
52
54// ContextMap //
56
57// static
58bool MemoryMaps::CreateNewContextLevel(uint16 id, const char* name, uint64 time) {
60 if (time)
61 entry->time = time;
63 return (entry != NULL);
64}
65
66// static
67bool MemoryMaps::GetContextLevelName(uint16 id, char* name, uint32 maxSize) {
69}
70
71// static
72bool MemoryMaps::GetContextLevelID(const char* name, uint16 &id) {
74}
75
76// static
83
84// static
88
89// static
93
94
95
97// TopicMap //
99
100// static
106
107// static
108bool MemoryMaps::GetTopicName(uint32 id, char* name, uint32 maxSize) {
110}
111
112// static
113bool MemoryMaps::GetTopicID(const char* name, uint32 &id) {
115}
116
117// static
118bool MemoryMaps::DeleteTopic(const char* name) {
119 uint32 id;
121 return false;
123}
124
125// static
129
130// static
134
135
136
137
138
139
141// NodeMap //
143
145//bool MemoryMaps::CreateNewNode(uint8 id, const char* name, uint64 address) {
146// NodeMapEntry* entry = GenericMemoryMap<NodeMapEntry, uint16, uint64>::CreateEntryAndLockMap(id, name, address);
147// GenericMemoryMap<NodeMapEntry, uint32, uint64>::UnlockMap();
148// return (entry != NULL);
149//}
150//
152//uint64 MemoryMaps::GetNodeAddress(uint16 id) {
153// uint64 address = 0;
154// if (!GenericMemoryMap<NodeMapEntry, uint16, uint64>::GetEntryKey(id, address))
155// return false;
156// return address;
157//}
158//
160//bool MemoryMaps::GetNodeID(uint64 address, uint16 &id) {
161// return GenericMemoryMap<NodeMapEntry, uint16, uint64>::GetEntryID(address, id);
162//}
163//
165//bool MemoryMaps::GetNodeName(uint16 id, char* name, uint32 maxSize) {
166// return GenericMemoryMap<NodeMapEntry, uint16, uint64>::GetEntryName(id, name, maxSize);
167//}
168//
170//bool MemoryMaps::GetNodeID(const char* name, uint16 &id) {
171// return GenericMemoryMap<NodeMapEntry, uint16, uint64>::GetEntryID(name, id);
172//}
173//
175//bool MemoryMaps::DeleteNode(const char* name) {
176// uint16 id;
177// if (!GenericMemoryMap<NodeMapEntry, uint16, uint64>::GetEntryID(name, id))
178// return false;
179// return GenericMemoryMap<NodeMapEntry, uint16, uint64>::DeleteEntry(id);
180//}
181//
183//bool MemoryMaps::DeleteNode(uint16 id) {
184// return GenericMemoryMap<NodeMapEntry, uint16, uint64>::DeleteEntry(id);
185//}
186//
188//uint64 MemoryMaps::GetNodeCreateTime(uint16 id) {
189// return GenericMemoryMap<NodeMapEntry, uint16, uint64>::GetEntryCreateTime(id);
190//}
191
192
193
194
196// CrankMap //
198
199// static
200bool MemoryMaps::CreateNewCrank(uint16 id, const char* name, const char* function, const char* libraryFilename, uint64 time) {
202 if (time)
203 entry->time = time;
204 utils::strcpyavail(entry->function, function, MAXKEYNAMELEN, false);
205 utils::strcpyavail(entry->libraryFilename, libraryFilename, MAXKEYNAMELEN, false);
207 return (entry != NULL);
208}
209
210// static
211bool MemoryMaps::GetCrankName(uint16 id, char* name, uint32 maxSize) {
213}
214
215// static
216bool MemoryMaps::GetCrankFunction(uint16 id, char* function, uint32 maxSize) {
218 if (entry) {
219 utils::strcpyavail(function, entry->function, maxSize, false);
221 return true;
222 }
223 else {
225 return false;
226 }
227}
228
229//static
230bool MemoryMaps::GetCrankLibraryFilename(uint16 id, char* libraryFilename, uint32 maxSize) {
232 if (entry) {
233 utils::strcpyavail(libraryFilename, entry->libraryFilename, maxSize, false);
235 return true;
236 }
237 else {
239 return false;
240 }
241}
242
243// static
244bool MemoryMaps::GetCrankID(const char* name, uint16 &id) {
246}
247
248// static
249bool MemoryMaps::GetCrankScript(uint16 id, char* script, uint32 maxSize) {
251 if (entry) {
252 utils::strcpyavail(script, entry->script, maxSize, false);
254 return true;
255 }
256 else {
258 return false;
259 }
260}
261
262// static
263bool MemoryMaps::SetCrankScript(uint16 id, const char* script) {
265 if (entry) {
266 utils::strcpyavail(entry->script, script, MAXSCRIPTLEN, false);
268 return true;
269 }
270 else {
272 return false;
273 }
274}
275
276// static
277bool MemoryMaps::DeleteCrank(const char* name) {
278 uint16 id;
280 return false;
282}
283
284// static
288
289// static
293
294
295
296
298// QueueMap //
300
302//bool MemoryMaps::CreateNewQueue(uint32 pageID, const char* name, uint32 &id) {
303// QueueMapEntry* entry = GenericMemoryMap<QueueMapEntry, uint32, uint32>::CreateEntryAndLockMap(name, pageID, id);
304// GenericMemoryMap<QueueMapEntry, uint32, uint8>::UnlockMap();
305// return (entry != NULL);
306//}
307//
309//bool MemoryMaps::GetQueueName(uint32 id, char* name, uint32 maxSize) {
310// return GenericMemoryMap<QueueMapEntry, uint32, uint32>::GetEntryName(id, name, maxSize);
311//}
312//
314//uint32 MemoryMaps::GetQueuePageID(uint32 id) {
315// uint32 pageID = 0;
316// if (!GenericMemoryMap<QueueMapEntry, uint32, uint32>::GetEntryKey(id, pageID))
317// return 0;
318// return pageID;
319//}
320//
322//bool MemoryMaps::GetQueueID(const char* name, uint32 &id) {
323// return GenericMemoryMap<QueueMapEntry, uint32, uint32>::GetEntryID(name, id);
324//}
325//
327//bool MemoryMaps::GetQueueID(uint32 pageID, uint32 &id) {
328// return GenericMemoryMap<QueueMapEntry, uint32, uint32>::GetEntryID(pageID, id);
329//}
330//
332//bool MemoryMaps::DeleteQueue(const char* name) {
333// uint32 id;
334// if (!GenericMemoryMap<QueueMapEntry, uint32, uint32>::GetEntryID(name, id))
335// return false;
336// return GenericMemoryMap<QueueMapEntry, uint32, uint32>::DeleteEntry(id);
337//}
338//
340//bool MemoryMaps::DeleteQueue(uint32 id) {
341// return GenericMemoryMap<QueueMapEntry, uint32, uint32>::DeleteEntry(id);
342//}
343//
345//uint64 MemoryMaps::GetQueueCreateTime(uint32 id) {
346// return GenericMemoryMap<QueueMapEntry, uint32, uint32>::GetEntryCreateTime(id);
347//}
348
349
350
351
352
354// ProcessMap //
356
358//bool MemoryMaps::CreateNewProcess(const char* name, uint16 &id) {
359// ProcessMapEntry* entry = GenericMemoryMap<ProcessMapEntry, uint16, uint32>::CreateEntryAndLockMap(name, 0, id);
360// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
361// return (entry != NULL);
362//}
363//
365//bool MemoryMaps::GetProcessName(uint16 id, char* name, uint32 maxSize) {
366// return GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryName(id, name, maxSize);
367//}
368//
370//bool MemoryMaps::GetProcessID(const char* name, uint16 &id) {
371// return GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryID(name, id);
372//}
373//
375//bool MemoryMaps::DeleteProcess(const char* name) {
376// uint16 id;
377// if (!GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryID(name, id))
378// return false;
379// return GenericMemoryMap<ProcessMapEntry, uint16, uint32>::DeleteEntry(id);
380//}
381//
383//bool MemoryMaps::DeleteProcess(uint16 id) {
384// return GenericMemoryMap<ProcessMapEntry, uint16, uint32>::DeleteEntry(id);
385//}
386//
388//uint64 MemoryMaps::GetProcessCreateTime(uint16 id) {
389// return GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryCreateTime(id);
390//}
391//
393//bool MemoryMaps::GetProcessCommandLine(uint16 id, char* cmdline, uint32 maxSize) {
394// ProcessMapEntry* entry = GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryAndLockMap(id);
395// if ((entry != NULL) && (entry->id == id) && (entry->time != 0) && (strlen(entry->commandline) < maxSize-1)) {
396// strcpy(cmdline, entry->commandline);
397// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
398// return true;
399// }
400// else {
401// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
402// return false;
403// }
404//}
405//
407//uint8 MemoryMaps::GetProcessStatus(uint16 id, uint64& lastseen) {
408// ProcessMapEntry* entry = GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryAndLockMap(id);
409// if ((entry != NULL) && (entry->id == id) && (entry->time != 0)) {
410// uint8 status = entry->status;
411// lastseen = entry->lastseen;
412// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
413// return status;
414// }
415// else {
416// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
417// lastseen = 0;
418// return 0;
419// }
420//}
421//
423//uint16 MemoryMaps::GetProcessIDFromOSID(uint32 osid) {
424// uint16 id = 0;
425// if (GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryID(osid, id))
426// return id;
427// else
428// return 0;
429//}
430//
432//uint32 MemoryMaps::GetProcessOSID(uint16 id) {
433// uint32 osid = 0;
434// if (GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryKey(id, osid))
435// return osid;
436// else
437// return 0;
438//}
439//
441//bool MemoryMaps::SetProcessOSID(uint16 id, uint32 osid) {
442// return GenericMemoryMap<ProcessMapEntry, uint16, uint32>::SetEntryKey(id, osid);
443//}
444//
446//bool MemoryMaps::GetProcessQueueID(uint16 id, uint8 queueType, uint32& qid) {
447// ProcessMapEntry* entry = GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryAndLockMap(id);
448// if ((entry != NULL) && (entry->id == id) && (entry->time != 0)) {
449// switch(queueType) {
450// case SIGNALQ_ID:
451// qid = entry->signalQID;
452// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
453// return true;
454// case MSGQ_ID:
455// qid = entry->messageQID;
456// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
457// return true;
458// case REQQ_ID:
459// qid = entry->requestQID;
460// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
461// return true;
462// case CMDQ_ID:
463// qid = entry->commandQID;
464// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
465// return true;
466// default:
467// break;
468// }
469// }
470// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
471// return false;
472//}
473//
475//bool MemoryMaps::SetProcessCommandLine(uint16 id, const char* cmdline) {
476// ProcessMapEntry* entry = GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryAndLockMap(id);
477// if ((entry != NULL) && (entry->id == id) && (entry->time != 0) && (strlen(cmdline) < MAXCOMMANDLINELEN)) {
478// strcpy(entry->commandline, cmdline);
479// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
480// return true;
481// }
482// else {
483// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
484// return false;
485// }
486//}
487//
489//bool MemoryMaps::SetProcessStatus(uint16 id, uint8 status) {
490// ProcessMapEntry* entry = GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryAndLockMap(id);
491// if ((entry != NULL) && (entry->id == id) && (entry->time != 0)) {
492// entry->status = status;
493// entry->lastseen = GetTimeNow();
494// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
495// return true;
496// }
497// else {
498// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
499// return 0;
500// }
501//}
502//
504//bool MemoryMaps::SetProcessQueueID(uint16 id, uint8 queueType, uint32 qid) {
505// ProcessMapEntry* entry = GenericMemoryMap<ProcessMapEntry, uint16, uint32>::GetEntryAndLockMap(id);
506// if ((entry != NULL) && (entry->id == id) && (entry->time != 0)) {
507// switch(queueType) {
508// case SIGNALQ_ID:
509// entry->signalQID = qid;
510// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
511// return true;
512// case MSGQ_ID:
513// entry->messageQID = qid;
514// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
515// return true;
516// case REQQ_ID:
517// entry->requestQID = qid;
518// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
519// return true;
520// case CMDQ_ID:
521// entry->commandQID = qid;
522// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
523// return true;
524// default:
525// break;
526// }
527// }
528// GenericMemoryMap<ProcessMapEntry, uint16, uint32>::UnlockMap();
529// return false;
530//}
531
532
533
534
535
536
537
538
539
540
541
542
544// RequestMap //
546
548//RequestMapEntry* MemoryMaps::CreateAndLockNewRequest(uint32 from, uint32 to, uint32 &id) {
549// uint32 dataSize;
550// char* data = MemoryManager::GetAndLockSystemBlock(ID_REQUESTMAPPAGE, dataSize);
551// if (data == NULL)
552// return NULL;
553// // Get next available ID from list
554// RequestMapHeader* header = (RequestMapHeader*)data;
555// uint32 loc;
556// if (!utils::GetFirstFreeBitLoc((uint32*)((char*)header + sizeof(RequestMapHeader)), header->bitFieldSize, loc)) {
557// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
558// return NULL;
559// }
560// // Reserve it
561// id = loc;
562// utils::SetBit(id, BITOCCUPIED, (uint32*)((char*)header + sizeof(RequestMapHeader)), header->bitFieldSize);
563//
564// // Calc offset
565// uint32 offset = sizeof(RequestMapHeader) + header->bitFieldSize + id * sizeof(RequestMapEntry);
566// if (offset > header->size) {
567// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
568// return NULL;
569// }
570// RequestMapEntry* entry = (RequestMapEntry*) (data+offset);
571// if ((entry->id == id) || (entry->time == 0)) {
572// entry->id = id;
573// entry->time = GetTimeNow();
574// entry->from = from;
575// entry->to = to;
576// header->count++;
577// // Don't unlock the block
578// // MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
579// return entry;
580// }
581// else {
582// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
583// return NULL;
584// }
585//}
586//
588//RequestMapEntry* MemoryMaps::GetAndLockRequestEntry(uint32 id) {
589// uint32 dataSize;
590// char* data = MemoryManager::GetAndLockSystemBlock(ID_REQUESTMAPPAGE, dataSize);
591// if (data == NULL)
592// return NULL;
593// RequestMapHeader* header = (RequestMapHeader*)data;
594// RequestMapEntry* entry;
595//
596// // Calc offset
597// uint32 offset = sizeof(RequestMapHeader) + header->bitFieldSize + id * sizeof(RequestMapEntry);
598// if (offset > header->size) {
599// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
600// return NULL;
601// }
602// entry = (RequestMapEntry*) (data+offset);
603// if ((entry->id == id) && (entry->time != 0)) {
604// return entry;
605// }
606// else {
607// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
608// return false;
609// }
610//}
611//
613//bool MemoryMaps::UnlockRequestMap() {
614// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
615// return true;
616//}
617//
619//bool MemoryMaps::DeleteRequest(uint32 id) {
620// uint32 dataSize;
621// char* data = MemoryManager::GetAndLockSystemBlock(ID_REQUESTMAPPAGE, dataSize);
622// if (data == NULL)
623// return false;
624// RequestMapHeader* header = (RequestMapHeader*)data;
625// RequestMapEntry* entry;
626//
627// // Calc offset
628// uint32 offset = sizeof(RequestMapHeader) + header->bitFieldSize + id * sizeof(RequestMapEntry);
629// if (offset > header->size) {
630// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
631// return false;
632// }
633// entry = (RequestMapEntry*) (data+offset);
634// if ((entry->id != id) || (entry->time == 0)) {
635// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
636// return false;
637// }
638//
639// // Free it
640// entry->time = 0;
641// entry->status = 0;
642// header->count--;
643// utils::SetBit(id, BITFREE, (uint32*)((char*)header + sizeof(RequestMapHeader)), header->bitFieldSize);
644//
645// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
646// return true;
647//}
648//
650//bool MemoryMaps::GetRequestCount(uint32& count) {
651// uint32 dataSize;
652// char* data = MemoryManager::GetAndLockSystemBlock(ID_REQUESTMAPPAGE, dataSize);
653// if (data == NULL)
654// return false;
655// RequestMapHeader* header = (RequestMapHeader*)data;
656// count = header->count;
657// MemoryManager::UnlockSystemBlock(ID_REQUESTMAPPAGE);
658// return true;
659//}
660
661
662
663
664
665
666
667
668
669
670
671
672
673} // namespace cmlabs
Legacy shared-memory maps for the page-based allocator: reserved page ids, map entry layouts and the ...
#define MAXKEYNAMELEN
Definition Utils.h:85
#define MAXSCRIPTLEN
Definition Utils.h:91
Static algorithms shared by all bitfield-indexed maps in the data-maps segment.
static bool GetEntryName(char *data, ID id, char *name, uint32 maxSize)
Copy the entry name.
static ID GetEntryID(char *data, const char *name, bool force=false)
Case-insensitive reverse lookup: find the id registered under name.
static bool DeleteEntry(char *data, ID id)
Free the entry and its bit.
static bool GetCrankID(const char *name, uint16 &id)
static bool CreateNewTypeLevel(uint16 id, const char *name, uint64 time=0)
static bool GetCrankScript(uint16 id, char *script, uint32 maxSize)
static uint64 GetCrankCreateTime(uint16 id)
static bool CreateNewTopic(uint8 id, const char *name)
static bool DeleteTopic(const char *name)
static uint64 GetTypeLevelCreateTime(uint16 id)
static bool GetTypeLevelID(const char *name, uint16 &id)
static bool GetTopicName(uint32 id, char *name, uint32 maxSize)
static bool CreateNewContextLevel(uint16 id, const char *name, uint64 time=0)
static bool GetCrankFunction(uint16 id, char *function, uint32 maxSize)
static bool DeleteTypeLevel(const char *name)
static bool GetContextLevelID(const char *name, uint16 &id)
static bool GetContextLevelName(uint16 id, char *name, uint32 maxSize)
static bool DeleteCrank(uint16 id)
static bool GetTopicID(const char *name, uint32 &id)
static bool GetCrankLibraryFilename(uint16 id, char *libraryFilename, uint32 maxSize)
static uint64 GetContextLevelCreateTime(uint16 id)
static bool SetCrankScript(uint16 id, const char *script)
static bool DeleteContextLevel(const char *name)
static bool GetTypeLevelName(uint16 id, char *name, uint32 maxSize)
static uint64 GetTopicCreateTime(uint32 id)
static bool GetCrankName(uint16 id, char *name, uint32 maxSize)
static bool CreateNewCrank(uint16 id, const char *name, const char *function, const char *libraryFilename, uint64 time=0)
uint32 strcpyavail(char *dst, const char *src, uint32 maxlen, bool copyAvailable)
Bounded strcpy that always NUL-terminates.
Definition Utils.cpp:6056
Context-map entry: one registered psychological/system context name/id.
uint64 time
Crank-map entry: one registered crank (user callback/script) with its function, library and inline sc...
char function[MAXKEYNAMELEN+1]
uint64 time
char script[MAXSCRIPTLEN+1]
char libraryFilename[MAXKEYNAMELEN+1]
Legacy topic-map entry.
Definition MemoryMaps.h:92
Type-map entry: one registered message type name/id.
uint64 time