Create expression struct and memory pool
This commit is contained in:
27
lib/include/expression.h
Normal file
27
lib/include/expression.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#ifndef EXPRESSION_H
|
||||||
|
#define EXPRESSION_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
OPERATOR_ADD,
|
||||||
|
OPERATOR_SUBTRACT,
|
||||||
|
OPERATOR_MULTIPLY,
|
||||||
|
OPERATOR_DIVIDE,
|
||||||
|
} operator_t;
|
||||||
|
|
||||||
|
struct _expression_t;
|
||||||
|
typedef struct {
|
||||||
|
operator_t operator;
|
||||||
|
const struct _expression_t *operands[2];
|
||||||
|
} application_t;
|
||||||
|
|
||||||
|
typedef struct _expression_t {
|
||||||
|
bool is_number;
|
||||||
|
union {
|
||||||
|
application_t application;
|
||||||
|
int number;
|
||||||
|
};
|
||||||
|
} expression_t;
|
||||||
|
|
||||||
|
#endif
|
||||||
16
lib/include/memory_pool.h
Normal file
16
lib/include/memory_pool.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef MEMORY_POOL_H
|
||||||
|
#define MEMORY_POOL_H
|
||||||
|
|
||||||
|
#include "expression.h"
|
||||||
|
|
||||||
|
#define MEMORY_POOL_SIZE 128U
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
expression_t buffer[MEMORY_POOL_SIZE];
|
||||||
|
expression_t *free_pointer;
|
||||||
|
} memory_pool_t;
|
||||||
|
|
||||||
|
void init_memory_pool(memory_pool_t *pool);
|
||||||
|
expression_t *allocate_expression(memory_pool_t *pool);
|
||||||
|
|
||||||
|
#endif
|
||||||
15
lib/memory_pool.c
Normal file
15
lib/memory_pool.c
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#include "memory_pool.h"
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
void init_memory_pool(memory_pool_t *pool)
|
||||||
|
{
|
||||||
|
pool->free_pointer = &pool->buffer[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
expression_t *allocate_expression(memory_pool_t *pool)
|
||||||
|
{
|
||||||
|
if (pool->free_pointer > pool->buffer + MEMORY_POOL_SIZE)
|
||||||
|
return NULL;
|
||||||
|
return pool->free_pointer++;
|
||||||
|
}
|
||||||
@@ -2,12 +2,18 @@ cd "$(git rev-parse --show-toplevel)"
|
|||||||
|
|
||||||
CFLAGS="$CFLAGS -std=c11 -pedantic -Wall -Wextra"
|
CFLAGS="$CFLAGS -std=c11 -pedantic -Wall -Wextra"
|
||||||
CFLAGS="$CFLAGS -Og -ggdb"
|
CFLAGS="$CFLAGS -Og -ggdb"
|
||||||
|
CFLAGS="$CFLAGS -Ilib/include"
|
||||||
|
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
|
|
||||||
|
# Build library
|
||||||
|
clang $CFLAGS -c -o build/memory_pool.o lib/memory_pool.c
|
||||||
|
clang $CFLAGS -c -o build/reader.o lib/reader.c
|
||||||
|
ar -crs build/lib.a build/memory_pool.o build/reader.o
|
||||||
|
|
||||||
# Build tests
|
# Build tests
|
||||||
clang $CFLAGS -Itests -c -o build/testing.o tests/testing.c
|
clang $CFLAGS -Itests -c -o build/testing.o tests/testing.c
|
||||||
|
|
||||||
# Build application
|
# Build application
|
||||||
clang $CFLAGS -c -o build/main.o app/main.c
|
clang $CFLAGS -c -o build/main.o app/main.c
|
||||||
clang $CFLAGS -o build/infix-calculator build/main.o
|
clang $CFLAGS -o build/infix-calculator build/main.o build/lib.a
|
||||||
|
|||||||
Reference in New Issue
Block a user