Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- #include <stddef.h>
- #define MAX_DATA_COUNT 32
- typedef struct {
- int foo;
- char bar[10];
- float baz;
- } my_data_t;
- struct {
- my_data_t data;
- uint8_t used;
- } my_data_vector[MAX_DATA_COUNT] = {0};
- size_t find_empty_data_index() {
- size_t i;
- for (i = 0; i < MAX_DATA_COUNT; i++) {
- if (my_data_vector[i].used == 0) {
- break;
- }
- }
- return i;
- }
- size_t find_data_index(my_data_t* data) {
- size_t i;
- for (i = 0; i < MAX_DATA_COUNT; i++) {
- if (&my_data_vector[i].data == data) {
- break;
- }
- }
- return i;
- }
- my_data_t* data_create() {
- size_t index = find_empty_data_index();
- if (index == MAX_DATA_COUNT) {
- return NULL;
- }
- my_data_vector[index].used = 1;
- return &my_data_vector[index].data;
- }
- void data_delete(my_data_t* data) {
- size_t index = find_data_index(data);
- if (index == MAX_DATA_COUNT) {
- return;
- }
- my_data_vector[index].used = 0;
- }
- int main() {
- size_t i;
- my_data_t* data1 = data_create();
- for (i = 0; i <= 40; i++) {
- printf("%d\n", find_empty_data_index());
- my_data_t* data = data_create();
- printf("%d - %p\n", find_data_index(data), data);
- }
- data_delete(data1);
- for (i = 0; i <= 40; i++) {
- printf("%d\n", find_empty_data_index());
- my_data_t* data = data_create();
- printf("%d - %p\n", find_data_index(data), data);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement