Skip to content

Commit bae9cfd

Browse files
committed
Finished implementation, need to write tests.
1 parent 39f1a82 commit bae9cfd

File tree

5 files changed

+282
-118
lines changed

5 files changed

+282
-118
lines changed

.vscode/settings.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
{
22
"files.associations": {
33
"*.nwdl": "properties",
4-
"string.h": "c"
4+
"string.h": "c",
5+
"noodle.h": "c",
6+
"stdbool.h": "c"
57
},
68
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
79
}

Examples/Sandbox/main.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <assert.h>
12
#include <stdio.h>
23

34
#include "noodle.h"
@@ -47,7 +48,21 @@ int main(int argc, const char* argv[])
4748
{
4849
char pErrorBuffer[256] = {0};
4950

50-
noodleParse(pContent, pErrorBuffer, sizeof(pErrorBuffer) / sizeof(pErrorBuffer[0]));
51+
NoodleGroup_t* pConfig = noodleParse(pContent, pErrorBuffer, sizeof(pErrorBuffer) / sizeof(pErrorBuffer[0]));
52+
if (!pConfig)
53+
{
54+
return 1;
55+
}
5156

52-
printf("%s\n", pContent);
57+
NoodleGroup_t* pWindowConfig = noodleGroupFrom(pConfig, "window");
58+
assert(pWindowConfig);
59+
60+
61+
int monitor = noodleIntFrom(pWindowConfig, "monitor", NULL);
62+
const NoodleArray_t* pSomeValue = noodleArrayFrom(pWindowConfig, "someValue");
63+
assert(pSomeValue);
64+
65+
int val_1 = noodleIntAt(pSomeValue, 1);
66+
67+
5368
}

Include/noodle.h

Lines changed: 49 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,35 @@
55

66
#ifndef NOODLE_NO_STDBOOL_H
77
#include <stdbool.h>
8-
9-
#ifndef NOODLE_BOOL
10-
#define NOODLE_BOOL bool
11-
#endif
12-
13-
#ifndef NOODLE_TRUE
14-
#define NOODLE_TRUE true
15-
#endif
16-
#ifndef NOODLE_FALSE
17-
#define NOODLE_FALSE false
18-
#endif
198
#endif
209

2110
#ifndef NOODLE_NO_STDLIB_H
2211
#include <stdlib.h>
12+
#endif
2313

24-
#ifndef NOODLE_MALLOC
25-
#define NOODLE_MALLOC(size) malloc(size)
26-
#endif
27-
#ifndef NOODLE_FREE
28-
#define NOODLE_FREE(ptr) free(ptr)
29-
#endif
14+
#ifndef NOODLE_BOOL
15+
#define NOODLE_BOOL bool
16+
#endif
3017

31-
#ifndef NOODLE_MEMCPY
32-
#define NOODLE_MEMCPY(dest, src, size) memcpy(dest, src, size)
33-
#endif
18+
#ifndef NOODLE_TRUE
19+
#define NOODLE_TRUE true
3420
#endif
3521

36-
#ifndef NOODLE_NO_STRING_H
37-
#include <string.h>
22+
#ifndef NOODLE_FALSE
23+
#define NOODLE_FALSE false
3824
#endif
3925

26+
#ifndef NOODLE_NULLABLE
27+
#define NOODLE_NULLABLE
28+
#endif
4029

41-
typedef enum NoodleResult_t
42-
{
43-
NOODLE_SUCCESS,
44-
NOODLE_MEMORY_ALLOC_ERROR,
45-
NOODLE_UNEXPECTED_TOKEN_ERROR,
46-
} NoodleResult_t;
30+
#ifndef NOODLE_MALLOC
31+
#define NOODLE_MALLOC(size) malloc(size)
32+
#endif
33+
34+
#ifndef NOODLE_FREE
35+
#define NOODLE_FREE(ptr) free(ptr)
36+
#endif
4737

4838
typedef enum NoodleType_t
4939
{
@@ -55,24 +45,42 @@ typedef enum NoodleType_t
5545
NOODLE_TYPE_STRING,
5646
} NoodleType_t;
5747

