7d885ab4170329d915b6301c048d0f5eb13d2379 tdreszer Mon Aug 1 13:05:27 2011 -0700 Backtracking on tdbExtras. I don't think it should be defined for every tdb, but only defined when needed. I do think there should be getters and setters, because of create on use and because encapsulating object knowledge/assumptions makes sense long term. diff --git src/hg/lib/trackDbCustom.c src/hg/lib/trackDbCustom.c index 5a99219..f93a216 100644 --- src/hg/lib/trackDbCustom.c +++ src/hg/lib/trackDbCustom.c @@ -155,32 +155,30 @@ if (type != NULL) bt->type = cloneString(type); if (trackDbSetting(bt, "spectrum") != NULL || trackDbSetting(bt, "useScore") != NULL) bt->useScore = TRUE; char *canPack = trackDbSetting(bt, "canPack"); if (canPack != NULL) bt->canPack = !(sameString(canPack, "0") || sameString(canPack, "off")); char *chromosomes = trackDbSetting(bt, "chromosomes"); if (chromosomes != NULL) sqlStringDynamicArray(chromosomes, &bt->restrictList, &bt->restrictCount); if (trackDbSetting(bt, "private") != NULL) bt->private = TRUE; char *grp = trackDbSetting(bt, "group"); if (grp != NULL) bt->grp = cloneString(grp); -if (bt->tdbExtras == NULL) - bt->tdbExtras = tdbExtrasNew(); } static void replaceStr(char **varPtr, char *val) /** replace string in varPtr with val */ { freeMem(*varPtr); *varPtr = cloneString(val); } static void overrideField(struct trackDb *td, struct trackDb *overTd, char *var) /* Update override one field from override. */ { if (sameString(var, "track") || sameString(var, "release")) return; @@ -1156,34 +1154,117 @@ else { tag = "parent"; } updated = TRUE; } #endif /* SOON */ if (updated) { *pTag = cloneString(tag); *pVal = cloneString(val); } return updated; } -struct tdbExtras *tdbExtrasNew() +static struct tdbExtras *tdbExtrasNew() // Return a new empty tdbExtras { struct tdbExtras *extras; AllocVar(extras); // Note no need for extras = AllocVar(extras) // Initialize any values that need an "empty" state extras->fourState = TDB_EXTRAS_EMPTY_STATE; // I guess it is 5 state! // pointers are NULL and booleans are FALSE by default return extras; } void tdbExtrasFree(struct tdbExtras **pTdbExtras) // Frees the tdbExtras structure { // Developer, add intelligent routines to free structures // NOTE: For now just leak contents, because complex structs would also leak freez(pTdbExtras); } +static struct tdbExtras *tdbExtrasGet(struct trackDb *tdb) +// Returns tdbExtras struct, initializing if needed. +{ +if (tdb->tdbExtras == NULL) // Temporarily add this back in because Angie see asserts popping. + tdb->tdbExtras = tdbExtrasNew(); +return tdb->tdbExtras; +} + +int tdbExtrasFourState(struct trackDb *tdb) +// Returns subtrack four state if known, else TDB_EXTRAS_EMPTY_STATE +{ +struct tdbExtras *extras = tdb->tdbExtras; +if (extras) + return extras->fourState; +return TDB_EXTRAS_EMPTY_STATE; +} + +void tdbExtrasFourStateSet(struct trackDb *tdb,int fourState) +// Sets subtrack four state +{ +tdbExtrasGet(tdb)->fourState = fourState; +} + +boolean tdbExtrasReshapedComposite(struct trackDb *tdb) +// Returns TRUE if composite has been declared as reshaped, else FALSE. +{ +struct tdbExtras *extras = tdb->tdbExtras; +if (extras) + return extras->reshapedComposite; +return FALSE; +} + +void tdbExtrasReshapedCompositeSet(struct trackDb *tdb) +// Declares that the composite has been reshaped. +{ +tdbExtrasGet(tdb)->reshapedComposite = TRUE; +} + +struct mdbObj *tdbExtrasMdb(struct trackDb *tdb) +// Returns mdb metadata if already known, else NULL +{ +struct tdbExtras *extras = tdb->tdbExtras; +if (extras) + return extras->mdb; +return NULL; +} + +void tdbExtrasMdbSet(struct trackDb *tdb,struct mdbObj *mdb) +// Sets the mdb metadata structure for later retrieval. +{ +tdbExtrasGet(tdb)->mdb = mdb; +} + +struct _membersForAll *tdbExtrasMembersForAll(struct trackDb *tdb) +// Returns composite view/dimension members for all, else NULL. +{ +struct tdbExtras *extras = tdb->tdbExtras; +if (extras) + return extras->membersForAll; +return NULL; +} + +void tdbExtrasMembersForAllSet(struct trackDb *tdb, struct _membersForAll *membersForAll) +// Sets the composite view/dimensions members for all for later retrieval. +{ +tdbExtrasGet(tdb)->membersForAll = membersForAll; +} + +struct _membership *tdbExtrasMembership(struct trackDb *tdb) +// Returns subtrack membership if already known, else NULL +{ +struct tdbExtras *extras = tdb->tdbExtras; +if (extras) + return extras->membership; +return tdbExtrasGet(tdb)->membership; +} + +void tdbExtrasMembershipSet(struct trackDb *tdb,struct _membership *membership) +// Sets the subtrack membership for later retrieval. +{ +tdbExtrasGet(tdb)->membership = membership; +} +