Fix/remove improper printf style formats
[openmx:openmx.git] / src / omxAlgebraFitFunction.cpp
1 /*
2  *  Copyright 2007-2013 The OpenMx Project
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *       http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *   Unless required by applicable law or agreed to in writing, software
11  *   distributed under the License is distributed on an "AS IS" BASIS,
12  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  */
16
17 #include "omxAlgebraFunctions.h"
18
19 #ifndef _OMX_ALGEBRA_FITFUNCTION_
20 #define _OMX_ALGEBRA_FITFUNCTION_ TRUE
21
22 typedef struct {
23
24         omxMatrix *algebra;
25
26 } omxAlgebraFitFunction;
27
28 void omxDestroyAlgebraFitFunction(omxFitFunction *off) {
29
30 }
31
32 static void omxCallAlgebraFitFunction(omxFitFunction *off, int want, FitContext *) {
33         if(OMX_DEBUG_ALGEBRA) {mxLog("Beginning Algebra Fit Function Computation.");}
34         omxMatrix* algebra = ((omxAlgebraFitFunction*)(off->argStruct))->algebra;
35
36         omxRecompute(algebra);
37         
38         // This should really be checked elsewhere. TODO
39         if(algebra->rows != 1 || algebra->cols != 1) {
40                 error("MxAlgebraFitFunction's fit function algebra does not evaluate to a 1x1 matrix.");
41         }
42         
43         off->matrix->data[0] = algebra->data[0];
44         
45         if(OMX_DEBUG) {mxLog("Algebra Fit Function value is %f.", off->matrix->data[0]);}
46 }
47
48 void omxInitAlgebraFitFunction(omxFitFunction* off) {
49         
50         if(OMX_DEBUG) {
51                 mxLog("Initializing Algebra fitFunction function.");
52         }
53         
54         SEXP rObj = off->rObj;
55         SEXP newptr;
56         
57         omxAlgebraFitFunction *newObj = (omxAlgebraFitFunction*) R_alloc(1, sizeof(omxAlgebraFitFunction));
58         PROTECT(newptr = GET_SLOT(rObj, install("algebra")));
59         newObj->algebra = omxMatrixLookupFromState1(newptr, off->matrix->currentState);
60         if(OMX_DEBUG) {
61                 mxLog("Algebra Fit Function Bound to Algebra %p", newObj->algebra);
62         }
63         
64         off->computeFun = omxCallAlgebraFitFunction;
65         off->destructFun = omxDestroyAlgebraFitFunction;
66         
67         off->argStruct = (void*) newObj;
68 }
69
70
71 #endif /* _OMX_ALGEBRA_FITFUNCTION_ */