void mexFunction(int nout, mxArray *out[], int nin, const mxArray *in[]) { int verbose = 0 ; char buffer [1024] ; int unsigned const bufferSize = sizeof(buffer)/sizeof(buffer[0]) ; int opt ; int next = 0 ; mxArray const *optarg ; VL_USE_MATLAB_ENV ; if (nout > 1) { vlmxError(vlmxErrTooManyOutputArguments, NULL) ; } while ((opt = vlmxNextOption (in, nin, options, &next, &optarg)) >= 0) { switch (opt) { case opt_verbose : ++ verbose ; break ; default: abort() ; } } if (verbose) { int offset = 0 ; char * string = vl_configuration_to_string_copy() ; offset = vl_string_copy(buffer, bufferSize, string) ; snprintf(buffer + offset, bufferSize - offset, " SIMD enabled: %s\n", VL_YESNO(vl_get_simd_enabled())) ; if(string) vl_free(string) ; } else { snprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), "%s", VL_VERSION_STRING) ; } if (nout == 0) { mexPrintf("%s\n", buffer) ; } else { out[0] = mxCreateString(buffer) ; } }
/** @brief Save octave on disk ** @internal **/ static int save_gss (VlSiftFilt * filt, VlFileMeta * fm, const char * basename, int verbose) { char tmp [1024] ; int S = filt -> S ; int q, i ; int s, err ; int w, h ; int o = filt -> o_cur ; VlPgmImage pim ; vl_uint8 *buffer = 0 ; if (! fm -> active) { return VL_ERR_OK ; } w = vl_sift_get_octave_width (filt) ; h = vl_sift_get_octave_height (filt) ; pim.width = w ; pim.height = h ; pim.max_value = 255 ; pim.is_raw = 1 ; buffer = malloc (sizeof(vl_uint8) * w * h) ; if (! buffer) { err = VL_ERR_ALLOC ; goto save_gss_quit ; } q = vl_string_copy (tmp, sizeof(tmp), basename) ; if (q >= sizeof(tmp)) { err = VL_ERR_OVERFLOW ; goto save_gss_quit ; } for (s = 0 ; s < S ; ++s) { vl_sift_pix * pt = vl_sift_get_octave (filt, s) ; /* conversion */ for (i = 0 ; i < w * h ; ++i) { buffer [i] = (vl_uint8) pt [i] ; } /* save */ snprintf(tmp + q, sizeof(tmp) - q, "_%02d_%03d", o, s) ; err = vl_file_meta_open (fm, tmp, "wb") ; if (err) goto save_gss_quit ; err = vl_pgm_insert (fm -> file, &pim, buffer) ; if (err) goto save_gss_quit ; if (verbose) { printf("sift: saved gss level to '%s'\n", fm -> name) ; } vl_file_meta_close (fm) ; } save_gss_quit : ; if (buffer) free (buffer) ; vl_file_meta_close (fm) ; return err ; }
int main (int argc, char *argv[]) { int q ; int err ; char const *repl = "vision" ; char const *str = "*: the string '*' shold be equal to 'vision' but not to '\\**\\*'" ; char const *t1 = "a/b/c/d.tar.gz" ; char const *t2 = "ascii:bin:ascii:bin:bho:bha:bin:/which remains/" ; char const *t3 = "t" ; char const *next ; enum { buf_len = 1024 } ; char buf [buf_len] ; enum { sml_len = 2 } ; char sml [sml_len] ; /* -------------------------------------------------------------- */ printf ("testing vl_string_copy\n") ; q = vl_string_copy (sml, sml_len, t3) ; err = (q >= sml_len) ; printf (sml) ; printf ("\nwrote %d error %d\n", q, err) ; q = vl_string_copy (sml, sml_len, t1) ; err = (q >= sml_len) ; printf (sml) ; printf ("\nwrote %d error %d\n", q, err) ; /* -------------------------------------------------------------- */ printf ("testing vl_string_replace_wildcard\n") ; q = vl_string_replace_wildcard (buf, buf_len, str, '*', '\\', repl) ; err = (q >= buf_len) ; printf (buf) ; printf ("\nwrote %d error %d\n", q, err) ; q = vl_string_replace_wildcard (sml, sml_len, str, '*', '\\', repl) ; err = (q >= sml_len) ; printf (sml) ; printf ("\nwrote %d error %d\n", q, err) ; q = vl_string_replace_wildcard (0,0, str, '*', '\\', repl) ; err = (q >= 0) ; printf ("\nwrote %d error %d\n", q, err) ; /* -------------------------------------------------------------- */ printf ("\ntesting vl_string_basename\n") ; q = vl_string_basename (buf, buf_len, t1, 1) ; err = (q >= buf_len) ; printf("'%s' -> '%s' (wrote %d, error %d)\n", t1, buf, q, err) ; q = vl_string_basename (sml, sml_len, t1, 1) ; err = (q >= buf_len) ; printf("'%s' -> '%s' (wrote %d, error %d)\n", t1, sml, q, err) ; /* -------------------------------------------------------------- */ printf ("\ntesting vl_string_parse_protocol\n") ; next = t2 ; while(next = vl_string_parse_protocol(next, &q), q != VL_PROT_NONE) { printf("protocol: '%s'\n", vl_string_protocol_name (q)) ; } printf("%s\n", next) ; return 0 ; }