Commit 8934e864d74f15909debc97cd42c7a5a6811cee4

Authored by Georg Hopp
1 parent f1f3e146

simplified the quick fit interface

... ... @@ -44,7 +44,6 @@
44 44
45 45
46 46 CLASS(Cbuf) {
47   - struct memSegment * shm_name_seg;
48 47 char * shm_name; // shared memory identifier
49 48
50 49 char * data;
... ...
... ... @@ -26,17 +26,13 @@
26 26 #define CSTRA(val) val, sizeof(val)-1 //!< Const STRing Argument
27 27
28 28 #define FREE(val) (ffree((void**)&(val)))
29   -#define MEM_FREE(seg) (memFree((struct memSegment **)&(seg)))
  29 +#define MEM_FREE(seg) (memFree((void **)&(seg)))
30 30
31   -struct memSegment {
32   - size_t size;
33   - void * ptr;
34   -};
35 31
36   -struct memSegment * memMalloc(size_t);
37   -struct memSegment * memCalloc(size_t, size_t);
38   -void memFree(struct memSegment **);
39   -void memCleanup();
  32 +void * memMalloc(size_t);
  33 +void * memCalloc(size_t, size_t);
  34 +void memFree(void **);
  35 +void memCleanup();
40 36
41 37 void ffree(void **);
42 38
... ...
... ... @@ -53,8 +53,7 @@ cbufCtor(void * _this, va_list * params)
53 53 int shm;
54 54 char * data;
55 55
56   - this->shm_name_seg = memMalloc(strlen(shm_name) + 7 + 2);
57   - this->shm_name = this->shm_name_seg->ptr;
  56 + this->shm_name = memMalloc(strlen(shm_name) + 7 + 2);
58 57 sprintf(this->shm_name, "/%06d_%s", getpid(), shm_name);
59 58
60 59 /**
... ... @@ -111,7 +110,7 @@ cbufDtor(void * _this)
111 110 {
112 111 Cbuf this = _this;
113 112
114   - MEM_FREE(this->shm_name_seg);
  113 + MEM_FREE(this->shm_name);
115 114
116 115 if (NULL != this->data && MAP_FAILED != this->data) {
117 116 munmap(this->data, this->bsize << 1);
... ...
... ... @@ -39,9 +39,9 @@ loggerLog(void * _object, logger_level level, const char * const fmt, ...) {
39 39 Logger object = _object;
40 40
41 41 if (level >= object->min_level) {
42   - struct memSegment * msg = NULL;
43   - size_t msg_size = 0;
44   - va_list params;
  42 + char * msg = NULL;
  43 + size_t msg_size = 0;
  44 + va_list params;
45 45
46 46 va_start(params, fmt);
47 47 msg_size = vsnprintf(NULL, msg_size, fmt, params);
... ... @@ -50,10 +50,10 @@ loggerLog(void * _object, logger_level level, const char * const fmt, ...) {
50 50 msg = memMalloc(msg_size + 1);
51 51
52 52 va_start(params, fmt);
53   - vsnprintf(msg->ptr, msg_size + 1, fmt, params);
  53 + vsnprintf(msg, msg_size + 1, fmt, params);
54 54 va_end(params);
55 55
56   - CALL(_object, Logger, log, level, msg->ptr);
  56 + CALL(_object, Logger, log, level, msg);
57 57
58 58 MEM_FREE(msg);
59 59 }
... ...
... ... @@ -47,6 +47,11 @@
47 47
48 48 #include "utils/memory.h"
49 49
  50 +struct memSegment {
  51 + size_t size;
  52 + void * ptr;
  53 +};
  54 +
50 55
51 56 void * segments = NULL;
52 57
... ... @@ -100,7 +105,7 @@ segmentFree(void * segment)
100 105 }
101 106
102 107
103   -struct memSegment *
  108 +void *
104 109 memMalloc(size_t size)
105 110 {
106 111 struct memSegment * seg = tfind(&size, &segments, segmentFindCmp);
... ... @@ -116,7 +121,7 @@ memMalloc(size_t size)
116 121 seg = *(struct memSegment **)seg;
117 122 }
118 123
119   - return seg;
  124 + return seg->ptr;
120 125 }
121 126
122 127 /**
... ... @@ -124,18 +129,36 @@ memMalloc(size_t size)
124 129 * because we want the best performance.
125 130 * Most times this is not neccessary at all.
126 131 */
127   -struct memSegment *
  132 +void *
128 133 memCalloc(size_t nmemb, size_t size)
129 134 {
130   - return memMalloc(nmemb * size);
  135 + size_t _size = nmemb * size;
  136 + size_t _inmemb = (sizeof(struct memSegment) / size) + 1;
  137 + struct memSegment * seg = tfind(&_size, &segments, segmentFindCmp);
  138 +
  139 + if (NULL == seg) {
  140 + seg = (struct memSegment *)calloc(nmemb + _inmemb, size);
  141 + seg->size = size;
  142 + seg->ptr = seg + sizeof(struct memSegment);
  143 + } else {
  144 + // remove the found one from the tree as we use it now.
  145 + tdelete((void *)seg, &segments, segmentSearchCmp);
  146 + seg = *(struct memSegment **)seg;
  147 + }
  148 +
  149 + return seg->ptr;
131 150 }
132 151
133 152 void
134   -memFree(struct memSegment ** seg)
  153 +memFree(void ** mem)
135 154 {
136   - if (NULL != *seg) {
137   - tsearch((void *)*seg, &segments, segmentSearchCmp);
138   - *seg = NULL;
  155 + if (NULL != *mem) {
  156 + struct memSegment * seg = *(struct memSegment **)mem;
  157 +
  158 + seg -= sizeof(struct memSegment);
  159 +
  160 + tsearch((void *)seg, &segments, segmentSearchCmp);
  161 + *mem = NULL;
139 162 }
140 163 }
141 164
... ...
Please register or login to post a comment