48+
49+
// Every noodle type can be cast to Noodle_t to get types and names
5850
typedef struct Noodle_t Noodle_t;
5951
typedef struct NoodleGroup_t NoodleGroup_t;
6052
typedef struct NoodleArray_t NoodleArray_t;
6153
typedef struct NoodleValue_t NoodleValue_t;
6254

63-
NoodleGroup_t* noodleParse(const char* pContent, char* pErrorBuffer, size_t bufferSize);
64-
NoodleGroup_t* noodleParseFromFile(const char* pPath, char* pErrorBuffer, size_t bufferSize);
65-
NoodleGroup_t* noodleGroupFrom(const NoodleGroup_t* group, const char* name);
66-
int noodleIntFrom(const NoodleGroup_t* group, const char* name);
67-
float noodleFloatFrom(const NoodleGroup_t* group, const char* name);
68-
NOODLE_BOOL noodleBoolFrom(const NoodleGroup_t* group, const char* name);
69-
const char* noodleStringFrom(const NoodleGroup_t* group, const char* name);
70-
const NoodleArray_t* noodleArrayFrom(const NoodleGroup_t* group, const char* name);
55+
typedef struct Noodle_t
56+
{
57+
NoodleType_t type;
58+
NoodleGroup_t* pParent;
59+
char* pName; // Must be freed
60+
} Noodle_t;
61+
62+
63+
typedef bool (* NoodleForeachInGroupFunctionCallback)(Noodle_t* pNoodle); // Return false to break
64+
typedef bool (* NoodleForeachInArrayFunctionCallback)(Noodle_t* pNoodle); // Return false to break
65+
66+
NoodleGroup_t* noodleParse(const char* pContent, char* NOODLE_NULLABLE pErrorBuffer, size_t NOODLE_NULLABLE bufferSize);
67+
NoodleGroup_t* noodleParseFromFile(const char* pPath, char* NOODLE_NULLABLE pErrorBuffer, size_t NOODLE_NULLABLE bufferSize);
68+
Noodle_t* noodleFrom(const NoodleGroup_t* pGroup, const char* pName);
69+
NoodleGroup_t* noodleGroupFrom(const NoodleGroup_t* pGroup, const char* pName);
70+
int noodleIntFrom(const NoodleGroup_t* pGroup, const char* pName, NOODLE_BOOL* NOODLE_NULLABLE pSucceeded);
71+
float noodleFloatFrom(const NoodleGroup_t* pGroup, const char* pName, NOODLE_BOOL* NOODLE_NULLABLE pSucceeded);
72+
NOODLE_BOOL noodleBoolFrom(const NoodleGroup_t* pGroup, const char* pName, NOODLE_BOOL* NOODLE_NULLABLE pSucceeded);
73+
const char* noodleStringFrom(const NoodleGroup_t* pGroup, const char* pName, NOODLE_BOOL* NOODLE_NULLABLE pSucceeded);
74+
const NoodleArray_t* noodleArrayFrom(const NoodleGroup_t* pGroup, const char* pName);
7175
size_t noodleCount(const Noodle_t* noodle);
72-
int noodleIntAt(const NoodleArray_t* array, size_t index);
73-
float noodleFloatAt(const NoodleArray_t* array, size_t index);
74-
NOODLE_BOOL noodleBoolAt(const NoodleArray_t* array, size_t index);
75-
const char* noodleStringAt(const NoodleArray_t* array, size_t index);
76-
void noodleFree(Noodle_t* noodle);
76+
int noodleIntAt(const NoodleArray_t* pArray, size_t index);
77+
float noodleFloatAt(const NoodleArray_t* pArray, size_t index);
78+
NOODLE_BOOL noodleBoolAt(const NoodleArray_t* pArray, size_t index);
79+
const char* noodleStringAt(const NoodleArray_t* pArray, size_t index);
80+
void noodleFree(Noodle_t* NOODLE_NULLABLE noodle);
81+
82+
bool noodleHas(const NoodleGroup_t* pGroup, const char* pName);
83+
void noodleForeachInGroup(NoodleGroup_t* pGroup, NoodleForeachInGroupFunctionCallback callback);
84+
void noodleForeachInArray(NoodleArray_t* pArray, NoodleForeachInArrayFunctionCallback callback);
7785

7886
#endif // NOODLE_PARSER_H

Include/noodle_em.h

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)