1 | /* gtkconstraintequationprivate.h: Constraint expressions and variables |
2 | * Copyright 2019 GNOME Foundation |
3 | * |
4 | * SPDX-License-Identifier: LGPL-2.1-or-later |
5 | * |
6 | * This library is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU Lesser General Public |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2.1 of the License, or (at your option) any later version. |
10 | * |
11 | * This library is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | * Lesser General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU Lesser General Public |
17 | * License along with this library. If not, see <http://www.gnu.org/licenses/>. |
18 | * |
19 | * Author: Emmanuele Bassi |
20 | */ |
21 | |
22 | #pragma once |
23 | |
24 | #include "gtkconstrainttypesprivate.h" |
25 | |
26 | G_BEGIN_DECLS |
27 | |
28 | GtkConstraintVariable * |
29 | gtk_constraint_variable_new (const char *prefix, |
30 | const char *name); |
31 | |
32 | GtkConstraintVariable * |
33 | gtk_constraint_variable_new_dummy (const char *name); |
34 | |
35 | GtkConstraintVariable * |
36 | gtk_constraint_variable_new_objective (const char *name); |
37 | |
38 | GtkConstraintVariable * |
39 | gtk_constraint_variable_new_slack (const char *name); |
40 | |
41 | GtkConstraintVariable * |
42 | gtk_constraint_variable_ref (GtkConstraintVariable *variable); |
43 | |
44 | void |
45 | gtk_constraint_variable_unref (GtkConstraintVariable *variable); |
46 | |
47 | void |
48 | gtk_constraint_variable_set_value (GtkConstraintVariable *variable, |
49 | double value); |
50 | |
51 | double |
52 | gtk_constraint_variable_get_value (const GtkConstraintVariable *variable); |
53 | |
54 | char * |
55 | gtk_constraint_variable_to_string (const GtkConstraintVariable *variable); |
56 | |
57 | gboolean |
58 | gtk_constraint_variable_is_external (const GtkConstraintVariable *variable); |
59 | |
60 | gboolean |
61 | gtk_constraint_variable_is_pivotable (const GtkConstraintVariable *variable); |
62 | |
63 | gboolean |
64 | gtk_constraint_variable_is_restricted (const GtkConstraintVariable *variable); |
65 | |
66 | gboolean |
67 | gtk_constraint_variable_is_dummy (const GtkConstraintVariable *variable); |
68 | |
69 | typedef struct { |
70 | GtkConstraintVariable *first; |
71 | GtkConstraintVariable *second; |
72 | } GtkConstraintVariablePair; |
73 | |
74 | GtkConstraintVariablePair * |
75 | gtk_constraint_variable_pair_new (GtkConstraintVariable *first, |
76 | GtkConstraintVariable *second); |
77 | |
78 | void |
79 | gtk_constraint_variable_pair_free (GtkConstraintVariablePair *pair); |
80 | |
81 | typedef struct _GtkConstraintVariableSet GtkConstraintVariableSet; |
82 | |
83 | GtkConstraintVariableSet * |
84 | gtk_constraint_variable_set_new (void); |
85 | |
86 | void |
87 | gtk_constraint_variable_set_free (GtkConstraintVariableSet *set); |
88 | |
89 | gboolean |
90 | gtk_constraint_variable_set_add (GtkConstraintVariableSet *set, |
91 | GtkConstraintVariable *variable); |
92 | |
93 | gboolean |
94 | gtk_constraint_variable_set_remove (GtkConstraintVariableSet *set, |
95 | GtkConstraintVariable *variable); |
96 | |
97 | gboolean |
98 | gtk_constraint_variable_set_is_empty (GtkConstraintVariableSet *set); |
99 | |
100 | gboolean |
101 | gtk_constraint_variable_set_is_singleton (GtkConstraintVariableSet *set); |
102 | |
103 | int |
104 | gtk_constraint_variable_set_size (GtkConstraintVariableSet *set); |
105 | |
106 | typedef struct { |
107 | /*< private >*/ |
108 | gpointer dummy1; |
109 | gpointer dummy2; |
110 | gint64 dummy3; |
111 | } GtkConstraintVariableSetIter; |
112 | |
113 | void |
114 | gtk_constraint_variable_set_iter_init (GtkConstraintVariableSetIter *iter, |
115 | GtkConstraintVariableSet *set); |
116 | |
117 | gboolean |
118 | gtk_constraint_variable_set_iter_next (GtkConstraintVariableSetIter *iter, |
119 | GtkConstraintVariable **variable_p); |
120 | |
121 | GtkConstraintExpression * |
122 | gtk_constraint_expression_new (double constant); |
123 | |
124 | GtkConstraintExpression * |
125 | gtk_constraint_expression_new_from_variable (GtkConstraintVariable *variable); |
126 | |
127 | GtkConstraintExpression * |
128 | gtk_constraint_expression_ref (GtkConstraintExpression *expression); |
129 | |
130 | void |
131 | gtk_constraint_expression_unref (GtkConstraintExpression *expression); |
132 | |
133 | GtkConstraintExpression * |
134 | gtk_constraint_expression_clone (GtkConstraintExpression *expression); |
135 | |
136 | void |
137 | gtk_constraint_expression_set_constant (GtkConstraintExpression *expression, |
138 | double constant); |
139 | double |
140 | gtk_constraint_expression_get_constant (const GtkConstraintExpression *expression); |
141 | |
142 | gboolean |
143 | gtk_constraint_expression_is_constant (const GtkConstraintExpression *expression); |
144 | |
145 | void |
146 | gtk_constraint_expression_add_expression (GtkConstraintExpression *a_expr, |
147 | GtkConstraintExpression *b_expr, |
148 | double n, |
149 | GtkConstraintVariable *subject, |
150 | GtkConstraintSolver *solver); |
151 | |
152 | void |
153 | gtk_constraint_expression_add_variable (GtkConstraintExpression *expression, |
154 | GtkConstraintVariable *variable, |
155 | double coefficient, |
156 | GtkConstraintVariable *subject, |
157 | GtkConstraintSolver *solver); |
158 | |
159 | void |
160 | gtk_constraint_expression_remove_variable (GtkConstraintExpression *expression, |
161 | GtkConstraintVariable *variable); |
162 | |
163 | void |
164 | gtk_constraint_expression_set_variable (GtkConstraintExpression *expression, |
165 | GtkConstraintVariable *variable, |
166 | double coefficient); |
167 | |
168 | double |
169 | gtk_constraint_expression_get_coefficient (GtkConstraintExpression *expression, |
170 | GtkConstraintVariable *variable); |
171 | |
172 | char * |
173 | gtk_constraint_expression_to_string (const GtkConstraintExpression *expression); |
174 | |
175 | double |
176 | gtk_constraint_expression_new_subject (GtkConstraintExpression *expression, |
177 | GtkConstraintVariable *subject); |
178 | |
179 | void |
180 | gtk_constraint_expression_change_subject (GtkConstraintExpression *expression, |
181 | GtkConstraintVariable *old_subject, |
182 | GtkConstraintVariable *new_subject); |
183 | |
184 | void |
185 | gtk_constraint_expression_substitute_out (GtkConstraintExpression *expression, |
186 | GtkConstraintVariable *out_var, |
187 | GtkConstraintExpression *expr, |
188 | GtkConstraintVariable *subject, |
189 | GtkConstraintSolver *solver); |
190 | |
191 | GtkConstraintVariable * |
192 | gtk_constraint_expression_get_pivotable_variable (GtkConstraintExpression *expression); |
193 | |
194 | GtkConstraintExpression * |
195 | gtk_constraint_expression_plus_constant (GtkConstraintExpression *expression, |
196 | double constant); |
197 | |
198 | GtkConstraintExpression * |
199 | gtk_constraint_expression_minus_constant (GtkConstraintExpression *expression, |
200 | double constant); |
201 | |
202 | GtkConstraintExpression * |
203 | gtk_constraint_expression_plus_variable (GtkConstraintExpression *expression, |
204 | GtkConstraintVariable *variable); |
205 | |
206 | GtkConstraintExpression * |
207 | gtk_constraint_expression_minus_variable (GtkConstraintExpression *expression, |
208 | GtkConstraintVariable *variable); |
209 | |
210 | GtkConstraintExpression * |
211 | gtk_constraint_expression_multiply_by (GtkConstraintExpression *expression, |
212 | double factor); |
213 | |
214 | GtkConstraintExpression * |
215 | gtk_constraint_expression_divide_by (GtkConstraintExpression *expression, |
216 | double factor); |
217 | |
218 | struct _GtkConstraintExpressionBuilder |
219 | { |
220 | /*< private >*/ |
221 | gpointer dummy1; |
222 | gpointer dummy2; |
223 | int dummy3; |
224 | }; |
225 | |
226 | void |
227 | gtk_constraint_expression_builder_init (GtkConstraintExpressionBuilder *builder, |
228 | GtkConstraintSolver *solver); |
229 | |
230 | void |
231 | gtk_constraint_expression_builder_term (GtkConstraintExpressionBuilder *builder, |
232 | GtkConstraintVariable *term); |
233 | |
234 | void |
235 | gtk_constraint_expression_builder_plus (GtkConstraintExpressionBuilder *builder); |
236 | |
237 | void |
238 | gtk_constraint_expression_builder_minus (GtkConstraintExpressionBuilder *builder); |
239 | |
240 | void |
241 | gtk_constraint_expression_builder_divide_by (GtkConstraintExpressionBuilder *builder); |
242 | |
243 | void |
244 | gtk_constraint_expression_builder_multiply_by (GtkConstraintExpressionBuilder *builder); |
245 | |
246 | void |
247 | gtk_constraint_expression_builder_constant (GtkConstraintExpressionBuilder *builder, |
248 | double value); |
249 | |
250 | GtkConstraintExpression * |
251 | gtk_constraint_expression_builder_finish (GtkConstraintExpressionBuilder *builder) G_GNUC_WARN_UNUSED_RESULT; |
252 | |
253 | /*< private > |
254 | * GtkConstraintExpressionIter: |
255 | * |
256 | * An iterator object for terms inside a `GtkConstraintExpression`. |
257 | */ |
258 | typedef struct { |
259 | /*< private >*/ |
260 | gpointer dummy1; |
261 | gpointer dummy2; |
262 | gint64 dummy3; |
263 | } GtkConstraintExpressionIter; |
264 | |
265 | void |
266 | gtk_constraint_expression_iter_init (GtkConstraintExpressionIter *iter, |
267 | GtkConstraintExpression *equation); |
268 | |
269 | gboolean |
270 | gtk_constraint_expression_iter_next (GtkConstraintExpressionIter *iter, |
271 | GtkConstraintVariable **variable, |
272 | double *coefficient); |
273 | |
274 | gboolean |
275 | gtk_constraint_expression_iter_prev (GtkConstraintExpressionIter *iter, |
276 | GtkConstraintVariable **variable, |
277 | double *coefficient); |
278 | |
279 | G_END_DECLS |
280 | |