1 |
root |
1.1 |
=head1 REGISTRATION INFORMATION |
2 |
|
|
|
3 |
|
|
Tag 22098 (indirection) |
4 |
|
|
Data Item multiple |
5 |
|
|
Semantics hint that indicates an additional level of indirection |
6 |
|
|
Reference http://cbor.schmorp.de/indirection |
7 |
|
|
Contact Marc A. Lehmann <cbor@schmorp.de> |
8 |
|
|
|
9 |
|
|
=head1 SUMMARY |
10 |
|
|
|
11 |
|
|
This tag indicates an additional level of indirection when |
12 |
|
|
decoding a value. |
13 |
|
|
|
14 |
|
|
=head1 BACKGROUND |
15 |
|
|
|
16 |
|
|
Data structures in some languages or data models sometimes employ |
17 |
|
|
references, pointers or similar forms of indirection to represent |
18 |
|
|
relationships between values. For example, in Perl, CBOR arrays are |
19 |
|
|
usually represented as references to perl arrays, rather than arrays |
20 |
|
|
themselves, while simple scalar values are represented as these values |
21 |
|
|
themselves. However, CBOR leaves explicit references unencodable - while |
22 |
|
|
arrays and maps might implicitly result in references, references to |
23 |
|
|
simple values, or references to references are not representable. |
24 |
|
|
|
25 |
|
|
For example, in Perl: |
26 |
|
|
|
27 |
|
|
{ 1, 2, 3, 4 } # reference to a hash, becomes CBOR map |
28 |
|
|
[ 1, 2, 3, 4 } # reference to an array, becomes CBOR array |
29 |
|
|
\5 # reference to the scalar value 5, needs extension |
30 |
|
|
\[] # reference to a reference to an array, needs extension |
31 |
|
|
|
32 |
|
|
This tag allows to encode such references - prefixing a value with this |
33 |
|
|
tag indicates a hint to the decoder that the original value was actually |
34 |
|
|
a reference. Decoders can chose to heed the hint (if their data model has |
35 |
|
|
a convenient representation), or simply ignore it and decode the value |
36 |
|
|
as-is. |
37 |
|
|
|
38 |
|
|
For example, CBOR encoders for Perl would not use the indirection tag for |
39 |
|
|
hash and array references, as the only way to reference these values in a |
40 |
|
|
data structure is already by reference. However, references to strings, |
41 |
|
|
numbers, other references or other complex objects would be encoded by |
42 |
|
|
tagging the referenced value with the indirection tag. |
43 |
|
|
|
44 |
|
|
Indirection tags can be nested - each additional level of nesting would |
45 |
|
|
indicate an additional indirection. |
46 |
|
|
|
47 |
|
|
=head1 EXAMPLES |
48 |
|
|
|
49 |
|
|
<TBD> |
50 |
|
|
|