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
26G_BEGIN_DECLS
27
28GtkConstraintVariable *
29gtk_constraint_variable_new (const char *prefix,
30 const char *name);
31
32GtkConstraintVariable *
33gtk_constraint_variable_new_dummy (const char *name);
34
35GtkConstraintVariable *
36gtk_constraint_variable_new_objective (const char *name);
37
38GtkConstraintVariable *
39gtk_constraint_variable_new_slack (const char *name);
40
41GtkConstraintVariable *
42gtk_constraint_variable_ref (GtkConstraintVariable *variable);
43
44void
45gtk_constraint_variable_unref (GtkConstraintVariable *variable);
46
47void
48gtk_constraint_variable_set_value (GtkConstraintVariable *variable,
49 double value);
50
51double
52gtk_constraint_variable_get_value (const GtkConstraintVariable *variable);
53
54char *
55gtk_constraint_variable_to_string (const GtkConstraintVariable *variable);
56
57gboolean
58gtk_constraint_variable_is_external (const GtkConstraintVariable *variable);
59
60gboolean
61gtk_constraint_variable_is_pivotable (const GtkConstraintVariable *variable);
62
63gboolean
64gtk_constraint_variable_is_restricted (const GtkConstraintVariable *variable);
65
66gboolean
67gtk_constraint_variable_is_dummy (const GtkConstraintVariable *variable);
68
69typedef struct {
70 GtkConstraintVariable *first;
71 GtkConstraintVariable *second;
72} GtkConstraintVariablePair;
73
74GtkConstraintVariablePair *
75gtk_constraint_variable_pair_new (GtkConstraintVariable *first,
76 GtkConstraintVariable *second);
77
78void
79gtk_constraint_variable_pair_free (GtkConstraintVariablePair *pair);
80
81typedef struct _GtkConstraintVariableSet GtkConstraintVariableSet;
82
83GtkConstraintVariableSet *
84gtk_constraint_variable_set_new (void);
85
86void
87gtk_constraint_variable_set_free (GtkConstraintVariableSet *set);
88
89gboolean
90gtk_constraint_variable_set_add (GtkConstraintVariableSet *set,
91 GtkConstraintVariable *variable);
92
93gboolean
94gtk_constraint_variable_set_remove (GtkConstraintVariableSet *set,
95 GtkConstraintVariable *variable);
96
97gboolean
98gtk_constraint_variable_set_is_empty (GtkConstraintVariableSet *set);
99
100gboolean
101gtk_constraint_variable_set_is_singleton (GtkConstraintVariableSet *set);
102
103int
104gtk_constraint_variable_set_size (GtkConstraintVariableSet *set);
105
106typedef struct {
107 /*< private >*/
108 gpointer dummy1;
109 gpointer dummy2;
110 gint64 dummy3;
111} GtkConstraintVariableSetIter;
112
113void
114gtk_constraint_variable_set_iter_init (GtkConstraintVariableSetIter *iter,
115 GtkConstraintVariableSet *set);
116
117gboolean
118gtk_constraint_variable_set_iter_next (GtkConstraintVariableSetIter *iter,
119 GtkConstraintVariable **variable_p);
120
121GtkConstraintExpression *
122gtk_constraint_expression_new (double constant);
123
124GtkConstraintExpression *
125gtk_constraint_expression_new_from_variable (GtkConstraintVariable *variable);
126
127GtkConstraintExpression *
128gtk_constraint_expression_ref (GtkConstraintExpression *expression);
129
130void
131gtk_constraint_expression_unref (GtkConstraintExpression *expression);
132
133GtkConstraintExpression *
134gtk_constraint_expression_clone (GtkConstraintExpression *expression);
135
136void
137gtk_constraint_expression_set_constant (GtkConstraintExpression *expression,
138 double constant);
139double
140gtk_constraint_expression_get_constant (const GtkConstraintExpression *expression);
141
142gboolean
143gtk_constraint_expression_is_constant (const GtkConstraintExpression *expression);
144
145void
146gtk_constraint_expression_add_expression (GtkConstraintExpression *a_expr,
147 GtkConstraintExpression *b_expr,
148 double n,
149 GtkConstraintVariable *subject,
150 GtkConstraintSolver *solver);
151
152void
153gtk_constraint_expression_add_variable (GtkConstraintExpression *expression,
154 GtkConstraintVariable *variable,
155 double coefficient,
156 GtkConstraintVariable *subject,
157 GtkConstraintSolver *solver);
158
159void
160gtk_constraint_expression_remove_variable (GtkConstraintExpression *expression,
161 GtkConstraintVariable *variable);
162
163void
164gtk_constraint_expression_set_variable (GtkConstraintExpression *expression,
165 GtkConstraintVariable *variable,
166 double coefficient);
167
168double
169gtk_constraint_expression_get_coefficient (GtkConstraintExpression *expression,
170 GtkConstraintVariable *variable);
171
172char *
173gtk_constraint_expression_to_string (const GtkConstraintExpression *expression);
174
175double
176gtk_constraint_expression_new_subject (GtkConstraintExpression *expression,
177 GtkConstraintVariable *subject);
178
179void
180gtk_constraint_expression_change_subject (GtkConstraintExpression *expression,
181 GtkConstraintVariable *old_subject,
182 GtkConstraintVariable *new_subject);
183
184void
185gtk_constraint_expression_substitute_out (GtkConstraintExpression *expression,
186 GtkConstraintVariable *out_var,
187 GtkConstraintExpression *expr,
188 GtkConstraintVariable *subject,
189 GtkConstraintSolver *solver);
190
191GtkConstraintVariable *
192gtk_constraint_expression_get_pivotable_variable (GtkConstraintExpression *expression);
193
194GtkConstraintExpression *
195gtk_constraint_expression_plus_constant (GtkConstraintExpression *expression,
196 double constant);
197
198GtkConstraintExpression *
199gtk_constraint_expression_minus_constant (GtkConstraintExpression *expression,
200 double constant);
201
202GtkConstraintExpression *
203gtk_constraint_expression_plus_variable (GtkConstraintExpression *expression,
204 GtkConstraintVariable *variable);
205
206GtkConstraintExpression *
207gtk_constraint_expression_minus_variable (GtkConstraintExpression *expression,
208 GtkConstraintVariable *variable);
209
210GtkConstraintExpression *
211gtk_constraint_expression_multiply_by (GtkConstraintExpression *expression,
212 double factor);
213
214GtkConstraintExpression *
215gtk_constraint_expression_divide_by (GtkConstraintExpression *expression,
216 double factor);
217
218struct _GtkConstraintExpressionBuilder
219{
220 /*< private >*/
221 gpointer dummy1;
222 gpointer dummy2;
223 int dummy3;
224};
225
226void
227gtk_constraint_expression_builder_init (GtkConstraintExpressionBuilder *builder,
228 GtkConstraintSolver *solver);
229
230void
231gtk_constraint_expression_builder_term (GtkConstraintExpressionBuilder *builder,
232 GtkConstraintVariable *term);
233
234void
235gtk_constraint_expression_builder_plus (GtkConstraintExpressionBuilder *builder);
236
237void
238gtk_constraint_expression_builder_minus (GtkConstraintExpressionBuilder *builder);
239
240void
241gtk_constraint_expression_builder_divide_by (GtkConstraintExpressionBuilder *builder);
242
243void
244gtk_constraint_expression_builder_multiply_by (GtkConstraintExpressionBuilder *builder);
245
246void
247gtk_constraint_expression_builder_constant (GtkConstraintExpressionBuilder *builder,
248 double value);
249
250GtkConstraintExpression *
251gtk_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 */
258typedef struct {
259 /*< private >*/
260 gpointer dummy1;
261 gpointer dummy2;
262 gint64 dummy3;
263} GtkConstraintExpressionIter;
264
265void
266gtk_constraint_expression_iter_init (GtkConstraintExpressionIter *iter,
267 GtkConstraintExpression *equation);
268
269gboolean
270gtk_constraint_expression_iter_next (GtkConstraintExpressionIter *iter,
271 GtkConstraintVariable **variable,
272 double *coefficient);
273
274gboolean
275gtk_constraint_expression_iter_prev (GtkConstraintExpressionIter *iter,
276 GtkConstraintVariable **variable,
277 double *coefficient);
278
279G_END_DECLS
280

source code of gtk/gtk/gtkconstraintexpressionprivate.h