// query DLL_QUERY libmath_query( Chuck_DL_Query * QUERY ) { // get global Chuck_Env * env = Chuck_Env::instance(); // name QUERY->setname( QUERY, "Math" ); /*! \example math.sin( math.pi /2.0 ) => stdout; */ // register deprecate type_engine_register_deprecate( env, "math", "Math" ); // add class QUERY->begin_class( QUERY, "Math", "Object" ); // add abs QUERY->add_sfun( QUERY, abs_impl, "int", "abs" ); QUERY->add_arg( QUERY, "int", "value" ); // add fabs QUERY->add_sfun( QUERY, fabs_impl, "float", "fabs" ); QUERY->add_arg( QUERY, "float", "value" ); // add sgn QUERY->add_sfun( QUERY, sgn_impl, "float", "sgn" ); QUERY->add_arg( QUERY, "float", "value" ); // sin QUERY->add_sfun( QUERY, sin_impl, "float", "sin" ); QUERY->add_arg( QUERY, "float", "x" ); // cos QUERY->add_sfun( QUERY, cos_impl, "float", "cos" ); QUERY->add_arg( QUERY, "float", "x" ); // tan QUERY->add_sfun( QUERY, tan_impl, "float", "tan" ); QUERY->add_arg( QUERY, "float", "x" ); // asin QUERY->add_sfun( QUERY, asin_impl, "float", "asin" ); QUERY->add_arg( QUERY, "float", "x" ); // acos QUERY->add_sfun( QUERY, acos_impl, "float", "acos" ); QUERY->add_arg( QUERY, "float", "x" ); // atan QUERY->add_sfun( QUERY, atan_impl, "float", "atan" ); QUERY->add_arg( QUERY, "float", "x" ); // atan2 QUERY->add_sfun( QUERY, atan2_impl, "float", "atan2" ); QUERY->add_arg( QUERY, "float", "y" ); QUERY->add_arg( QUERY, "float", "x" ); // sinh QUERY->add_sfun( QUERY, sinh_impl, "float", "sinh" ); QUERY->add_arg( QUERY, "float", "x" ); // cosh QUERY->add_sfun( QUERY, cosh_impl, "float", "cosh" ); QUERY->add_arg( QUERY, "float", "x" ); // tanh QUERY->add_sfun( QUERY, tanh_impl, "float", "tanh" ); QUERY->add_arg( QUERY, "float", "x" ); // hypot QUERY->add_sfun( QUERY, hypot_impl, "float", "hypot" ); QUERY->add_arg( QUERY, "float", "x" ); QUERY->add_arg( QUERY, "float", "y" ); // pow QUERY->add_sfun( QUERY, pow_impl, "float", "pow" ); QUERY->add_arg( QUERY, "float", "x" ); QUERY->add_arg( QUERY, "float", "y" ); // sqrt QUERY->add_sfun( QUERY, sqrt_impl, "float", "sqrt" ); QUERY->add_arg( QUERY, "float", "x" ); // exp QUERY->add_sfun( QUERY, exp_impl, "float", "exp" ); QUERY->add_arg( QUERY, "float", "x" ); // log QUERY->add_sfun( QUERY, log_impl, "float", "log" ); QUERY->add_arg( QUERY, "float", "x" ); // log2 QUERY->add_sfun( QUERY, log2_impl, "float", "log2" ); QUERY->add_arg( QUERY, "float", "x" ); // log10 QUERY->add_sfun( QUERY, log10_impl, "float", "log10" ); QUERY->add_arg( QUERY, "float", "x" ); // floor QUERY->add_sfun( QUERY, floor_impl, "float", "floor" ); QUERY->add_arg( QUERY, "float", "x" ); // ceil QUERY->add_sfun( QUERY, ceil_impl, "float", "ceil" ); QUERY->add_arg( QUERY, "float", "x" ); // round QUERY->add_sfun( QUERY, round_impl, "float", "round" ); QUERY->add_arg( QUERY, "float", "x" ); // trunc QUERY->add_sfun( QUERY, trunc_impl, "float", "trunc" ); QUERY->add_arg( QUERY, "float", "x" ); // fmod QUERY->add_sfun( QUERY, fmod_impl, "float", "fmod" ); QUERY->add_arg( QUERY, "float", "x" ); QUERY->add_arg( QUERY, "float", "y" ); // remainder QUERY->add_sfun( QUERY, remainder_impl, "float", "remainder" ); QUERY->add_arg( QUERY, "float", "x" ); QUERY->add_arg( QUERY, "float", "y" ); // min QUERY->add_sfun( QUERY, min_impl, "float", "min" ); QUERY->add_arg( QUERY, "float", "x" ); QUERY->add_arg( QUERY, "float", "y" ); // max //! see \example powerup.ck QUERY->add_sfun( QUERY, max_impl, "float", "max" ); QUERY->add_arg( QUERY, "float", "x" ); QUERY->add_arg( QUERY, "float", "y" ); // isinf QUERY->add_sfun( QUERY, isinf_impl, "int", "isinf" ); QUERY->add_arg( QUERY, "float", "x" ); // isnan QUERY->add_sfun( QUERY, isnan_impl, "int", "isnan" ); QUERY->add_arg( QUERY, "float", "x" ); // floatMax // QUERY->add_sfun( QUERY, floatMax_impl, "float", "floatMax" ); // intMax // QUERY->add_sfun( QUERY, intMax_impl, "int", "intMax" ); // nextpow2 QUERY->add_sfun( QUERY, nextpow2_impl, "int", "nextpow2" ); QUERY->add_arg( QUERY, "int", "n" ); // ensurepow2 QUERY->add_sfun( QUERY, ensurepow2_impl, "int", "ensurePow2" ); QUERY->add_arg( QUERY, "int", "n" ); // rand QUERY->add_sfun( QUERY, rand_impl, "int", "rand" ); //! return int between 0 and RAND_MAX // rand2 QUERY->add_sfun( QUERY, rand2_impl, "int", "rand2" ); //! integer between [min,max] QUERY->add_arg( QUERY, "int", "min" ); QUERY->add_arg( QUERY, "int", "max" ); // randf QUERY->add_sfun( QUERY, randf_impl, "float", "randf" ); //! rand between -1.0,1.0 // rand2f QUERY->add_sfun( QUERY, rand2f_impl, "float", "rand2f" ); //! rand between min and max QUERY->add_arg( QUERY, "float", "min" ); QUERY->add_arg( QUERY, "float", "max" ); // add mtof //! see \example mand-o-matic.ck QUERY->add_sfun( QUERY, mtof_impl, "float", "mtof" ); //! midi note to frequency QUERY->add_arg( QUERY, "float", "value" ); // add ftom QUERY->add_sfun( QUERY, ftom_impl, "float", "ftom" ); //! frequency to midi note QUERY->add_arg( QUERY, "float", "value" ); // add powtodb QUERY->add_sfun( QUERY, powtodb_impl, "float", "powtodb" ); //! linear power to decibel QUERY->add_arg( QUERY, "float", "value" ); // add rmstodb QUERY->add_sfun( QUERY, rmstodb_impl, "float", "rmstodb" ); //! rms to decibel QUERY->add_arg( QUERY, "float", "value" ); // add dbtopow QUERY->add_sfun( QUERY, dbtopow_impl, "float", "dbtopow" ); //! decibel to linear QUERY->add_arg( QUERY, "float", "value" ); // add dbtorms QUERY->add_sfun( QUERY, dbtorms_impl, "float", "dbtorms" ); //! decibel to rms QUERY->add_arg( QUERY, "float", "value" ); // add re QUERY->add_sfun( QUERY, re_impl, "float", "re" ); //! real component of complex QUERY->add_arg( QUERY, "complex", "value" ); // add im QUERY->add_sfun( QUERY, im_impl, "float", "im" ); //! imaginary component of complex QUERY->add_arg( QUERY, "complex", "value" ); // add mag QUERY->add_sfun( QUERY, modulus_impl, "float", "mag" ); //! mag QUERY->add_arg( QUERY, "polar", "value" ); // add phase QUERY->add_sfun( QUERY, phase_impl, "float", "phase" ); //! phase QUERY->add_arg( QUERY, "polar", "value" ); // add rtop QUERY->add_sfun( QUERY, rtop_impl, "int", "rtop" ); // rect to polar QUERY->add_arg( QUERY, "complex[]", "from" ); QUERY->add_arg( QUERY, "polar[]", "to" ); // add ptor QUERY->add_sfun( QUERY, ptor_impl, "int", "ptor" ); // polar to rect QUERY->add_arg( QUERY, "polar[]", "from" ); QUERY->add_arg( QUERY, "complex[]", "to" ); // pi //! see \example math.ck QUERY->add_svar( QUERY, "float", "PI", TRUE, &g_pi ); // twopi QUERY->add_svar( QUERY, "float", "TWO_PI", TRUE, &g_twopi ); // e QUERY->add_svar( QUERY, "float", "E", TRUE, &g_e ); // e QUERY->add_svar( QUERY, "float", "e", TRUE, &g_e ); // float max assert( sizeof(t_CKFLOAT) == sizeof(double) ); QUERY->add_svar( QUERY, "float", "FLOAT_MAX", TRUE, &g_floatMax ); // float min QUERY->add_svar( QUERY, "float", "FLOAT_MIN_MAG", TRUE, &g_floatMin ); // int max assert( sizeof(t_CKINT) == sizeof(long) ); QUERY->add_svar( QUERY, "int", "INT_MAX", TRUE, &g_intMax ); // infinity, using function to avoid potential "smart" compiler warning g_inf = 1.0 / fzero(); QUERY->add_svar( QUERY, "float", "INFINITY", TRUE, &g_inf ); // i QUERY->add_svar( QUERY, "complex", "I", TRUE, &g_i ); QUERY->add_svar( QUERY, "complex", "i", TRUE, &g_i ); // j QUERY->add_svar( QUERY, "complex", "J", TRUE, &g_i ); QUERY->add_svar( QUERY, "complex", "j", TRUE, &g_i ); // done QUERY->end_class( QUERY ); return TRUE; }
//----------------------------------------------------------------------------- // name: machine_query() // desc: query entry point //----------------------------------------------------------------------------- DLL_QUERY machine_query( Chuck_DL_Query * QUERY ) { // get global env instance Chuck_Env * env = QUERY->env(); // set name of this query QUERY->setname( QUERY, "Machine" ); /*! \nameinfo ChucK runtime interface to the virtual machine. this interface can be used to manage shreds. They are similar to the <a href="otfp.html"> On-the-fly Programming Commands</a>, except these are invoked from within a ChucK program, and are accessible to the timing mechanism. */ // register deprecate type_engine_register_deprecate( env, "machine", "Machine" ); // class QUERY->begin_class( QUERY, "Machine", "Object" ); // add add //! compile and spork a new shred from file at 'path' into the VM now //! returns the shred ID //! (see example/machine.ck) QUERY->add_sfun( QUERY, machine_add_impl, "int", "add" ); QUERY->add_arg( QUERY, "string", "path" ); // add spork //! same as add // QUERY->add_sfun( QUERY, machine_add_impl, "int", "spork" ); // QUERY->add_arg( QUERY, "string", "path" ); // add remove //! remove shred from VM by shred ID (returned by add/spork) QUERY->add_sfun( QUERY, machine_remove_impl, "int", "remove" ); QUERY->add_arg( QUERY, "int", "id" ); // add replace //! replace shred with new shred from file //! returns shred ID , or 0 on error QUERY->add_sfun( QUERY, machine_replace_impl, "int", "replace" ); QUERY->add_arg( QUERY, "int", "id" ); QUERY->add_arg( QUERY, "string", "path" ); // add replace //! replace shred with new shred from file //! returns shred ID , or 0 on error QUERY->add_sfun( QUERY, machine_crash_impl, "void", "crash" ); // add status //! display current status of VM //! (see example/status.ck) QUERY->add_sfun( QUERY, machine_status_impl, "int", "status" ); // add get intsize (width) //! get the intsize in bits (e.g., 32 or 64) QUERY->add_sfun( QUERY, machine_intsize_impl, "int", "intsize" ); // add shreds //! get list of active shreds by id QUERY->add_sfun( QUERY, machine_shreds_impl, "int[]", "shreds" ); // end class QUERY->end_class( QUERY ); return TRUE; }