Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stddef.h>
  4.  
  5. #define MAX_DATA_COUNT 32
  6.  
  7. typedef struct {
  8.     int foo;
  9.     char bar[10];
  10.     float baz;
  11. } my_data_t;
  12.  
  13. struct {
  14.     my_data_t data;
  15.     uint8_t used;
  16. } my_data_vector[MAX_DATA_COUNT] = {0};
  17.  
  18. size_t find_empty_data_index() {
  19.     size_t i;
  20.     for (i = 0; i < MAX_DATA_COUNT; i++) {
  21.         if (my_data_vector[i].used == 0) {
  22.             break;
  23.         }
  24.     }
  25.     return i;
  26. }
  27.  
  28. size_t find_data_index(my_data_t* data) {
  29.     size_t i;
  30.     for (i = 0; i < MAX_DATA_COUNT; i++) {
  31.         if (&my_data_vector[i].data == data) {
  32.             break;
  33.         }
  34.     }
  35.     return i;
  36. }
  37.  
  38. my_data_t* data_create() {
  39.     size_t index = find_empty_data_index();
  40.    
  41.     if (index == MAX_DATA_COUNT) {
  42.         return NULL;
  43.     }
  44.  
  45.     my_data_vector[index].used = 1;
  46.     return &my_data_vector[index].data;
  47. }
  48.  
  49. void data_delete(my_data_t* data) {
  50.     size_t index = find_data_index(data);
  51.  
  52.     if (index == MAX_DATA_COUNT) {
  53.         return;
  54.     }
  55.  
  56.     my_data_vector[index].used = 0;
  57. }
  58.  
  59. int main() {
  60.     size_t i;
  61.     my_data_t* data1 = data_create();
  62.     for (i = 0; i <= 40; i++) {
  63.         printf("%d\n", find_empty_data_index());
  64.         my_data_t* data = data_create();
  65.         printf("%d - %p\n", find_data_index(data), data);
  66.     }
  67.  
  68.     data_delete(data1);
  69.  
  70.     for (i = 0; i <= 40; i++) {
  71.         printf("%d\n", find_empty_data_index());
  72.         my_data_t* data = data_create();
  73.         printf("%d - %p\n", find_data_index(data), data);
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement