Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "label.h"
- #include <stdlib.h>
- #include <string.h>
- #include <stdint.h>
- static void pushLabelDef(labelDefArr_t *defs, char *name, uint16_t cmdNo)
- {
- size_t num = defs->num++;
- if(num == 0)
- defs->ptr = malloc(sizeof(labelDef_t));
- else if(!(num & (num - 1)))
- defs->ptr = realloc(defs->ptr, (2 * num * sizeof(labelDef_t)));
- strcpy(defs->ptr[num].name, name);
- defs->ptr[num].cmdNo = cmdNo;
- }
- static uint16_t findOrPushLabelDef(labelDefArr_t *defs, char *name)
- {
- uint16_t num = defs->num;
- for(size_t i = 0; i < num; i++)
- if(!strcmp(defs->ptr[i].name, name))
- return i;
- pushLabelDef(defs, name, 0);
- return num;
- }
- static void pushLabelUse(labelUseArr_t *uses, uint16_t cmdNo, uint16_t labelNo)
- {
- size_t num = uses->num++;
- if(num == 0)
- uses->ptr = malloc(sizeof(labelUse_t));
- else if(!(num & (num - 1)))
- uses->ptr = realloc(uses->ptr, (2 * num * sizeof(labelUse_t)));
- uses->ptr[num].cmdNo = cmdNo;
- uses->ptr[num].labelNo = labelNo;
- }
- void addLabelDef(labelMapping_t *mapping, char *name, uint16_t cmdNo)
- {
- uint16_t defNo = findOrPushLabelDef(&mapping->defs, name);
- mapping->defs.ptr[defNo].cmdNo = cmdNo;
- }
- void addLabelUse(labelMapping_t *mapping, char *name, uint16_t cmdNo)
- {
- uint16_t defNo = findOrPushLabelDef(&mapping->defs, name);
- pushLabelUse(&mapping->uses, cmdNo, defNo);
- }
Advertisement
Add Comment
Please, Sign In to add comment