1 /*
2  *  gretl -- Gnu Regression, Econometrics and Time-series Library
3  *  Copyright (C) 2001 Allin Cottrell and Riccardo "Jack" Lucchetti
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #ifndef USERVAR_H_
21 #define USERVAR_H_
22 
23 typedef enum {
24     UVAR_ADD = 1,
25     UVAR_DELETE
26 } UvarAction;
27 
28 typedef enum {
29     UV_PRIVATE = 1 << 0,
30     UV_SHELL   = 1 << 1,
31     UV_MAIN    = 1 << 2,
32     UV_NODECL  = 1 << 3,
33     UV_NOREPL  = 1 << 4
34 } UVFlags;
35 
36 typedef int (*USER_VAR_FUNC) (const char *, GretlType, int);
37 
38 typedef struct user_var_ user_var;
39 
40 int user_var_add (const char *name, GretlType type, void *value);
41 
42 int user_var_add_or_replace (const char *name,
43 			     GretlType type,
44 			     void *value);
45 
46 int create_user_var (const char *name, GretlType type);
47 
48 int user_var_delete (user_var *uvar);
49 
50 int user_var_delete_by_name (const char *name, PRN *prn);
51 
52 int gretl_is_user_var (const char *name);
53 
54 const char *uservar_name_complete (const char *s);
55 
56 GretlType user_var_get_type_by_name (const char *name);
57 
58 user_var *get_user_var_by_name (const char *name);
59 
60 user_var *get_user_var_of_type_by_name (const char *name,
61 					GretlType type);
62 
63 user_var *get_user_var_by_data (const void *data);
64 
65 const char *user_var_get_name (user_var *uvar);
66 
67 const char *user_var_get_name_by_data (const void *data);
68 
69 void *user_var_get_value (user_var *uvar);
70 
71 GretlType user_var_get_type (user_var *uvar);
72 
73 double user_var_get_scalar_value (user_var *uvar);
74 
75 int user_var_set_scalar_value (user_var *uvar, double x);
76 
77 void *user_var_get_value_by_name (const char *name);
78 
79 void *user_var_get_value_and_type (const char *name,
80 				   GretlType *type);
81 
82 char *user_string_resize (const char *name, size_t len, int *err);
83 
84 char *user_string_reset (const char *name, const char *repl,
85 			 int *err);
86 
87 void *user_var_steal_value (user_var *uvar);
88 
89 void *user_var_unstack_value (user_var *uvar);
90 
91 int user_var_get_level (user_var *uvar);
92 
93 int user_var_get_flags (user_var *uvar);
94 
95 int user_var_set_flag (user_var *uvar, UVFlags flag);
96 
97 int user_var_unset_flag (user_var *uvar, UVFlags flag);
98 
99 void user_var_privatize_by_name (const char *name);
100 
101 int user_var_set_name (user_var *uvar, const char *name);
102 
103 int user_var_adjust_level (user_var *uvar, int adj);
104 
105 int user_var_localize (const char *origname,
106 		       const char *localname,
107 		       GretlType type);
108 
109 void set_previous_depth (int d);
110 
111 void switch_uservar_hash (int level);
112 
113 int copy_as_arg (const char *param_name, GretlType type,
114 		 void *value);
115 
116 int arg_add_as_shell (const char *name,
117 		      GretlType type,
118 		      void *value);
119 
120 int *copy_list_as_arg (const char *param_name, int *list,
121 		       int *err);
122 
123 int user_var_replace_value (user_var *uvar, void *value,
124 			    GretlType type);
125 
126 int user_matrix_replace_matrix_by_name (const char *name,
127 					gretl_matrix *m);
128 
129 void destroy_user_vars (void);
130 
131 int destroy_user_vars_at_level (int level);
132 
133 int destroy_private_matrices (void);
134 
135 int destroy_private_uvars (void);
136 
137 int delete_user_vars_of_type (GretlType type, PRN *prn);
138 
139 int n_user_matrices (void);
140 
141 int n_user_scalars (void);
142 
143 int n_user_lists (void);
144 
145 int n_user_bundles (void);
146 
147 GList *user_var_names_for_type (GretlType type);
148 
149 GList *user_var_list_for_type (GretlType type);
150 
151 void set_user_var_callback (USER_VAR_FUNC);
152 
153 int copy_matrix_as (const gretl_matrix *m, const char *newname,
154 		    int fnarg);
155 
156 int private_matrix_add (gretl_matrix *M, const char *name);
157 
158 double get_scalar_value_by_name (const char *name, int *err);
159 
160 int gretl_is_scalar (const char *name);
161 
162 double gretl_scalar_get_value (const char *name, int *err);
163 
164 int gretl_scalar_set_value (const char *name, double val);
165 
166 int gretl_scalar_add (const char *name, double val);
167 
168 int gretl_scalar_add_mutable (const char *name, double val);
169 
170 int gretl_scalar_convert_to_matrix (user_var *uvar);
171 
172 int private_scalar_add (double val, const char *name);
173 
174 int add_auxiliary_scalar (const char *name, double val);
175 
176 void set_auxiliary_scalars (void);
177 
178 void unset_auxiliary_scalars (void);
179 
180 void set_scalar_edit_callback (void (*callback));
181 
182 void destroy_private_scalars (void);
183 
184 void print_scalars (PRN *prn);
185 
186 void print_scalar_by_name (const char *name, PRN *prn);
187 
188 char *get_string_by_name (const char *name);
189 
190 char *copy_string_by_name (const char *name, int *err);
191 
192 int gretl_is_string (const char *name);
193 
194 int is_user_string (const char *name);
195 
196 char *temp_name_for_bundle (void);
197 
198 int max_varno_in_saved_lists (void);
199 
200 int gretl_lists_revise (const int *dlist, int dmin);
201 
202 void gretl_lists_cleanup (void);
203 
204 int serialize_user_vars (const char *dirname);
205 
206 int deserialize_user_vars (const char *dirname);
207 
208 int print_user_var_by_name (const char *name,
209 			    const DATASET *dset,
210 			    gretlopt opt,
211 			    PRN *prn);
212 
213 int list_user_vars_of_type (const DATASET *dset,
214 			    PRN *prn);
215 
216 int leads_midas_list (int ID, const DATASET *dset,
217 		      char *listname);
218 
219 int in_midas_list (int ID, const DATASET *dset,
220 		   char *listname);
221 
222 const char *
223 get_listname_by_consecutive_content (int l0, int l1);
224 
225 int gretl_is_list (const char *name);
226 
227 int *get_list_by_name (const char *name);
228 
229 int user_list_append (user_var *uvar, const int *add);
230 
231 int user_list_subtract (user_var *uvar, int *sub,
232 			const DATASET *dset);
233 
234 int user_list_replace (user_var *uvar, const int *src);
235 
236 int remember_list (const int *list, const char *name,
237 		   PRN *prn);
238 
239 #endif /* USERVAR_H_ */
240