src/hg/hgTables/custom.c 1.39
1.39 2009/03/18 01:34:52 kent
Getting filters to work on bigBed. Next up - intersections!
Index: src/hg/hgTables/custom.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTables/custom.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -b -B -U 4 -r1.38 -r1.39
--- src/hg/hgTables/custom.c 17 Mar 2009 17:24:51 -0000 1.38
+++ src/hg/hgTables/custom.c 18 Mar 2009 01:34:52 -0000 1.39
@@ -329,137 +329,8 @@
}
fprintf(f, "\n");
}
-static void cgiToCharFilter(char *dd, char *pat, enum charFilterType *retCft,
- char **retVals, boolean *retInv)
-/* Given a "does/doesn't" and a (list of) literal chars from CGI, fill in
- * retCft, retVals and retInv to make a filter. */
-{
-char *vals, *ptrs[32];
-int numWords;
-int i;
-
-assert(retCft != NULL);
-assert(retVals != NULL);
-assert(retInv != NULL);
-assert(sameString(dd, "does") || sameString(dd, "doesn't"));
-
-/* catch null-constraint cases. ? will be treated as a literal match,
- * which would make sense for bed strand and maybe other single-char things: */
-if (pat == NULL)
- pat = "";
-pat = trimSpaces(pat);
-if ((pat[0] == 0) || sameString(pat, "*"))
- {
- *retCft = cftIgnore;
- return;
- }
-
-*retCft = cftMultiLiteral;
-numWords = chopByWhite(pat, ptrs, ArraySize(ptrs));
-vals = needMem((numWords+1) * sizeof(char));
-for (i=0; i < numWords; i++)
- vals[i] = ptrs[i][0];
-vals[i] = 0;
-*retVals = vals;
-*retInv = sameString("doesn't", dd);
-}
-
-static void cgiToStringFilter(char *dd, char *pat, enum stringFilterType *retSft,
- char ***retVals, boolean *retInv)
-/* Given a "does/doesn't" and a (list of) regexps from CGI, fill in
- * retCft, retVals and retInv to make a filter. */
-{
-char **vals, *ptrs[32];
-int numWords;
-int i;
-
-assert(retSft != NULL);
-assert(retVals != NULL);
-assert(retInv != NULL);
-assert(sameString(dd, "does") || sameString(dd, "doesn't"));
-
-/* catch null-constraint cases: */
-if (pat == NULL)
- pat = "";
-pat = trimSpaces(pat);
-if ((pat[0] == 0) || sameString(pat, "*"))
- {
- *retSft = sftIgnore;
- return;
- }
-
-*retSft = sftMultiRegexp;
-numWords = chopByWhite(pat, ptrs, ArraySize(ptrs));
-vals = needMem((numWords+1) * sizeof(char *));
-for (i=0; i < numWords; i++)
- vals[i] = cloneString(ptrs[i]);
-vals[i] = NULL;
-*retVals = vals;
-*retInv = sameString("doesn't", dd);
-}
-
-static void cgiToIntFilter(char *cmp, char *pat, enum numericFilterType *retNft,
- int **retVals)
-/* Given a comparison operator and a (pair of) integers from CGI, fill in
- * retNft and retVals to make a filter. */
-{
-char *ptrs[3];
-int *vals;
-int numWords;
-
-assert(retNft != NULL);
-assert(retVals != NULL);
-
-/* catch null-constraint cases: */
-if (pat == NULL)
- pat = "";
-pat = trimSpaces(pat);
-if ((pat[0] == 0) || sameString(pat, "*") || sameString(cmp, "ignored"))
- {
- *retNft = nftIgnore;
- return;
- }
-else if (sameString(cmp, "in range"))
- {
- *retNft = nftInRange;
- numWords = chopString(pat, " \t,", ptrs, ArraySize(ptrs));
- if (numWords != 2)
- errAbort("For \"in range\" constraint, you must give two numbers separated by whitespace or comma.");
- vals = needMem(2 * sizeof(int));
- vals[0] = atoi(ptrs[0]);
- vals[1] = atoi(ptrs[1]);
- if (vals[0] > vals[1])
- {
- int tmp = vals[0];
- vals[0] = vals[1];
- vals[1] = tmp;
- }
- *retVals = vals;
- }
-else
- {
- if (sameString(cmp, "<"))
- *retNft = nftLessThan;
- else if (sameString(cmp, "<="))
- *retNft = nftLTE;
- else if (sameString(cmp, "="))
- *retNft = nftEqual;
- else if (sameString(cmp, "!="))
- *retNft = nftNotEqual;
- else if (sameString(cmp, ">="))
- *retNft = nftGTE;
- else if (sameString(cmp, ">"))
- *retNft = nftGreaterThan;
- else
- errAbort("Unrecognized comparison operator %s", cmp);
- vals = needMem(sizeof(int));
- vals[0] = atoi(pat);
- *retVals = vals;
- }
-}
-
struct bedFilter *bedFilterForCustomTrack(char *ctName)
/* If the user specified constraints, then translate them to a bedFilter. */
{
struct hashEl *var, *varList = cartFindPrefix(cart, hgtaFilterVarPrefix);