Skip to content

Commit 22a8b50

Browse files
Move method definition to cpp file
1 parent 1bcef50 commit 22a8b50

File tree

2 files changed

+110
-84
lines changed

2 files changed

+110
-84
lines changed

src/solvers/refinement/string_builtin_function.cpp

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,35 @@ std::vector<mp_integer> string_concatenation_builtin_functiont::eval(
137137
return result;
138138
}
139139

140+
string_constraintst string_concatenation_builtin_functiont::constraints(
141+
string_constraint_generatort &generator) const
142+
143+
{
144+
auto pair = [&]() -> std::pair<exprt, string_constraintst> {
145+
if(args.size() == 0)
146+
return add_axioms_for_concat(
147+
generator.fresh_symbol, result, input1, input2);
148+
if(args.size() == 2)
149+
{
150+
return add_axioms_for_concat_substr(
151+
generator.fresh_symbol, result, input1, input2, args[0], args[1]);
152+
}
153+
UNREACHABLE;
154+
}();
155+
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
156+
return pair.second;
157+
}
158+
159+
exprt string_concatenation_builtin_functiont::length_constraint() const
160+
{
161+
if(args.size() == 0)
162+
return length_constraint_for_concat(result, input1, input2);
163+
if(args.size() == 2)
164+
return length_constraint_for_concat_substr(
165+
result, input1, input2, args[0], args[1]);
166+
UNREACHABLE;
167+
}
168+
140169
optionalt<exprt> string_concat_char_builtin_functiont::eval(
141170
const std::function<exprt(const exprt &)> &get_value) const
142171
{
@@ -158,6 +187,20 @@ optionalt<exprt> string_concat_char_builtin_functiont::eval(
158187
return make_string(input_opt.value(), type);
159188
}
160189

190+
string_constraintst string_concat_char_builtin_functiont::constraints(
191+
string_constraint_generatort &generator) const
192+
{
193+
auto pair = add_axioms_for_concat_char(
194+
generator.fresh_symbol, result, input, character);
195+
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
196+
return pair.second;
197+
}
198+
199+
exprt string_concat_char_builtin_functiont::length_constraint() const
200+
{
201+
return length_constraint_for_concat_char(result, input);
202+
}
203+
161204
optionalt<exprt> string_set_char_builtin_functiont::eval(
162205
const std::function<exprt(const exprt &)> &get_value) const
163206
{
@@ -174,6 +217,15 @@ optionalt<exprt> string_set_char_builtin_functiont::eval(
174217
return make_string(input_opt.value(), type);
175218
}
176219

220+
string_constraintst string_set_char_builtin_functiont::constraints(
221+
string_constraint_generatort &generator) const
222+
{
223+
auto pair = add_axioms_for_set_char(
224+
generator.fresh_symbol, result, input, position, character);
225+
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
226+
return pair.second;
227+
}
228+
177229
exprt string_set_char_builtin_functiont::length_constraint() const
178230
{
179231
const exprt out_of_bounds = or_exprt(
@@ -284,6 +336,30 @@ optionalt<exprt> string_insertion_builtin_functiont::eval(
284336
return make_string(result_value, type);
285337
}
286338

339+
string_constraintst string_insertion_builtin_functiont::constraints(
340+
string_constraint_generatort &generator) const
341+
{
342+
if(args.size() == 1)
343+
{
344+
auto pair = add_axioms_for_insert(
345+
generator.fresh_symbol, result, input1, input2, args[0]);
346+
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
347+
return pair.second;
348+
}
349+
if(args.size() == 3)
350+
UNIMPLEMENTED;
351+
UNREACHABLE;
352+
}
353+
354+
exprt string_insertion_builtin_functiont::length_constraint() const
355+
{
356+
if(args.size() == 1)
357+
return length_constraint_for_insert(result, input1, input2);
358+
if(args.size() == 3)
359+
UNIMPLEMENTED;
360+
UNREACHABLE;
361+
}
362+
287363
/// Constructor from arguments of a function application.
288364
/// The arguments in `fun_args` should be in order:
289365
/// an integer `result.length`, a character pointer `&result[0]`,
@@ -333,6 +409,20 @@ optionalt<exprt> string_of_int_builtin_functiont::eval(
333409
right_to_left_characters.rbegin(), right_to_left_characters.rend(), type);
334410
}
335411

412+
string_constraintst string_of_int_builtin_functiont::constraints(
413+
string_constraint_generatort &generator) const
414+
{
415+
auto pair = add_axioms_for_string_of_int_with_radix(
416+
generator.fresh_symbol,
417+
result,
418+
arg,
419+
radix,
420+
0,
421+
generator.ns);
422+
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
423+
return pair.second;
424+
}
425+
336426
exprt string_of_int_builtin_functiont::length_constraint() const
337427
{
338428
const typet &type = result.length().type();
@@ -391,3 +481,12 @@ string_builtin_function_with_no_evalt::string_builtin_function_with_no_evalt(
391481
args.push_back(fun_args[i]);
392482
}
393483
}
484+
485+
string_constraintst string_builtin_function_with_no_evalt::constraints(
486+
string_constraint_generatort &generator) const
487+
{
488+
auto pair = generator.add_axioms_for_function_application(
489+
generator.fresh_symbol, function_application);
490+
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
491+
return pair.second;
492+
}

src/solvers/refinement/string_builtin_function.h

Lines changed: 11 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
#include <vector>
88
#include <util/optional.h>
99
#include <util/string_expr.h>
10-
#include "string_constraint_generator.h"
1110

1211
class array_poolt;
12+
class string_constraintst;
13+
class string_constraint_generatort;
1314

1415
#define CHARACTER_FOR_UNKNOWN '?'
1516

@@ -129,18 +130,9 @@ class string_concat_char_builtin_functiont
129130
}
130131

131132
string_constraintst
132-
constraints(string_constraint_generatort &generator) const override
133-
{
134-
auto pair = add_axioms_for_concat_char(
135-
generator.fresh_symbol, result, input, character);
136-
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
137-
return pair.second;
138-
}
133+
constraints(string_constraint_generatort &generator) const override;
139134

140-
exprt length_constraint() const override
141-
{
142-
return length_constraint_for_concat_char(result, input);
143-
}
135+
exprt length_constraint() const override;
144136
};
145137

146138
/// Setting a character at a particular position of a string
@@ -175,13 +167,7 @@ class string_set_char_builtin_functiont
175167
}
176168

