mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 12:00:18 +00:00
some fix
This commit is contained in:
parent
e50761364d
commit
0ffacbbbe8
17
include/pocketpy/common/smallmap.h
Normal file
17
include/pocketpy/common/smallmap.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "pocketpy/common/vector.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SMALLMAP_T__HEADER
|
||||||
|
#define K uint16_t
|
||||||
|
#define V int
|
||||||
|
#include "pocketpy/xmacros/smallmap.h"
|
||||||
|
#undef SMALLMAP_T__HEADER
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -26,9 +26,7 @@ typedef struct {
|
|||||||
V value;
|
V value;
|
||||||
} KV;
|
} KV;
|
||||||
|
|
||||||
typedef struct{
|
typedef c11_vector SMALLMAP;
|
||||||
c11_vector entries;
|
|
||||||
} SMALLMAP;
|
|
||||||
|
|
||||||
void SMALLMAP_METHOD(ctor)(SMALLMAP* self);
|
void SMALLMAP_METHOD(ctor)(SMALLMAP* self);
|
||||||
void SMALLMAP_METHOD(dtor)(SMALLMAP* self);
|
void SMALLMAP_METHOD(dtor)(SMALLMAP* self);
|
||||||
@ -43,30 +41,30 @@ void SMALLMAP_METHOD(clear)(SMALLMAP* self);
|
|||||||
/* Implementation */
|
/* Implementation */
|
||||||
|
|
||||||
void SMALLMAP_METHOD(ctor)(SMALLMAP* self) {
|
void SMALLMAP_METHOD(ctor)(SMALLMAP* self) {
|
||||||
c11_vector__ctor(&self->entries, sizeof(KV));
|
c11_vector__ctor(self, sizeof(KV));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SMALLMAP_METHOD(dtor)(SMALLMAP* self) {
|
void SMALLMAP_METHOD(dtor)(SMALLMAP* self) {
|
||||||
c11_vector__dtor(&self->entries);
|
c11_vector__dtor(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SMALLMAP_METHOD(set)(SMALLMAP* self, K key, V value) {
|
void SMALLMAP_METHOD(set)(SMALLMAP* self, K key, V value) {
|
||||||
int index;
|
int index;
|
||||||
c11__lower_bound(KV, self->entries.data, self->entries.count, key, less, &index);
|
c11__lower_bound(KV, self->data, self->count, key, less, &index);
|
||||||
KV* it = c11__at(KV, &self->entries, index);
|
KV* it = c11__at(KV, self, index);
|
||||||
if(index != self->entries.count && it->key == key) {
|
if(index != self->count && it->key == key) {
|
||||||
it->value = value;
|
it->value = value;
|
||||||
} else {
|
} else {
|
||||||
KV kv = {key, value};
|
KV kv = {key, value};
|
||||||
c11_vector__insert(KV, &self->entries, index, kv);
|
c11_vector__insert(KV, self, index, kv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
V* SMALLMAP_METHOD(try_get)(SMALLMAP* self, K key) {
|
V* SMALLMAP_METHOD(try_get)(SMALLMAP* self, K key) {
|
||||||
int index;
|
int index;
|
||||||
c11__lower_bound(KV, self->entries.data, self->entries.count, key, less, &index);
|
c11__lower_bound(KV, self->data, self->count, key, less, &index);
|
||||||
KV* it = c11__at(KV, &self->entries, index);
|
KV* it = c11__at(KV, self, index);
|
||||||
if(index != self->entries.count && it->key == key) {
|
if(index != self->count && it->key == key) {
|
||||||
return &it->value;
|
return &it->value;
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -84,17 +82,17 @@ bool SMALLMAP_METHOD(contains)(SMALLMAP* self, K key) {
|
|||||||
|
|
||||||
bool SMALLMAP_METHOD(del)(SMALLMAP* self, K key) {
|
bool SMALLMAP_METHOD(del)(SMALLMAP* self, K key) {
|
||||||
int index;
|
int index;
|
||||||
c11__lower_bound(KV, self->entries.data, self->entries.count, key, less, &index);
|
c11__lower_bound(KV, self->data, self->count, key, less, &index);
|
||||||
KV* it = c11__at(KV, &self->entries, index);
|
KV* it = c11__at(KV, self, index);
|
||||||
if(index != self->entries.count && it->key == key) {
|
if(index != self->count && it->key == key) {
|
||||||
c11_vector__erase(KV, &self->entries, index);
|
c11_vector__erase(KV, self, index);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SMALLMAP_METHOD(clear)(SMALLMAP* self) {
|
void SMALLMAP_METHOD(clear)(SMALLMAP* self) {
|
||||||
c11_vector__clear(&self->entries);
|
c11_vector__clear(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user