source: trunk/CoinMP/src/CoinSolver.c @ 347

Last change on this file since 347 was 347, checked in by bjarni, 10 years ago

Changing return type of GetOptionName? to const char* and add minor error checking to CoinSolver?.c

File size: 7.0 KB
Line 
1
2/*  CoinSolver.c  */
3
4#include <stdlib.h>
5#include <string.h>
6
7#include "CoinSolver.h"
8
9
10PSOLVER coinCreateSolverObject()
11{
12        PSOLVER pSolver;
13
14        pSolver = (PSOLVER)malloc(sizeof(SOLVERINFO));
15        memset(pSolver, 0, sizeof(SOLVERINFO));
16
17        strcpy(pSolver->LogFilename, "");
18
19        pSolver->OptionCount = 0;
20        pSolver->OptionCopy = 0;
21        pSolver->OptionTable = NULL;
22
23        pSolver->MsgLogCallback = NULL;
24        pSolver->IterCallback = NULL;
25        pSolver->MipNodeCallback = NULL;
26
27        return pSolver;
28}
29
30
31void coinClearSolverObject(PSOLVER pSolver)
32{
33        if (!pSolver) {
34                if (pSolver->OptionCopy && pSolver->OptionTable) {
35                        free(pSolver->OptionTable);
36                }
37                return;
38        }
39        free(pSolver);
40}
41
42
43void coinSetLogFilename(PSOLVER pSolver, const char* LogFilename)
44{
45        if (LogFilename) {
46                strcpy(pSolver->LogFilename, LogFilename);
47        }
48}
49
50
51const char* coinGetLogFilename(PSOLVER pSolver)
52{
53        return pSolver->LogFilename;
54}
55
56
57
58void coinCopyOptionTable(PSOLVER pSolver, OPTIONTABLE OptionTable, int OptionCount)
59{
60        if (!pSolver) {
61                return;
62        }
63        if (pSolver->OptionCount > 0) {
64                pSolver->OptionCount = OptionCount;
65                pSolver->OptionTable = (PSOLVOPT)malloc(OptionCount * sizeof(SOLVOPTINFO));
66                memcpy(pSolver->OptionTable, OptionTable, OptionCount * sizeof(SOLVOPTINFO));
67                pSolver->OptionCopy = 1;
68        }
69}
70
71
72void coinSetOptionTable(PSOLVER pSolver, OPTIONTABLE OptionTable, int OptionCount)
73{
74        if (!pSolver) {
75                return;
76        }
77        pSolver->OptionTable = OptionTable;
78        pSolver->OptionCount = OptionCount;
79}
80
81
82int coinGetOptionCount(PSOLVER pSolver)
83{
84        if (pSolver == NULL) {
85                return 0;
86        }
87        return pSolver->OptionCount;
88}
89
90
91int coinGetOptionID(PSOLVER pSolver, int OptionNr)
92{
93        if ((OptionNr < 0) || (OptionNr >= pSolver->OptionCount)) {
94                return -1;
95        }
96        return pSolver->OptionTable[OptionNr].OptionID;
97}
98
99
100int coinLocateOptionID(PSOLVER pSolver, int OptionID)
101{
102        int i;
103
104        for (i = 0; i < pSolver->OptionCount; i++) {
105                if (OptionID == pSolver->OptionTable[i].OptionID) {
106                        return i;
107                }
108        }
109        return -1;
110}
111
112
113int coinGetOptionType(PSOLVER pSolver, int OptionID)
114{
115        int OptionNr;
116
117        OptionNr = coinLocateOptionID(pSolver, OptionID);
118        if (OptionNr == -1) {
119                return OPT_NONE;
120        }
121        return pSolver->OptionTable[OptionNr].OptionType;
122}
123
124
125int coinGetOptionGroup(PSOLVER pSolver, int OptionID)
126{
127        int OptionNr;
128
129        OptionNr = coinLocateOptionID(pSolver, OptionID);
130        if (OptionNr == -1) {
131                return GRP_NONE;
132        }
133        return pSolver->OptionTable[OptionNr].GroupType;
134}
135
136
137#ifdef _WIN32
138 #define STRING_COMPARE_NOCASE(s1, s2)  strcmpi(s1, s2)
139#else
140 #define STRING_COMPARE_NOCASE(s1, s2)  strcasecmp(s1, s2)
141#endif
142
143int coinLocateOptionName(PSOLVER pSolver, char* OptionName)
144{
145        int i;
146
147        for (i = 0; i < pSolver->OptionCount; i++) {
148                if (STRING_COMPARE_NOCASE(OptionName, pSolver->OptionTable[i].OptionName) != 0) {
149                        return pSolver->OptionTable[i].OptionID;
150                }
151                if (STRING_COMPARE_NOCASE(OptionName, pSolver->OptionTable[i].ShortName) != 0) {
152                        return pSolver->OptionTable[i].OptionID;
153                }
154        }
155        return -1;
156}
157
158
159const char* coinGetOptionName(PSOLVER pSolver, int OptionID)
160{
161        int OptionNr;
162
163        OptionNr = coinLocateOptionID(pSolver, OptionID);
164        if (OptionNr == -1) {
165                return "";
166        }
167        return pSolver->OptionTable[OptionNr].OptionName;
168}
169
170
171int coinGetOptionNameBuf(PSOLVER pSolver, int OptionID, char* OptionName, int buflen)
172{
173        int OptionNr;
174
175        OptionNr = coinLocateOptionID(pSolver, OptionID);
176        if (OptionNr == -1) {
177                if (OptionName) {
178                        strcpy(OptionName, "");
179                }
180                return -1;
181        }
182        if (OptionName) {
183                strncpy(OptionName, pSolver->OptionTable[OptionNr].OptionName, buflen-1);
184                OptionName[buflen-1] = '\0';
185        }
186        return 0;
187}
188
189const char* coinGetOptionShortName(PSOLVER pSolver, int OptionID)
190{
191        int OptionNr;
192
193        OptionNr = coinLocateOptionID(pSolver, OptionID);
194        if (OptionNr == -1) {
195                return "";
196        }
197        return pSolver->OptionTable[OptionNr].ShortName;
198}
199
200
201int coinGetOptionShortNameBuf(PSOLVER pSolver, int OptionID, char* ShortName, int buflen)
202{
203        int OptionNr;
204
205        OptionNr = coinLocateOptionID(pSolver, OptionID);
206        if (OptionNr == -1) {
207                if (ShortName) {
208                        strcpy(ShortName, "");
209                }
210                return -1;
211        }
212        if (ShortName) {
213                strncpy(ShortName, pSolver->OptionTable[OptionNr].ShortName, buflen-1);
214                ShortName[buflen-1] = '\0';
215        }
216        return 0;
217}
218
219
220int coinGetIntOptionDefaultValue(PSOLVER pSolver, int OptionID)
221{
222        int OptionNr;
223
224        OptionNr = coinLocateOptionID(pSolver, OptionID);
225        if (OptionNr == -1) {
226                return 0;
227        }
228        return (int)pSolver->OptionTable[OptionNr].DefaultValue;
229}
230
231
232
233int coinGetIntOptionMinValue(PSOLVER pSolver, int OptionID)
234{
235        int OptionNr;
236
237        OptionNr = coinLocateOptionID(pSolver, OptionID);
238        if (OptionNr == -1) {
239                return 0;
240        }
241        return (int)pSolver->OptionTable[OptionNr].MinValue;
242}
243
244
245
246int coinGetIntOptionMaxValue(PSOLVER pSolver, int OptionID)
247{
248        int OptionNr;
249
250        OptionNr = coinLocateOptionID(pSolver, OptionID);
251        if (OptionNr == -1) {
252                return 0;
253        }
254        return (int)pSolver->OptionTable[OptionNr].MaxValue;
255}
256
257
258
259
260double coinGetRealOptionDefaultValue(PSOLVER pSolver, int OptionID)
261{
262        int OptionNr;
263
264        OptionNr = coinLocateOptionID(pSolver, OptionID);
265        if (OptionNr == -1) {
266                return 0.0;
267        }
268        return pSolver->OptionTable[OptionNr].DefaultValue;
269}
270
271
272
273double coinGetRealOptionMinValue(PSOLVER pSolver, int OptionID)
274{
275        int OptionNr;
276
277        OptionNr = coinLocateOptionID(pSolver, OptionID);
278        if (OptionNr == -1) {
279                return 0.0;
280        }
281        return pSolver->OptionTable[OptionNr].MinValue;
282}
283
284
285
286double coinGetRealOptionMaxValue(PSOLVER pSolver, int OptionID)
287{
288        int OptionNr;
289
290        OptionNr = coinLocateOptionID(pSolver, OptionID);
291        if (OptionNr == -1) {
292                return 0.0;
293        }
294        return pSolver->OptionTable[OptionNr].MaxValue;
295}
296
297int coinGetOptionChanged(PSOLVER pSolver, int OptionID)
298{
299        int OptionNr;
300
301        OptionNr = coinLocateOptionID(pSolver, OptionID);
302        if (OptionNr == -1) {
303                return 0;
304        }
305        return pSolver->OptionTable[OptionNr].changed;
306}
307
308
309int coinGetIntOption(PSOLVER pSolver, int OptionID)
310{
311        int OptionNr;
312
313        OptionNr = coinLocateOptionID(pSolver, OptionID);
314        if (OptionNr == -1) {
315                return 0;
316        }
317        return (int)pSolver->OptionTable[OptionNr].CurrentValue;
318}
319
320int coinSetIntOption(PSOLVER pSolver, int OptionID, int IntValue)
321{
322        int OptionNr;
323
324        OptionNr = coinLocateOptionID(pSolver, OptionID);
325        if (OptionNr == -1) {
326                return -1;
327        }
328        pSolver->OptionTable[OptionNr].CurrentValue = IntValue;
329        pSolver->OptionTable[OptionNr].changed = 1;
330        return 0;
331}
332
333
334double coinGetRealOption(PSOLVER pSolver, int OptionID)
335{
336        int OptionNr;
337
338        OptionNr = coinLocateOptionID(pSolver, OptionID);
339        if (OptionNr == -1) {
340                return 0.0;
341        }
342        return pSolver->OptionTable[OptionNr].CurrentValue;
343}
344
345
346int coinSetRealOption(PSOLVER pSolver, int OptionID, double RealValue)
347{
348        int OptionNr;
349
350        OptionNr = coinLocateOptionID(pSolver, OptionID);
351        if (OptionNr == -1) {
352                return -1;
353        }
354        pSolver->OptionTable[OptionNr].CurrentValue = RealValue;
355        pSolver->OptionTable[OptionNr].changed = 1;
356        return 0;
357}
358
Note: See TracBrowser for help on using the repository browser.