Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- struct ArrayListImpl;
- typedef int LISTTYPE;
- typedef struct ArrayListImpl ArrayList;
- ArrayList* new_ArrayList(int iSize);
- void destroy(ArrayList* list);
- int indexOf(ArrayList* list, LISTTYPE element);
- void add(ArrayList* list, LISTTYPE element);
- void addBefore(ArrayList* list, int index, LISTTYPE element);
- void clear(ArrayList* list);
- _Bool contains(ArrayList* list, LISTTYPE element);
- _Bool removeEl(ArrayList* list, LISTTYPE element);
- void removeFrom(ArrayList* list, int index);
- void set(ArrayList* list, int index, LISTTYPE element);
- int size(ArrayList* list);
- void print(ArrayList* list);
- void printInfo(ArrayList* list);
- #include "arraylist.h"
- #include <stdlib.h>
- #include <stdio.h>
- struct ArrayListImpl
- {
- int size, buffer, origBuffer;
- LISTTYPE* data;
- };
- void incBuffer(ArrayList* list)
- {
- if (list->size == list->buffer)
- {
- list->buffer = (int)(list->buffer * 1.5 + 1);
- list->data = (LISTTYPE*)realloc(list->data, sizeof(LISTTYPE) * list->buffer);
- }
- }
- void decBuffer(ArrayList* list)
- {
- if (list->size < list->buffer / 2.5 && list->buffer > list->origBuffer)
- {
- list->buffer = max(list->origBuffer, list->buffer / 2);
- list->data=(LISTTYPE*)realloc(list->data, sizeof(LISTTYPE) * list->buffer);
- }
- }
- void resetBuffer(ArrayList* list)
- {
- list->buffer = list->origBuffer;
- list->data = (LISTTYPE*)realloc(list->data, sizeof(LISTTYPE) * list->buffer);
- }
- ArrayList* new_ArrayList(int buffer)
- {
- ArrayList* out;
- out = (ArrayList*)malloc(sizeof out);
- out->size = 0;
- out->buffer = buffer;
- out->origBuffer = buffer;
- out->data = (LISTTYPE*)malloc(buffer * sizeof(LISTTYPE));
- return out;
- }
- void destroy(ArrayList* list)
- {
- free(list->data);
- }
- int indexOf(ArrayList* list, LISTTYPE element)
- {
- for (int i = 0; i < list->size; ++i)
- {
- if (list->data[i] == element)
- return i;
- }
- return -1;
- }
- void add(ArrayList* list, LISTTYPE element)
- {
- incBuffer(list);
- list->data[list->size++] = element;
- }
- void addBefore(ArrayList* list, int from, LISTTYPE element)
- {
- if (from < 0 || from > list->size)
- {
- printf("[ERROR] Trying to add before %d. element of list having size %dn", from, list->size);
- return;
- }
- incBuffer(list);
- ++list->size;
- for (int i = list->size; i > from; --i)
- {
- list->data[i] = list->data[i - 1];
- }
- list->data[from] = element;
- }
- _Bool removeEl(ArrayList* list, LISTTYPE element)
- {
- int id = indexOf(list, element);
- if (id == -1)
- return 0;
- --list->size;
- for (int i = id; i < list->size; ++i)
- {
- list->data[i] = list->data[i + 1];
- }
- decBuffer(list);
- return 1;
- }
- void removeFrom(ArrayList* list, int index)
- {
- if (index < 0 || index >= list->size)
- {
- printf("[ERROR] Trying to remove %d. element of list having size %dn", index, list->size);
- return;
- }
- --list->size;
- for (int i = index; i < list->size; ++i)
- {
- list->data[i] = list->data[i + 1];
- }
- decBuffer(list);
- }
- _Bool contains(ArrayList* list, LISTTYPE element)
- {
- return indexOf(list, element) != -1;
- }
- int size(ArrayList* list)
- {
- return list->size;
- }
- void clear(ArrayList* list)
- {
- list->size = 0;
- resetBuffer(list);
- }
- void set(ArrayList* list, int index, LISTTYPE element)
- {
- if (index < 0 || index >= list->size)
- {
- printf("[ERROR] Trying to set %d. element of list having size %dn", index, list->size);
- return;
- }
- list->data[index] = element;
- }
- void print(ArrayList* list)
- {
- printf("--- ArrayList ---n");
- for (int i = 0; i < list->size; ++i)
- {
- printf("%d.: %dn", i, list->data[i]);
- }
- printf("n-------------------n");
- }
- void printInfo(ArrayList* list)
- {
- printf("--- ArrayList INFO ---nSize: %dnElement size : %dnBuffer : %dn", list->size, sizeof(int), list->buffer);
- }
Add Comment
Please, Sign In to add comment