int main(int argc, char **argv) { assert(argc > 1); for (int i = 1; i < argc; ++i) { std::ifstream ifs(argv[i]); std::ostream &os = std::cout; #ifdef USE_NAMESPACE os << "namespace " << DOUBLESTRINGIFY(USE_NAMESPACE) << " {\n"; #endif CMakeParser parser(ifs, os); parser.nextToken(); while (ifs.good()) { switch (parser.curToken()) { case CMakeLexer::TOK_EOF: return ifs.get(); // eat EOF case CMakeLexer::TOK_MACRO: parser.handleMacro(); break; case CMakeLexer::TOK_FUNCTION: parser.handleFunction(); break; case CMakeLexer::TOK_SET: parser.handleSet(); break; case CMakeLexer::TOK_DOXYGEN_COMMENT: parser.handleDoxygenComment(); break; default: parser.handleTopLevelExpression(); break; } } #ifdef USE_NAMESPACE os << "}\n"; #endif } return EXIT_SUCCESS; }
int adb__sequenceQueryByKey(struct soap* soap,xsd__string dbName, xsd__string trackKey, xsd__string featureFileName, xsd__int queryType, xsd__string keyFileName, xsd__string timesFileName, xsd__int queryPoint, xsd__int pointNN, xsd__int trackNN, xsd__int sequenceLength, xsd__double radius, xsd__double absolute_threshold, xsd__int usingQueryPoint, xsd__int lsh_exact, xsd__int no_unit_norming, struct adb__queryResponse& adbQueryResponse){ char qtypeStr[256]; fprintf(stderr, "Calling %s query on database %s with %s=%s, distFun:%s\n", (trackKey&&strlen(trackKey))?"KEY":"FILENAME", dbName, (trackKey&&strlen(trackKey))?"KEY":"FILENAME",(trackKey&&strlen(trackKey))?trackKey:featureFileName, no_unit_norming?"Euclidean":"Normed Euclidean"); INTSTRINGIFY(queryPoint, qPosStr); INTSTRINGIFY(pointNN, pointNNStr); INTSTRINGIFY(trackNN, trackNNStr); INTSTRINGIFY(sequenceLength, seqLenStr); DOUBLESTRINGIFY(absolute_threshold, absolute_thresholdStr); DOUBLESTRINGIFY(radius, radiusStr); snprintf(qtypeStr, 256, "nsequence"); const char *argv[]={ "./audioDB", COM_QUERY, qtypeStr, COM_DATABASE, dbName, (trackKey&&strlen(trackKey))?COM_QUERYKEY:COM_FEATURES, (trackKey&&strlen(trackKey))?ENSURE_STRING(trackKey):ENSURE_STRING(featureFileName), COM_KEYLIST, ENSURE_STRING(keyFileName), usingQueryPoint?COM_QPOINT:COM_EXHAUSTIVE, usingQueryPoint?qPosStr:"", COM_POINTNN, pointNNStr, COM_TRACKNN, trackNNStr, COM_RADIUS, radiusStr, COM_SEQLEN, seqLenStr, COM_ABSOLUTE_THRESH, absolute_thresholdStr, lsh_exact?COM_LSH_EXACT:"", no_unit_norming?COM_NO_UNIT_NORMING:"", }; const unsigned argc = 23; try { audioDB(argc, argv, soap, &adbQueryResponse); return SOAP_OK; } catch (char *err) { soap_receiver_fault(soap, err, ""); return SOAP_FAULT; } }
// Literal translation of command line to web service int adb__query(struct soap* soap, xsd__string dbName, xsd__string qKey, xsd__string keyList, xsd__string timesFileName, xsd__string powerFileName, xsd__int qType, xsd__int qPos, xsd__int pointNN, xsd__int trackNN, xsd__int seqLen, xsd__double radius, xsd__double absolute_threshold, xsd__double relative_threshold, xsd__int exhaustive, xsd__int lsh_exact, xsd__int no_unit_norming, adb__queryResponse &adbQueryResponse){ char queryType[256]; fprintf(stderr,"Calling fileName query on database %s with featureFile=%s\n", dbName, qKey); for(int k=0; k<256; k++) queryType[k]='\0'; if(qType == O2_POINT_QUERY) strncpy(queryType, "point", strlen("point")); else if (qType == O2_SEQUENCE_QUERY) strncpy(queryType, "sequence", strlen("sequence")); else if(qType == O2_TRACK_QUERY) strncpy(queryType,"track", strlen("track")); else if(qType == O2_N_SEQUENCE_QUERY) strncpy(queryType,"nsequence", strlen("nsequence")); if(pointNN==0) pointNN=10; if(trackNN==0) trackNN=10; if(seqLen==0) seqLen=16; INTSTRINGIFY(qPos, qPosStr); INTSTRINGIFY(pointNN, pointNNStr); INTSTRINGIFY(trackNN, trackNNStr); INTSTRINGIFY(seqLen, seqLenStr); /* We don't necessarily use these, but because of scope we do this anyway. We waste 756 bytes of stack this way. */ DOUBLESTRINGIFY(radius, radiusStr); DOUBLESTRINGIFY(absolute_threshold, absolute_thresholdStr); DOUBLESTRINGIFY(relative_threshold, relative_thresholdStr); unsigned int argc = 19; if (powerFileName) { argc += 2; } if (radius != 0) { argc += 2; } /* we can't use use_absolute_threshold and friends because we're not in the audioDB class here. */ if (absolute_threshold != 0) { argc += 2; } if (relative_threshold != 0) { argc += 2; } if (exhaustive) { argc++; } if (lsh_exact) { argc++; } if(no_unit_norming){ argc++; } const char **argv = new const char*[argc+1]; argv[0] = "./audioDB"; argv[1] = COM_QUERY; argv[2] = queryType; argv[3] = COM_DATABASE; argv[4] = (char *) (ENSURE_STRING(dbName)); argv[5] = COM_FEATURES; argv[6] = (char *) (ENSURE_STRING(qKey)); argv[7] = COM_KEYLIST; argv[8] = (char *) (ENSURE_STRING(keyList)); argv[9] = COM_TIMES; argv[10] = (char *) (ENSURE_STRING(timesFileName)); argv[11] = COM_QPOINT; argv[12] = qPosStr; argv[13] = COM_POINTNN; argv[14] = pointNNStr; argv[15] = COM_TRACKNN; argv[16] = trackNNStr; argv[17] = COM_SEQLEN; argv[18] = seqLenStr; int argv_counter = 19; if (powerFileName) { argv[argv_counter++] = COM_QUERYPOWER; argv[argv_counter++] = powerFileName; } if (radius != 0) { argv[argv_counter++] = COM_RADIUS; argv[argv_counter++] = radiusStr; } if (absolute_threshold != 0) { argv[argv_counter++] = COM_ABSOLUTE_THRESH; argv[argv_counter++] = absolute_thresholdStr; } if (relative_threshold != 0) { argv[argv_counter++] = COM_RELATIVE_THRESH; argv[argv_counter++] = relative_thresholdStr; } if (exhaustive) { argv[argv_counter++] = COM_EXHAUSTIVE; } if (lsh_exact) { argv[argv_counter++] = COM_LSH_EXACT; } if (no_unit_norming) { argv[argv_counter++] = COM_NO_UNIT_NORMING; } argv[argv_counter] = NULL; try { audioDB(argc, argv, soap, &adbQueryResponse); delete [] argv; return SOAP_OK; } catch (char *err) { soap_receiver_fault(soap, err, ""); delete [] argv; return SOAP_FAULT; } }