source: trunk/CoinMP/src/CoinOption.c @ 524

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

Fix int* RowStatus? argument in CoinGetSolutionBasis? and const char* OptionName? argument in CoinLocateOptionName?

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