004
18.04.2005, 18:19 Uhr
0xdeadbeef
Gott (Operator)
|
Etwas in der Art:
C++: |
#ifndef INCLUDED_ARRAY_H #define INCLUDED_ARRAY_H
/* array.h */
#include <stddef.h>
#define WORDLEN 15
#define ARRAY_OK 0 #define ARRAY_OUT_OF_BOUNDS 1 #define ARRAY_ALLOCATION_FAILURE 2
typedef struct { char wo[WORDLEN + 1]; size_t count; } entry;
typedef struct { entry *_private_data; size_t _private_size; } array;
/* Methoden eindeutig benennen. Das ist in C++ natürlich einfacher, aber naja. * Außerdem extensive Benutzung von Pointern wg. Performance */ array *array_construct(size_t sz); void array_destruct(array *a); int array_write(array *a, size_t index, entry const *value); entry const *array_read(array const *a, size_t index); int array_read_buf(array *a, size_t index, entry *value); size_t array_size(array const *a); int array_resize(array *a, size_t sz);
#endif
|
C++: |
/* array.c */ #include "array.h"
#include <malloc.h> #include <string.h>
array *array_construct(size_t sz) { array *p = (array*) malloc(sizeof(array)); p->_private_size = sz; p->_private_data = (entry*) malloc(sz * sizeof(entry));
return p; }
void array_destruct(array *a) { free(a->_private_data); free(a); }
int array_write(array *a, size_t index, entry const *value) { if(index >= a->_private_size) return ARRAY_OUT_OF_BOUNDS;
/* Das willst du in der Zukunft wahrscheinlich mit ner Methode von entry * machen, für den Fall dass irgdenwann ne deep copy nötig ist, aber im * für den Moment: */ memcpy(&a->_private_data[index], value, sizeof(entry));
return ARRAY_OK; }
entry const *array_read(array const *a, size_t index) { if(index >= a->_private_size) return NULL;
return &a->_private_data[index]; }
int array_read_buf(array *a, size_t index, entry *value) { if(index >= a->_private_size) return ARRAY_OUT_OF_BOUNDS;
memcpy(value, &a->_private_data[index], sizeof(entry));
return ARRAY_OK; }
size_t array_size(array const *a) { return a->_private_size; }
int array_resize(array *a, size_t sz) { return realloc(a->_private_data, sz * sizeof(entry)) ? ARRAY_OK : ARRAY_ALLOCATION_FAILURE; }
|
Wobei du da natürlich noch ein bisschen Fehlerbehandlung reinsetzen solltest, für den Fall, dass malloc fehlschlägt oder so. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 18.04.2005 um 18:20 Uhr von 0xdeadbeef editiert. |