-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsci_vartype.cpp
135 lines (107 loc) · 2.77 KB
/
sci_vartype.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
* Symphony Toolbox
* Provides information about variables: is it continuous/integer/boolean?
* By Keyur Joshi
*/
#include "symphony.h"
#include "sci_iofunc.hpp"
extern sym_environment* global_sym_env; //defined in globals.cpp
extern "C" {
#include "api_scilab.h"
#include "Scierror.h"
#include "sciprint.h"
#include "BOOL.h"
#include <localization.h>
//error management variable
static SciErr sciErr;
static int iRet;
//data declarations
static int *varAddress,varIndex,numVars,retVal;
static double inputDouble;
static int checkNumArgs()
{
CheckInputArgument(pvApiCtx,1,1);
CheckOutputArgument(pvApiCtx,1,1);
return 1;
}
static int commonCodePart1(){
//ensure that environment is active
if(global_sym_env==NULL){
sciprint("Error: Symphony environment not initialized. Please run 'sym_open()' first.\n");
return 1;
}
//code to check arguments and get them
if(checkNumArgs()==0)
return 1;
//code to process input
if(getUIntFromScilab(1,&varIndex))
return 1;
iRet=sym_get_num_cols(global_sym_env,&numVars);
if(iRet==FUNCTION_TERMINATED_ABNORMALLY){
Scierror(999, "An error occured. Has a problem been loaded?\n");
return 1;
}else if(varIndex>=numVars){
Scierror(999, "An error occured. Variable index must be a number between 0 and %d.\n",numVars-1);
return 1;
}
return 0;
}
static int commonCodePart2(){
if(returnDoubleToScilab(retVal))
return 1;
return 0;
}
int sci_sym_isContinuous(char *fname){
if(commonCodePart1())
return 1;
iRet=sym_is_continuous(global_sym_env,varIndex,&retVal);
if(iRet==FUNCTION_TERMINATED_ABNORMALLY){
Scierror(999, "An error occured. Has a problem been loaded?\n");
return 1;
}else{
if(retVal)
sciprint("This variable is continuous.\n");
else
sciprint("This variable is not continuous.\n");
}
if(commonCodePart2())
return 1;
return 0;
}
int sci_sym_isBinary(char *fname){
if(commonCodePart1())
return 1;
iRet=sym_is_binary(global_sym_env,varIndex,&retVal);
if(iRet==FUNCTION_TERMINATED_ABNORMALLY){
Scierror(999, "An error occured.\n");
return 1;
}else{
if(retVal)
sciprint("This variable is constrained to be binary.\n");
else
sciprint("This variable is not constrained to be binary.\n");
}
if(commonCodePart2())
return 1;
return 0;
}
int sci_sym_isInteger(char *fname){
char retValc; //for some wierd reason this function unlike the above 2 returns a char
if(commonCodePart1())
return 1;
iRet=sym_is_integer(global_sym_env,varIndex,&retValc);
if(iRet==FUNCTION_TERMINATED_ABNORMALLY){
Scierror(999, "An error occured.\n");
return 1;
}else{
if(retValc)
sciprint("This variable is constrained to be an integer.\n");
else
sciprint("This variable is not constrained to be an integer.\n");
}
retVal=retValc;
if(commonCodePart2())
return 1;
return 0;
}
}