3dd6cd1eed6c6f52a3506dd53d1f4a81a6e4532b kent Tue Aug 6 12:09:34 2013 -0700 Added basesInSample output. diff --git src/lib/raToStruct.c src/lib/raToStruct.c new file mode 100644 index 0000000..dd8d579 --- /dev/null +++ src/lib/raToStruct.c @@ -0,0 +1,63 @@ + +struct raToStructReader *raToStructReaderNew(char *name, int fieldCount, char **fields, + int requiredFieldCount, char **requiredFields) +/* Create a helper object for parsing an ra file into a C structure. This structure will + * contain */ +{ +struct raToStructReader *reader; +AllocVar(reader); +reader->name = cloneString(name); +reader->fieldCount = fieldCount; +reader->fields = fields; +reader->requiredFieldCount = requiredFieldCount; +reader->requiredFields = requiredFields; +struct hash *fieldIds = reader->fieldIds = hashNew(4); +int i; +for (i=0; i 0) + { + AllocArray(reader->requiredFieldIds, requiredFieldCount); + for (i=0; irequiredFieldIds[i] = ptToInt(hel->val); + } + } +AllocArray(reader->fieldsObserved, fieldCount); +return reader; +} + +void raToStructReaderFree(struct raToStructReader **pReader) +/* Free up memory associated with reader. */ +{ +struct raToStructReader *reader = *pReader; +if (reader != NULL) + { + freeMem(reader->name); + freeHash(&reader->fieldIds); + freeMem(reader->fieldIds); + freeMem(reader->fieldsObserved); + freez(pReader); + } +} + +void raToStructReaderCheckRequiredFields(struct raToStructReader *reader, struct lineFile *lf) +/* Make sure that all required files have been seen in the stanza we just parsed. */ +{ +int *requiredFieldIds = reader->requiredFieldIds; +bool *fieldsObserved = reader->fieldsObserved; +int i; +for (i=0; irequiredFieldCount; ++i) + { + if (!fieldsObserved[requiredFieldIds[i]]) + { + errAbort("Required field %s not found line %d of %s", reader->requiredFields[i], + lf->lineIx, lf->fileName); + } + } +} +