Skip to content

Commit

Permalink
upgrading Array library with macro and function implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex230805 committed Oct 23, 2024
1 parent e6f8efc commit 0c0a836
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions lib/Array.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ typedef struct{
size_t nelem;
}Array;


#ifndef ARRAY_IMPLEMENTATION

#define array_new(Array_h) \
Array_h = (Array*)malloc(sizeof(Array));\
Array_h->arr = (TYPE*)malloc(sizeof(TYPE)*START_DIM);\
Expand Down Expand Up @@ -86,5 +89,83 @@ typedef struct{
DATA = buffer;\
}

#else
#include "./Array.h"

void array_new(Array* Array_h);
void array_push(Array* Array_h, TYPE DATA);
void array_pop(Array*Array_h,TYPE DATA);
void array_get(Array* Array_h, int POINTER,TYPE DATA);
void array_free(Array*Array_h);
void array_cpy(Array*Array_h, int POINTER, int SIZE,TYPE* DATA);
void array_realloc(Array*Array_h);


void array_new(Array* Array_h){
Array_h = (Array*)malloc(sizeof(Array));
Array_h->arr = (TYPE*)malloc(sizeof(TYPE)*START_DIM);
Array_h->size = START_DIM;
Array_h->pointer = 0;
Array_h->nelem = 0;
}

void array_push(Array* Array_h, TYPE DATA){
if(Array_h->pointer+1 > Array_h->size){
array_realloc(Array_h);
}
Array_h->arr[Array_h->pointer] = DATA;
Array_h->pointer += 1;
Array_h->nelem += 1;
}

void array_pop(Array*Array_h,TYPE DATA){
Array_h->pointer -= 1;
if(Array_h->pointer < 0){
Array_h->pointer = 0;
Array_h->nelem = 0;
}
DATA = Array_h->arr[Array_h->pointer];
Array_h->arr[Array_h->pointer] = 0;
Array_h->nelem -= 1;
}

void array_get(Array* Array_h, int POINTER,TYPE DATA){
if(POINTER >= 0 && POINTER <= Array_h->size){
DATA = Array_h->arr[POINTER];
}else{
DATA = (TYPE)-1;
}
}
void array_realloc(Array*Array_h){
TYPE* new_arr = (TYPE*)malloc(sizeof(TYPE)*Array_h->size*2);
for(int i=0;i<Array_h->nelem;i++){
new_arr[i] = Array_h->arr[i];
}
free(Array_h->arr);
Array_h->arr = new_arr;
Array_h->size = Array_h->size *2;
}

void array_free(Array*Array_h){
free(Array_h->arr);
Array_h->arr = 0;
free(Array_h);
Array_h = 0;
}


void array_cpy(Array*Array_h, int POINTER, int SIZE,TYPE* DATA){
if(POINTER >= 0 && POINTER <= Array_h->size){
TYPE* buffer = (TYPE*)malloc(sizeof(TYPE)*SIZE);
for(int i=0;i<SIZE;i++){
buffer[i] = Array_h->arr[POINTER+i];
}
DATA = buffer;
}
}


#endif


#endif

0 comments on commit 0c0a836

Please sign in to comment.