… | |
… | |
17 | |
17 | |
18 | package Types::Serialiser; |
18 | package Types::Serialiser; |
19 | |
19 | |
20 | use common::sense; # required to suppress annoying warnings |
20 | use common::sense; # required to suppress annoying warnings |
21 | |
21 | |
22 | our $VERSION = '1.0'; |
22 | our $VERSION = '1.01'; |
23 | |
23 | |
24 | =head1 SIMPLE SCALAR CONSTANTS |
24 | =head1 SIMPLE SCALAR CONSTANTS |
25 | |
25 | |
26 | Simple scalar constants are values that are overloaded to act like simple |
26 | Simple scalar constants are values that are overloaded to act like simple |
27 | Perl values, but have (class) type to differentiate them from normal Perl |
27 | Perl values, but have (class) type to differentiate them from normal Perl |
28 | scalars. This is necessary because these have different representations in |
28 | scalars. This is necessary because these have different representations in |
29 | the serialisation formats. |
29 | the serialisation formats. |
30 | |
30 | |
|
|
31 | In the following, functions with zero or one arguments have a prototype of |
|
|
32 | C<()> and C<($)>, respectively, so act as constants and unary operators. |
|
|
33 | |
31 | =head2 BOOLEANS (Types::Serialiser::Boolean class) |
34 | =head2 BOOLEANS (Types::Serialiser::Boolean class) |
32 | |
35 | |
33 | This type has only two instances, true and false. A natural representation |
36 | This type has only two instances, true and false. A natural representation |
34 | for these in Perl is C<1> and C<0>, but serialisation formats need to be |
37 | for these in Perl is C<1> and C<0>, but serialisation formats need to be |
35 | able to differentiate between them and mere numbers. |
38 | able to differentiate between them and mere numbers. |
… | |
… | |
51 | the number C<0>. It is up to you whether you use the variable form |
54 | the number C<0>. It is up to you whether you use the variable form |
52 | (C<$Types::Serialiser::false>) or the constant form (C<Types::Serialiser::false>). |
55 | (C<$Types::Serialiser::false>) or the constant form (C<Types::Serialiser::false>). |
53 | |
56 | |
54 | The constant is represented as a reference to a scalar containing C<0> - |
57 | The constant is represented as a reference to a scalar containing C<0> - |
55 | implementations are allowed to directly test for this. |
58 | implementations are allowed to directly test for this. |
|
|
59 | |
|
|
60 | =item Types::Serialiser::as_bool $value |
|
|
61 | |
|
|
62 | Converts a Perl scalar into a boolean, which is useful syntactic |
|
|
63 | sugar. Strictly equivalent to: |
|
|
64 | |
|
|
65 | $value ? $Types::Serialiser::true : $Types::Serialiser::false |
56 | |
66 | |
57 | =item $is_bool = Types::Serialiser::is_bool $value |
67 | =item $is_bool = Types::Serialiser::is_bool $value |
58 | |
68 | |
59 | Returns true iff the C<$value> is either C<$Types::Serialiser::true> or |
69 | Returns true iff the C<$value> is either C<$Types::Serialiser::true> or |
60 | C<$Types::Serialiser::false>. |
70 | C<$Types::Serialiser::false>. |
… | |
… | |
126 | our $error = do { bless \(my $dummy ), Types::Serialiser::Error:: }; |
136 | our $error = do { bless \(my $dummy ), Types::Serialiser::Error:: }; |
127 | |
137 | |
128 | sub true () { $true } |
138 | sub true () { $true } |
129 | sub false () { $false } |
139 | sub false () { $false } |
130 | sub error () { $error } |
140 | sub error () { $error } |
|
|
141 | |
|
|
142 | sub as_bool($) { $_[0] ? $true : $false } |
131 | |
143 | |
132 | sub is_bool ($) { UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: } |
144 | sub is_bool ($) { UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: } |
133 | sub is_true ($) { $_[0] && UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: } |
145 | sub is_true ($) { $_[0] && UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: } |
134 | sub is_false ($) { !$_[0] && UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: } |
146 | sub is_false ($) { !$_[0] && UNIVERSAL::isa $_[0], Types::Serialiser::Boolean:: } |
135 | sub is_error ($) { UNIVERSAL::isa $_[0], Types::Serialiser::Error:: } |
147 | sub is_error ($) { UNIVERSAL::isa $_[0], Types::Serialiser::Error:: } |