177169
string_constraintst
178-
constraints(string_constraint_generatort &generator) const override
179-
{
180-
auto pair = add_axioms_for_set_char(
181-
generator.fresh_symbol, result, input, position, character);
182-
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
183-
return pair.second;
184-
}
170+
constraints(string_constraint_generatort &generator) const override;
185171

186172
// \todo: length_constraint is not the best possible name because we also
187173
// \todo: add constraint about the return code
@@ -298,28 +284,9 @@ class string_insertion_builtin_functiont : public string_builtin_functiont
298284
}
299285

300286
string_constraintst
301-
constraints(string_constraint_generatort &generator) const override
302-
{
303-
if(args.size() == 1)
304-
{
305-
auto pair = add_axioms_for_insert(
306-
generator.fresh_symbol, result, input1, input2, args[0]);
307-
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
308-
return pair.second;
309-
}
310-
if(args.size() == 3)
311-
UNIMPLEMENTED;
312-
UNREACHABLE;
313-
};
287+
constraints(string_constraint_generatort &generator) const override;
314288

315-
exprt length_constraint() const override
316-
{
317-
if(args.size() == 1)
318-
return length_constraint_for_insert(result, input1, input2);
319-
if(args.size() == 3)
320-
UNIMPLEMENTED;
321-
UNREACHABLE;
322-
};
289+
exprt length_constraint() const override;
323290

324291
bool maybe_testing_function() const override
325292
{
@@ -359,32 +326,9 @@ class string_concatenation_builtin_functiont final
359326
}
360327

361328
string_constraintst
362-
constraints(string_constraint_generatort &generator) const override
363-
{
364-
auto pair = [&]() -> std::pair<exprt, string_constraintst> {
365-
if(args.size() == 0)
366-
return add_axioms_for_concat(
367-
generator.fresh_symbol, result, input1, input2);
368-
if(args.size() == 2)
369-
{
370-
return add_axioms_for_concat_substr(
371-
generator.fresh_symbol, result, input1, input2, args[0], args[1]);
372-
}
373-
UNREACHABLE;
374-
}();
375-
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
376-
return pair.second;
377-
};
329+
constraints(string_constraint_generatort &generator) const override;
378330

379-
exprt length_constraint() const override
380-
{
381-
if(args.size() == 0)
382-
return length_constraint_for_concat(result, input1, input2);
383-
if(args.size() == 2)
384-
return length_constraint_for_concat_substr(
385-
result, input1, input2, args[0], args[1]);
386-
UNREACHABLE;
387-
}
331+
exprt length_constraint() const override;
388332
};
389333

390334
/// String creation from other types
@@ -436,18 +380,7 @@ class string_of_int_builtin_functiont : public string_creation_builtin_functiont
436380
}
437381

438382
string_constraintst
439-
constraints(string_constraint_generatort &generator) const override
440-
{
441-
auto pair = add_axioms_for_string_of_int_with_radix(
442-
generator.fresh_symbol,
443-
result,
444-
arg,
445-
radix,
446-
0,
447-
generator.ns);
448-
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
449-
return pair.second;
450-
}
383+
constraints(string_constraint_generatort &generator) const override;
451384

452385
exprt length_constraint() const override;
453386

@@ -505,13 +438,7 @@ class string_builtin_function_with_no_evalt : public string_builtin_functiont
505438
}
506439

507440
string_constraintst
508-
constraints(string_constraint_generatort &generator) const override
509-
{
510-
auto pair = generator.add_axioms_for_function_application(
511-
generator.fresh_symbol, function_application);
512-
pair.second.existential.push_back(equal_exprt(pair.first, return_code));
513-
return pair.second;
514-
};
441+
constraints(string_constraint_generatort &generator) const override;
515442

516443
exprt length_constraint() const override
517444
{

0 commit comments

Comments
 (0)