now copying the language correctly, at least I hope

This commit is contained in:
herbglitch 2024-11-14 00:07:56 -07:00
parent 2d70208978
commit 5f34dbfeca
5 changed files with 44 additions and 22 deletions

View file

@ -25,13 +25,25 @@ void ARC_Parser_Create(ARC_Parser **parser, ARC_Array *language, ARC_Parser_Init
(*parser)->language.size = language->size;
(*parser)->language.data = malloc(sizeof(ARC_ParserLanguageTag) * language->size);
memcpy((*parser)->language.data, language->data, sizeof(ARC_ParserLanguageTag) * language->size);
for(uint32_t index = 0; index < language->size; index++){
ARC_ParserLanguageTag *languageTag = ((ARC_ParserLanguageTag *)language->data) + index;
ARC_ParserLanguageTag *currentTag = ((ARC_ParserLanguageTag *)(*parser)->language.data) + index;
//copy the currentTag's tokenOrTags
memcpy(currentTag->tokensOrTags, languageTag->tokensOrTags, languageTag->tokensOrTagsSize);
//copy the language tag into the current tag
currentTag->tagId = languageTag->tagId;
currentTag->tokensOrTagsSize = languageTag->tokensOrTagsSize;
//create place to store tokens or tags
currentTag->tokensOrTags = (uint32_t **)malloc(sizeof(uint32_t *) * languageTag->tokensOrTagsSize);
//copy each or section into the tokensOrTags
for(uint32_t orIndex = 0; orIndex < languageTag->tokensOrTagsSize; orIndex++){
currentTag->tokensOrTags[orIndex] = (uint32_t *)malloc(sizeof(uint32_t) * (languageTag->tokensOrTags[orIndex][0] + 1));
for(uint32_t tokenOrTagIndex = 0; tokenOrTagIndex < languageTag->tokensOrTags[orIndex][0] + 1; tokenOrTagIndex++){
currentTag->tokensOrTags[orIndex][tokenOrTagIndex] = languageTag->tokensOrTags[orIndex][tokenOrTagIndex];
}
}
}
}
@ -49,6 +61,12 @@ void ARC_Parser_Destroy(ARC_Parser *parser){
//clear all the copied token or tags from memory
for(uint32_t index = 0; index < parser->language.size; index++){
ARC_ParserLanguageTag *currentTag = ((ARC_ParserLanguageTag *)parser->language.data) + index;
//free the orIndex vlues
for(uint32_t orIndex = 0; orIndex < currentTag->tokensOrTagsSize; orIndex++){
free(currentTag->tokensOrTags[orIndex]);
}
free(currentTag->tokensOrTags);
}