Commit | Line | Data |
9d759b64 |
1 | package DX::Utils; |
2 | |
3 | use strictures 2; |
4 | use Exporter 'import'; |
5 | |
efad53c4 |
6 | my @const = ( |
7 | my @dep_types = qw(EXISTENCE_OF INDICES_OF TYPE_OF CONTENTS_OF), |
8 | my @ev_types = qw(VALUE_SET VALUE_EXISTS), |
9 | ); |
9d759b64 |
10 | |
efad53c4 |
11 | our @EXPORT_OK = ( |
12 | @const, |
13 | my @builders = qw(step string number dict proposition) |
14 | ); |
15 | |
16 | our %EXPORT_TAGS = ( |
17 | all => \@EXPORT_OK, |
18 | dep_types => \@dep_types, |
19 | event_types => \@ev_types, |
20 | builders => \@builders, |
21 | ); |
22 | |
23 | require constant; |
24 | |
25 | # use constant INDICES_OF => \*INDICES_OF; |
26 | |
27 | constant->import(+{ |
28 | map {; no strict 'refs'; $_ => \*$_ } @const |
29 | }); |
30 | |
31 | # $INDICES_OF = 1, ... |
32 | |
33 | do { no strict 'refs'; ${$dep_types[$_-1]} = $_ } for 1..@dep_types; |
34 | |
35 | # VALUE_EXISTS needs to trigger indices checks on its parent |
36 | |
37 | our $VALUE_EXISTS = 1; |
38 | |
39 | # VALUE_EXISTS triggers all types, VALUE_SET all but EXISTENCE_OF |
40 | |
41 | our @VALUE_EXISTS = (EXISTENCE_OF(), INDICES_OF(), TYPE_OF(), CONTENTS_OF()); |
42 | our @VALUE_SET = (INDICES_OF(), TYPE_OF(), CONTENTS_OF()); |
9d759b64 |
43 | |
44 | sub step { |
45 | DX::Step::Normal->new(@_); |
46 | } |
47 | |
48 | sub string { |
49 | DX::Value::String->new(string_value => $_[0]) |
50 | } |
51 | |
52 | sub number { |
53 | DX::Value::Number->new(number_value => $_[0]); |
54 | } |
55 | |
efad53c4 |
56 | sub dict { |
57 | DX::Value::Dict->new( |
58 | members => { @_ }, |
59 | ); |
60 | } |
61 | |
62 | sub proposition { |
63 | my ($pred, @args) = @_; |
64 | DX::Proposition->new( |
65 | predicate => $pred, |
66 | args => \@args, |
67 | ); |
68 | } |
69 | |
9d759b64 |
70 | # Here so that circular require doesn't stab us in the face |
71 | |
72 | require DX::Step::Normal; |
73 | require DX::Value::String; |
74 | require DX::Value::Number; |
efad53c4 |
75 | require DX::Value::Dict; |
76 | require DX::Proposition; |
9d759b64 |
77 | |
78 | 1; |