2007-06-11 21:36:57 +00:00
|
|
|
#include <stasis/transactional.h>
|
2005-03-10 03:19:04 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
typedef struct {
|
|
|
|
byte * keyArray;
|
|
|
|
byte * valueArray;
|
|
|
|
unsigned int element;
|
|
|
|
unsigned int keySize;
|
|
|
|
unsigned int valueSize;
|
|
|
|
unsigned int elementCount;
|
|
|
|
} array_iterator_t;
|
|
|
|
|
|
|
|
|
|
|
|
lladdIterator_t * arrayIterator(byte * keyArray, unsigned int keySize,
|
|
|
|
byte * valueArray, unsigned int valueSize,
|
|
|
|
unsigned int elementCount) {
|
|
|
|
lladdIterator_t * ret = malloc(sizeof(lladdIterator_t));
|
|
|
|
ret->type = ARRAY_ITERATOR;
|
|
|
|
array_iterator_t * it = ret->impl = malloc(sizeof(array_iterator_t));
|
|
|
|
|
|
|
|
it->keyArray = keyArray;
|
|
|
|
it->valueArray = valueArray;
|
|
|
|
|
|
|
|
it->element = -1;
|
|
|
|
|
|
|
|
it->valueSize = valueSize;
|
|
|
|
it->keySize = keySize;
|
|
|
|
it->elementCount = elementCount;
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
void arrayIterator_close(int xid, void * impl) {
|
|
|
|
free(impl);
|
|
|
|
}
|
|
|
|
|
|
|
|
int arrayIterator_next (int xid, void * impl) {
|
|
|
|
array_iterator_t * it = (array_iterator_t *) impl;
|
|
|
|
it->element++;
|
|
|
|
return it->element < it->elementCount;
|
|
|
|
}
|
|
|
|
int arrayIterator_key (int xid, void * impl, byte ** key) {
|
|
|
|
array_iterator_t * it = (array_iterator_t *) impl;
|
|
|
|
// unsigned int offset = it->element * (it->valueSize + it->keySize);
|
|
|
|
*key = &(it->keyArray[it->element * it->keySize]);
|
|
|
|
// printf("elt = %d, s = %d, k = %x\n", it->element, it->keySize, *key);
|
|
|
|
return it->keySize;
|
|
|
|
}
|
|
|
|
int arrayIterator_value(int xid, void * impl, byte ** value) {
|
|
|
|
array_iterator_t * it = (array_iterator_t *) impl;
|
|
|
|
// unsigned int offset = it->element * (it->valueSize + it->keySize);
|
|
|
|
*value = &(it->valueArray[it->element * it->valueSize]);
|
|
|
|
// printf("elt = %d, s = %d, v = %x\n", it->element, it->valueSize, *value);
|
|
|
|
return it->valueSize;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
byte * array;
|
|
|
|
int element;
|
|
|
|
int elementSize;
|
|
|
|
int elementCount;
|
|
|
|
} pointer_array_iterator_t;
|
|
|
|
|
|
|
|
|
|
|
|
/*lladdIterator_t * ptrArray_iterator(byte * array, int elementCount) {
|
|
|
|
|
|
|
|
}*/
|