///////////////////////////////////////////////////////////////////////////// // fun.cc // // SIMLIB version: 2.18 // Date: 2004-01-25 // // Copyright (c) 1991-2004 Petr Peringer // // This library is licensed under GNU Library GPL. See the file COPYING. // // // standard continuous function blocks // //////////////////////////////////////////////////////////////////////////// // interface // #include "simlib.h" #include "internal.h" #include // functions //////////////////////////////////////////////////////////////////////////// // implementation // SIMLIB_IMPLEMENTATION //////////////////////////////////////////////////////////////////////////// // class Function implementation - functions with one argument // Function::Function(Input i, double (*pf)(double)) : aContiBlock1(i), f(pf) { // add check !!! ### ??? what dprintf(("Function::Function(in)")); } double Function::Value() { // test Loop double ret = f(InputValue()); // return ret; } //////////////////////////////////////////////////////////////////////////// // class Function2 implementation - functions with two arguments // Function2::Function2(Input i1, Input i2, double (*pf)(double,double)) : aContiBlock2(i1,i2), f(pf) { // add check !!! ### dprintf(("Function2::Function2(in,in)")); } double Function2::Value() { // test Loop double ret = f(Input1Value(), Input2Value()); // return ret; } //////////////////////////////////////////////////////////////////////////// // SIMLIB local definitions: // static double sign(double x) { if( x==0.0 ) return 0.0; if( x>0.0 ) return 1.0; else return -1.0; } //////////////////////////////////////////////////////////////////////////// // SIMLIB block functions // Input Abs(Input x) { return new Function(x, fabs); } Input Sin(Input x) { return new Function(x, sin); } Input Cos(Input x) { return new Function(x, cos); } Input Tan(Input x) { return new Function(x, tan); } Input ASin(Input x) { return new Function(x, asin); } Input ACos(Input x) { return new Function(x, acos); } Input ATan(Input x) { return new Function(x, atan); } Input ATan2(Input y, Input x) { return new Function2(y, x, atan2); } Input Exp(Input x) { return new Function(x, exp); } Input Log10(Input x) { return new Function(x, log10); } Input Ln(Input x) { return new Function(x, log); } Input Pow(Input x, Input y) { return new Function2(x, y, pow); } Input Sign(Input x) { return new Function(x, sign); } Input Sqrt(Input x) { return new Function(x, sqrt); } Input Min(Input x, Input y) { return new Function2(x, y, min); } Input Max(Input x, Input y) { return new Function2(x, y, max); } //////////////////////////////////////////////////////////////////////////// // end of FUN.CPP ////////////////////////////////////////////////////////////////////////////