Prep for omxComputeGradientDescent
[openmx:openmx.git] / src / Compute.cpp
1 /*
2  *  Copyright 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 "omxDefines.h"
18 #include "Compute.h"
19 #include "omxHessianCalculation.h"
20
21 struct omxComputeTableEntry {
22         char name[32];
23         omxCompute *(*ctor)();
24 };
25
26 static const struct omxComputeTableEntry omxComputeTable[] = {
27         {"MxComputeEstimateHessian", &newComputeEstimateHessian},
28         {"MxComputeGradientDescent", &newComputeGradientDescent},
29 };
30
31 omxCompute *omxNewCompute(omxState* os, const char *type)
32 {
33         omxCompute *got = NULL;
34
35         for (size_t fx=0; fx < OMX_STATIC_ARRAY_SIZE(omxComputeTable); fx++) {
36                 const struct omxComputeTableEntry *entry = omxComputeTable + fx;
37                 if(strcmp(type, entry->name) == 0) {
38                         got = entry->ctor();
39                         break;
40                 }
41         }
42
43         if (!got) error("Compute %s is not implemented", type);
44
45         return got;
46 }