00001
00002
00003
00004
00005
00006
00007
00008
00015 #include "log.h"
00016 #include "linestream.h"
00017 #include "common.h"
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 static size_t maxAlloc = 128*8*1024*1024*(sizeof(size_t)/4)*(sizeof(size_t)/4);
00031
00032
00033
00038 void *needMem (size_t size)
00039 {
00040 void *pt;
00041 pt = hlr_malloc (size);
00042 memset(pt, 0, size);
00043 return pt;
00044 }
00045
00046
00047
00052 void *needLargeMem (size_t size)
00053 {
00054 void *pt;
00055 pt = hlr_malloc (size);
00056 return pt;
00057 }
00058
00059
00060
00064 void *needLargeZeroedMem (size_t size)
00065 {
00066 void *v;
00067 v = needLargeMem(size);
00068 memset(v, 0, size);
00069 return v;
00070 }
00071
00072
00073
00078 void *needLargeMemResize (void* vp, size_t size)
00079 {
00080 void *pt;
00081 if (size == 0 || size >= maxAlloc)
00082 die ("needLargeMemResize: trying to allocate %llu bytes (limit: %llu)",
00083 (unsigned long long)size, (unsigned long long)maxAlloc);
00084 if ((pt = hlr_realloc(vp, size)) == NULL)
00085 die ("needLargeMemResize: Out of memory - request size %llu bytes\n",
00086 (unsigned long long)size);
00087 return pt;
00088 }
00089
00090
00091
00096 void *needLargeZeroedMemResize (void* vp, size_t oldSize, size_t newSize)
00097 {
00098 void *v = needLargeMemResize(vp, newSize);
00099 if (newSize > oldSize)
00100 memset(((char*)v)+oldSize, 0, newSize-oldSize);
00101 return v;
00102 }
00103
00104
00105
00109 void *cloneMem (void *pt, size_t size)
00110 {
00111 void *newPt = needLargeMem(size);
00112 memcpy(newPt, pt, size);
00113 return newPt;
00114 }
00115
00116
00117
00121 void freeMem (void *pt)
00122 {
00123 if (pt != NULL)
00124 {
00125 hlr_free(pt);
00126 }
00127 }
00128
00129
00130
00135 void freez (void *vpt)
00136 {
00137 void **ppt = (void **)vpt;
00138 void *pt = *ppt;
00139 *ppt = NULL;
00140 freeMem(pt);
00141 }
00142
00143
00144
00145
00146
00147
00148
00149
00150
00154 void zeroBytes (void *vpt, int count)
00155 {
00156 char *pt = (char*)vpt;
00157 while (--count>=0)
00158 *pt++=0;
00159 }
00160
00161
00162
00166 void reverseBytes (char *bytes, long length)
00167 {
00168 long halfLen = (length>>1);
00169 char *end = bytes+length;
00170 char c;
00171 while (--halfLen >= 0)
00172 {
00173 c = *bytes;
00174 *bytes++ = *--end;
00175 *end = c;
00176 }
00177 }
00178
00179
00180
00185 Texta readList (char* fileName)
00186 {
00187 LineStream ls;
00188 char *line;
00189 Texta list;
00190
00191 list = textCreate (1000);
00192 ls = ls_createFromFile (fileName);
00193 while (line = ls_nextLine (ls)) {
00194 if (line[0] == '\0') {
00195 continue;
00196 }
00197 textAdd (list,line);
00198 }
00199 ls_destroy (ls);
00200 return list;
00201 }
00202
00203
00204
00205
00209 Array readTable (char* fileName, char* delimiter)
00210 {
00211 Array tableRows;
00212 TableRow *currTableRow;
00213 LineStream ls;
00214 char *line,*token;
00215 WordIter w;
00216
00217 tableRows = arrayCreate (1000,TableRow);
00218 ls = ls_createFromFile (fileName);
00219 while (line = ls_nextLine (ls)) {
00220 if (line[0] == '\0') {
00221 continue;
00222 }
00223 currTableRow = arrayp (tableRows,arrayMax (tableRows),TableRow);
00224 currTableRow->tableColumns = textCreate (10);
00225 w = wordIterCreate (line,delimiter,0);
00226 while (token = wordNext (w)) {
00227 textAdd (currTableRow->tableColumns,token);
00228 }
00229 wordIterDestroy (w);
00230 }
00231 ls_destroy (ls);
00232 return tableRows;
00233 }