79 uint32_t rowIndex = 0;
81 switch(childTagToken->
id){
89 void *data = (
void *)stringData;
124 uint32_t rowIndex = 0;
126 switch(childTagToken->
id){
159 if(data == NULL || userData == NULL){
197 csvData->
data = NULL;
200 uint32_t heightStartIndex = 0;
208 for(uint32_t headerIndex = 0; headerIndex < csvData->
width; headerIndex++){
214 for(uint32_t rowIndex = heightStartIndex; rowIndex <
ARC_Vector_GetSize(dataVector); rowIndex++){
219 if(currentRowVectorSize == 0){
228 if(csvData->
width != currentRowVectorSize){
236 csvData->
data = (
void ***)malloc(
sizeof(
void **) * csvData->
height);
239 uint32_t rowIndex = 0;
240 for(uint32_t y = 0; y < csvData->
height; y++, rowIndex++){
245 if(currentRowVectorSize == 0){
251 csvData->
data[y] = (
void **)malloc(
sizeof(
void *) * csvData->
width);
253 for(uint32_t x = 0; x < csvData->
width; x++){
260 *data = (
void *)csvData;
264 if(userData == NULL){
275 for(uint32_t x = 0; x < csvData->
width; x++){
282 for(uint32_t y = 0; y < csvData->
height; y++){
284 for(uint32_t x = 0; x < csvData->
width; x++){
289 free(csvData->
data[y]);
304 char *languageCString =
305 "<line> -> <data> NEWLINE <line> | <data> | NEWLINE <line> | LAMBDA\n"
306 "<data> -> <string> COMMA <data> | <string>\n"
307 "<string> -> <nonCommaChar> <string> | <nonCommaChar>\n"
308 "<nonCommaChar> -> CHAR_BEFORE_COMMA | CHAR_AFTER_COMMA\n";
315 userdata->
header = header;
void(* ARC_ParserCSV_DestroyTypeFn)(void *data)
TODO: write this.
void ARC_ParserCSV_InitLexerRulesFn(ARC_Lexer *lexer)
uint32_t ARC_ParserCSV_GetStringIdFn(ARC_String *string)
struct ARC_ParserCSVUserData ARC_ParserCSVUserData
void ARC_ParserCSVData_VectorDestroyVectorFn(void *data)
void ARC_ParserCSV_CreateAsParser(ARC_Parser **parser, ARC_Bool header, ARC_ParserCSV_CastTypeFn castTypeFn, ARC_ParserCSV_DestroyTypeFn destroyTypeFn)
creates a parser for the Parser Lang
void ARC_ParserCSVData_CreateFn(void **data, ARC_ParserTagToken *parsedData, void *userData)
void ARC_ParserCSVData_GetDataTag(ARC_Vector *dataVector, ARC_ParserTagToken *tagToken, ARC_ParserCSVUserData *userData)
void ARC_ParserCSVData_RunLineTag(ARC_Vector *dataVector, ARC_ParserTagToken *tagToken, ARC_ParserCSVUserData *userData)
void ARC_ParserCSVData_DestroyFn(void *data, ARC_Bool clear, void *userData)
#define ARC_PARSER_CSV_CHAR_AFTER_COMMA
void(* ARC_ParserCSV_CastTypeFn)(void **data, ARC_String *string)
a callback for the csv parser to use to cast that data the stored data
#define ARC_PARSER_CSV_CHAR_BEFORE_COMMA
#define ARC_PARSER_CSV_CHAR_COMMA
#define ARC_PARSER_CSV_DATA
#define ARC_PARSER_CSV_STRING
#define ARC_PARSER_CSV_LINE
#define ARC_PARSER_CSV_CHAR_NEWLINE
#define ARC_PARSER_CSV_NON_COMMA_CHAR
void ARC_ParserData_HelperRecurseStringAdd(ARC_String **data, ARC_ParserTagToken *tagToken)
recurses through a tag token adding token strings to a main string
void ARC_Lexer_RegisterTokenRule(ARC_Lexer *lexer, ARC_LexerTokenRule tokenRule)
adds a token rule to a lexer
ARC_LexerTokenRule ARC_LexerTokenRule_CreateAndReturnMatchCharRule(uint32_t id, char character)
creates a ARC_LexerTokenRule with a given id and character
ARC_LexerTokenRule ARC_LexerTokenRule_CreateAndReturnMatchCharOrBetween(uint32_t id, char start, char end)
creates a ARC_LexerTokenRule with a given id and character range
void ARC_Parser_CreateFromString(ARC_Parser **parser, ARC_String *languageString, ARC_Parser_InitLexerRulesFn initLexerRulesFn, ARC_Parser_GetStringIdFn getStringIdFn, ARC_ParserData_CreateFn *createDataFn, ARC_ParserData_DestroyFn *destroyDataFn, void *userData)
creates an ARC_Parser type from a string
#define ARC_PARSER_TAG_LAMBDA
basic tag for letting the parser know it is ok to end
void(* ARC_ParserData_CreateFn)(void **data, ARC_ParserTagToken *parsedData, void *userData)
TODO: write this.
void(* ARC_ParserData_DestroyFn)(void *data, ARC_Bool clear, void *userData)
TODO: write this.
void ARC_String_CreateWithStrlen(ARC_String **string, char *data)
creates ARC_String type with strinlen
void ARC_String_Create(ARC_String **string, char *data, uint64_t length)
creates ARC_String type
ARC_Bool ARC_String_EqualsCStringWithStrlen(ARC_String *string, const char *cstring)
check if ARC_String and cstring match
void ARC_String_Destroy(ARC_String *string)
destroys ARC_String type
defines a csv data type, data is set by the callback passed in when createing a parserCSV as parser
ARC_ParserCSV_CastTypeFn castTypeFn
ARC_ParserCSV_DestroyTypeFn destroyTypeFn
a parser type used inside of the parser data create function
substring position within a string
void(* ARC_Vector_DestroyDataFn)(void *data)
a callback that cleans up memory when it is removed from the vector
uint32_t ARC_Vector_GetSize(ARC_Vector *vector)
gets the current size of an ARC_Vector as an unsigned 32 bit integer
void * ARC_Vector_Get(ARC_Vector *vector, uint32_t index)
gets an item from an ARC_Vector at a position index
void ARC_Vector_Add(ARC_Vector *vector, void *data)
adds an item to an ARC_Vector
void ARC_Vector_Destroy(ARC_Vector *vector)
destroys an ARC_Vector
void ARC_Vector_Create(ARC_Vector **vector, ARC_Vector_CompareDataFn *compareDataFn, ARC_Vector_DestroyDataFn *destroyDataFn)
creates an ARC_Vector which is an "expandable" array