/* * TODO: replace original specification with a SRFI standard or other de facto * standard */ SCM_EXPORT ScmObj scm_p_providedp(ScmObj feature) { DECLARE_FUNCTION("provided?", procedure_fixed_1); ENSURE_STRING(feature); return MAKE_BOOL(scm_providedp(feature)); }
SCM_EXPORT ScmObj scm_p_string2symbol(ScmObj str) { DECLARE_FUNCTION("string->symbol", procedure_fixed_1); ENSURE_STRING(str); return scm_intern(SCM_STRING_STR(str)); }
/* * TODO: replace original specification with a SRFI standard or other de facto * standard */ SCM_EXPORT ScmObj scm_p_provide(ScmObj feature) { DECLARE_FUNCTION("provide", procedure_fixed_1); ENSURE_STRING(feature); scm_provide(feature); return SCM_TRUE; }
/* FIXME: make (pair? err-obj) #f */ SCM_EXPORT ScmObj scm_make_error_obj(ScmObj reason, ScmObj objs) { DECLARE_INTERNAL_FUNCTION("scm_make_error_obj"); #if 0 /* should be string, but not forced. displayable is sufficient. */ ENSURE_STRING(reason); #endif ENSURE_LIST(objs); return LIST_4(l_err_obj_tag, reason, objs, scm_trace_stack()); }
/* * Disabled to avoid API confusion. -- YamaKen 2006-03-26 * * TODO: describe compatibility with de facto standard of other Scheme * implementations. Consider compatibility with following uim predicates. The * names are based on existing extensions of major Scheme implementations. * * - file-readable? * - file-writable? * - file-executable? * - file-regular? * - file-directory? */ SCM_EXPORT ScmObj scm_p_file_existsp(ScmObj filepath) { FILE *f; /* a dummy comment is inserted to be hidden from build_func_table.rb */ DECLARE_FUNCTION/**/("file-exists?", procedure_fixed_1); ENSURE_STRING(filepath); f = fopen(SCM_STRING_STR(filepath), "r"); if (!f) return SCM_FALSE; fclose(f); return SCM_TRUE; }
SCM_EXPORT ScmObj scm_p_string2number(ScmObj str, ScmObj args) { scm_int_t ret; int r; const char *c_str; scm_bool err; DECLARE_FUNCTION("string->number", procedure_variadic_1); ENSURE_STRING(str); c_str = SCM_STRING_STR(str); r = prepare_radix(SCM_MANGLE(name), args); ret = scm_string2number(c_str, r, &err); return (err) ? SCM_FALSE : MAKE_INT(ret); }
SCM_EXPORT ScmObj scm_p_set_current_char_codecx(ScmObj encoding) { ScmCharCodec *codec; DECLARE_FUNCTION("%%set-current-char-codec!", procedure_fixed_1); ENSURE_STRING(encoding); #if SCM_USE_MULTIBYTE_CHAR codec = scm_mb_find_codec(SCM_STRING_STR(encoding)); if (!codec) ERR_OBJ(ERRMSG_UNSUPPORTED_ENCODING, encoding); scm_current_char_codec = codec; #else ERR(ERRMSG_CODEC_SW_NOT_SUPPORTED); #endif return scm_p_current_char_codec(); }
SCM_EXPORT ScmObj scm_p_require(ScmObj filename) { #if SCM_COMPAT_SIOD ScmObj loaded_str, retsym; #endif DECLARE_FUNCTION("require", procedure_fixed_1); ENSURE_STRING(filename); scm_require_internal(SCM_STRING_STR(filename)); #if SCM_COMPAT_SIOD loaded_str = make_loaded_str(SCM_STRING_STR(filename)); retsym = scm_intern(SCM_STRING_STR(loaded_str)); SCM_SYMBOL_SET_VCELL(retsym, SCM_TRUE); return retsym; #else return SCM_TRUE; #endif }
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; } }