Browse Source

Mention that colors can be overbright in Binary serialization API

This also tweaks capitalization for consistency with the rest of the
documentation.
Hugo Locurcio 5 years ago
parent
commit
cbb5f8c1ef
1 changed files with 75 additions and 74 deletions
  1. 75 74
      tutorials/misc/binary_serialization_api.rst

+ 75 - 74
tutorials/misc/binary_serialization_api.rst

@@ -10,13 +10,13 @@ Godot has a simple serialization API based on Variant. It's used for
 converting data types to an array of bytes efficiently. This API is used
 converting data types to an array of bytes efficiently. This API is used
 in the functions ``get_var`` and ``store_var`` of :ref:`class_File`
 in the functions ``get_var`` and ``store_var`` of :ref:`class_File`
 as well as the packet APIs for :ref:`class_PacketPeer`. This format
 as well as the packet APIs for :ref:`class_PacketPeer`. This format
-is not used for binary scenes and resources.
+is *not* used for binary scenes and resources.
 
 
 Packet specification
 Packet specification
 --------------------
 --------------------
 
 
 The packet is designed to be always padded to 4 bytes. All values are
 The packet is designed to be always padded to 4 bytes. All values are
-little endian encoded. All packets have a 4 byte header representing an
+little-endian-encoded. All packets have a 4-byte header representing an
 integer, specifying the type of data:
 integer, specifying the type of data:
 
 
 +--------+--------------------------+
 +--------+--------------------------+
@@ -83,11 +83,12 @@ integer, specifying the type of data:
 | 29     | max                      |
 | 29     | max                      |
 +--------+--------------------------+
 +--------+--------------------------+
 
 
-Following this is the actual packet contents, which varies for each type
-of packet. Note that this assumes Godot is compiled with single precision
-floats. If instead doubles are used, the length of "Float" fields within
-data structures should be 8, and the offset should be (offset - 4) * 2 + 4.
-The "float" type itself is always double precision.
+Following this is the actual packet contents, which varies for each type of
+packet. Note that this assumes Godot is compiled with single-precision floats,
+which is the default. If Godot was compiled with double-precision floats, the
+length of "Float" fields within data structures should be 8, and the offset
+should be ``(offset - 4) * 2 + 4``. The "float" type itself always uses double
+precision.
 
 
 0: null
 0: null
 ~~~~~~~
 ~~~~~~~
@@ -107,7 +108,7 @@ The "float" type itself is always double precision.
 +----------+-------+-----------+--------------------------+
 +----------+-------+-----------+--------------------------+
 | Offset   | Len   | Type      | Description              |
 | Offset   | Len   | Type      | Description              |
 +==========+=======+===========+==========================+
 +==========+=======+===========+==========================+
-| 4        | 8     | Integer   | Signed, 64-bit Integer   |
+| 4        | 8     | Integer   | 64-bit signed integer    |
 +----------+-------+-----------+--------------------------+
 +----------+-------+-----------+--------------------------+
 
 
 3: :ref:`float<class_float>`
 3: :ref:`float<class_float>`
@@ -116,7 +117,7 @@ The "float" type itself is always double precision.
 +----------+-------+---------+-----------------------------------+
 +----------+-------+---------+-----------------------------------+
 | Offset   | Len   | Type    | Description                       |
 | Offset   | Len   | Type    | Description                       |
 +==========+=======+=========+===================================+
 +==========+=======+=========+===================================+
-| 4        | 8     | Float   | IEEE 754 Double-precision Float   |
+| 4        | 8     | Float   | IEEE 754 double-precision float   |
 +----------+-------+---------+-----------------------------------+
 +----------+-------+---------+-----------------------------------+
 
 
 4: :ref:`String<class_string>`
 4: :ref:`String<class_string>`
@@ -125,9 +126,9 @@ The "float" type itself is always double precision.
 +----------+-------+-----------+----------------------------+
 +----------+-------+-----------+----------------------------+
 | Offset   | Len   | Type      | Description                |
 | Offset   | Len   | Type      | Description                |
 +==========+=======+===========+============================+
 +==========+=======+===========+============================+
-| 4        | 4     | Integer   | String Length (in Bytes)   |
+| 4        | 4     | Integer   | String length (in bytes)   |
 +----------+-------+-----------+----------------------------+
 +----------+-------+-----------+----------------------------+
-| 8        | X     | Bytes     | UTF-8 Encoded String       |
+| 8        | X     | Bytes     | UTF-8 encoded string       |
 +----------+-------+-----------+----------------------------+
 +----------+-------+-----------+----------------------------+
 
 
 This field is padded to 4 bytes.
 This field is padded to 4 bytes.
@@ -138,9 +139,9 @@ This field is padded to 4 bytes.
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 | Offset   | Len   | Type    | Description    |
 | Offset   | Len   | Type    | Description    |
 +==========+=======+=========+================+
 +==========+=======+=========+================+
-| 4        | 4     | Float   | X Coordinate   |
+| 4        | 4     | Float   | X coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 8        | 4     | Float   | Y Coordinate   |
+| 8        | 4     | Float   | Y coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 
 
 6: :ref:`Rect2<class_rect2>`
 6: :ref:`Rect2<class_rect2>`
@@ -149,13 +150,13 @@ This field is padded to 4 bytes.
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 | Offset   | Len   | Type    | Description    |
 | Offset   | Len   | Type    | Description    |
 +==========+=======+=========+================+
 +==========+=======+=========+================+
-| 4        | 4     | Float   | X Coordinate   |
+| 4        | 4     | Float   | X coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 8        | 4     | Float   | Y Coordinate   |
+| 8        | 4     | Float   | Y coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 12       | 4     | Float   | X Size         |
+| 12       | 4     | Float   | X size         |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 16       | 4     | Float   | Y Size         |
+| 16       | 4     | Float   | Y size         |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 
 
 7: :ref:`Vector3<class_vector3>`
 7: :ref:`Vector3<class_vector3>`
@@ -164,11 +165,11 @@ This field is padded to 4 bytes.
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 | Offset   | Len   | Type    | Description    |
 | Offset   | Len   | Type    | Description    |
 +==========+=======+=========+================+
 +==========+=======+=========+================+
-| 4        | 4     | Float   | X Coordinate   |
+| 4        | 4     | Float   | X coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 8        | 4     | Float   | Y Coordinate   |
+| 8        | 4     | Float   | Y coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 12       | 4     | Float   | Z Coordinate   |
+| 12       | 4     | Float   | Z coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 
 
 8: :ref:`Transform2D<class_transform2d>`
 8: :ref:`Transform2D<class_transform2d>`
@@ -226,17 +227,17 @@ This field is padded to 4 bytes.
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 | Offset   | Len   | Type    | Description    |
 | Offset   | Len   | Type    | Description    |
 +==========+=======+=========+================+
 +==========+=======+=========+================+
-| 4        | 4     | Float   | X Coordinate   |
+| 4        | 4     | Float   | X coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 8        | 4     | Float   | Y Coordinate   |
+| 8        | 4     | Float   | Y coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 12       | 4     | Float   | Z Coordinate   |
+| 12       | 4     | Float   | Z coordinate   |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 16       | 4     | Float   | X Size         |
+| 16       | 4     | Float   | X size         |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 20       | 4     | Float   | Y Size         |
+| 20       | 4     | Float   | Y size         |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
-| 24       | 4     | Float   | Z Size         |
+| 24       | 4     | Float   | Z size         |
 +----------+-------+---------+----------------+
 +----------+-------+---------+----------------+
 
 
 12: :ref:`Basis<class_basis>`
 12: :ref:`Basis<class_basis>`
@@ -298,17 +299,17 @@ This field is padded to 4 bytes.
 14: :ref:`Color<class_color>`
 14: :ref:`Color<class_color>`
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
-+----------+-------+---------+----------------+
-| Offset   | Len   | Type    | Description    |
-+==========+=======+=========+================+
-| 4        | 4     | Float   | Red (0..1)     |
-+----------+-------+---------+----------------+
-| 8        | 4     | Float   | Green (0..1)   |
-+----------+-------+---------+----------------+
-| 12       | 4     | Float   | Blue (0..1)    |
-+----------+-------+---------+----------------+
-| 16       | 4     | Float   | Alpha (0..1)   |
-+----------+-------+---------+----------------+
++----------+-------+---------+--------------------------------------------------------------+
+| Offset   | Len   | Type    | Description                                                  |
++==========+=======+=========+==============================================================+
+| 4        | 4     | Float   | Red (typically 0..1, can be above 1 for overbright colors)   |
++----------+-------+---------+--------------------------------------------------------------+
+| 8        | 4     | Float   | Green (typically 0..1, can be above 1 for overbright colors) |
++----------+-------+---------+--------------------------------------------------------------+
+| 12       | 4     | Float   | Blue (typically 0..1, can be above 1 for overbright colors)  |
++----------+-------+---------+--------------------------------------------------------------+
+| 16       | 4     | Float   | Alpha (0..1)                                                 |
++----------+-------+---------+--------------------------------------------------------------+
 
 
 15: :ref:`NodePath<class_nodepath>`
 15: :ref:`NodePath<class_nodepath>`
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -316,7 +317,7 @@ This field is padded to 4 bytes.
 +----------+-------+-----------+-----------------------------------------------------------------------------------------+
 +----------+-------+-----------+-----------------------------------------------------------------------------------------+
 | Offset   | Len   | Type      | Description                                                                             |
 | Offset   | Len   | Type      | Description                                                                             |
 +==========+=======+===========+=========================================================================================+
 +==========+=======+===========+=========================================================================================+
-| 4        | 4     | Integer   | String Length, or New Format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF)           |
+| 4        | 4     | Integer   | String length, or new format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF)           |
 +----------+-------+-----------+-----------------------------------------------------------------------------------------+
 +----------+-------+-----------+-----------------------------------------------------------------------------------------+
 
 
 For old format:
 For old format:
@@ -325,7 +326,7 @@ For old format:
 +----------+-------+---------+------------------------+
 +----------+-------+---------+------------------------+
 | Offset   | Len   | Type    | Description            |
 | Offset   | Len   | Type    | Description            |
 +==========+=======+=========+========================+
 +==========+=======+=========+========================+
-| 8        | X     | Bytes   | UTF-8 Encoded String   |
+| 8        | X     | Bytes   | UTF-8 encoded string   |
 +----------+-------+---------+------------------------+
 +----------+-------+---------+------------------------+
 
 
 Padded to 4 bytes.
 Padded to 4 bytes.
@@ -336,7 +337,7 @@ For new format:
 +----------+-------+-----------+-------------------------------------+
 +----------+-------+-----------+-------------------------------------+
 | Offset   | Len   | Type      | Description                         |
 | Offset   | Len   | Type      | Description                         |
 +==========+=======+===========+=====================================+
 +==========+=======+===========+=====================================+
-| 4        | 4     | Integer   | Sub-Name Count                      |
+| 4        | 4     | Integer   | Sub-name count                      |
 +----------+-------+-----------+-------------------------------------+
 +----------+-------+-----------+-------------------------------------+
 | 8        | 4     | Integer   | Flags (absolute: val&1 != 0 )       |
 | 8        | 4     | Integer   | Flags (absolute: val&1 != 0 )       |
 +----------+-------+-----------+-------------------------------------+
 +----------+-------+-----------+-------------------------------------+
@@ -346,9 +347,9 @@ For each Name and Sub-Name
 +----------+-------+-----------+------------------------+
 +----------+-------+-----------+------------------------+
 | Offset   | Len   | Type      | Description            |
 | Offset   | Len   | Type      | Description            |
 +==========+=======+===========+========================+
 +==========+=======+===========+========================+
-| X+0      | 4     | Integer   | String Length          |
+| X+0      | 4     | Integer   | String length          |
 +----------+-------+-----------+------------------------+
 +----------+-------+-----------+------------------------+
-| X+4      | X     | Bytes     | UTF-8 Encoded String   |
+| X+4      | X     | Bytes     | UTF-8 encoded string   |
 +----------+-------+-----------+------------------------+
 +----------+-------+-----------+------------------------+
 
 
 Every name string is padded to 4 bytes.
 Every name string is padded to 4 bytes.
@@ -389,7 +390,7 @@ other, using this same format.
 +---------------+-------+-----------+------------------------+
 +---------------+-------+-----------+------------------------+
 | Offset        | Len   | Type      | Description            |
 | Offset        | Len   | Type      | Description            |
 +===============+=======+===========+========================+
 +===============+=======+===========+========================+
-| 4             | 4     | Integer   | Array Length (Bytes)   |
+| 4             | 4     | Integer   | Array length (Bytes)   |
 +---------------+-------+-----------+------------------------+
 +---------------+-------+-----------+------------------------+
 | 8..8+length   | 1     | Byte      | Byte (0..255)          |
 | 8..8+length   | 1     | Byte      | Byte (0..255)          |
 +---------------+-------+-----------+------------------------+
 +---------------+-------+-----------+------------------------+
@@ -402,9 +403,9 @@ The array data is padded to 4 bytes.
 +------------------+-------+-----------+---------------------------+
 +------------------+-------+-----------+---------------------------+
 | Offset           | Len   | Type      | Description               |
 | Offset           | Len   | Type      | Description               |
 +==================+=======+===========+===========================+
 +==================+=======+===========+===========================+
-| 4                | 4     | Integer   | Array Length (Integers)   |
+| 4                | 4     | Integer   | Array length (Integers)   |
 +------------------+-------+-----------+---------------------------+
 +------------------+-------+-----------+---------------------------+
-| 8..8+length\*4   | 4     | Integer   | 32 Bits Signed Integer    |
+| 8..8+length\*4   | 4     | Integer   | 32-bit signed integer     |
 +------------------+-------+-----------+---------------------------+
 +------------------+-------+-----------+---------------------------+
 
 
 22: :ref:`PackedInt64Array<class_PackedInt64Array>`
 22: :ref:`PackedInt64Array<class_PackedInt64Array>`
@@ -413,9 +414,9 @@ The array data is padded to 4 bytes.
 +------------------+-------+-----------+---------------------------+
 +------------------+-------+-----------+---------------------------+
 | Offset           | Len   | Type      | Description               |
 | Offset           | Len   | Type      | Description               |
 +==================+=======+===========+===========================+
 +==================+=======+===========+===========================+
-| 4                | 8     | Integer   | Array Length (Integers)   |
+| 4                | 8     | Integer   | Array length (Integers)   |
 +------------------+-------+-----------+---------------------------+
 +------------------+-------+-----------+---------------------------+
-| 8..8+length\*8   | 8     | Integer   | 64 Bits Signed Integer    |
+| 8..8+length\*8   | 8     | Integer   | 64-bit signed integer     |
 +------------------+-------+-----------+---------------------------+
 +------------------+-------+-----------+---------------------------+
 
 
 23: :ref:`PackedFloat32Array<class_PackedFloat32Array>`
 23: :ref:`PackedFloat32Array<class_PackedFloat32Array>`
@@ -424,9 +425,9 @@ The array data is padded to 4 bytes.
 +------------------+-------+-----------+-------------------------------------------+
 +------------------+-------+-----------+-------------------------------------------+
 | Offset           | Len   | Type      | Description                               |
 | Offset           | Len   | Type      | Description                               |
 +==================+=======+===========+===========================================+
 +==================+=======+===========+===========================================+
-| 4                | 4     | Integer   | Array Length (Floats)                     |
+| 4                | 4     | Integer   | Array length (Floats)                     |
 +------------------+-------+-----------+-------------------------------------------+
 +------------------+-------+-----------+-------------------------------------------+
-| 8..8+length\*4   | 4     | Integer   | 32 Bits IEEE 754 Single-precision float   |
+| 8..8+length\*4   | 4     | Integer   | 32-bit IEEE 754 single-precision float    |
 +------------------+-------+-----------+-------------------------------------------+
 +------------------+-------+-----------+-------------------------------------------+
 
 
 24: :ref:`PackedFloat64Array<class_PackedFloat64Array>`
 24: :ref:`PackedFloat64Array<class_PackedFloat64Array>`
@@ -435,9 +436,9 @@ The array data is padded to 4 bytes.
 +------------------+-------+-----------+-------------------------------------------+
 +------------------+-------+-----------+-------------------------------------------+
 | Offset           | Len   | Type      | Description                               |
 | Offset           | Len   | Type      | Description                               |
 +==================+=======+===========+===========================================+
 +==================+=======+===========+===========================================+
-| 4                | 4     | Integer   | Array Length (Floats)                     |
+| 4                | 4     | Integer   | Array length (Floats)                     |
 +------------------+-------+-----------+-------------------------------------------+
 +------------------+-------+-----------+-------------------------------------------+
-| 8..8+length\*8   | 8     | Integer   | 64 Bits IEEE 754 Double-precision float   |
+| 8..8+length\*8   | 8     | Integer   | 64-bit IEEE 754 double-precision float    |
 +------------------+-------+-----------+-------------------------------------------+
 +------------------+-------+-----------+-------------------------------------------+
 
 
 25: :ref:`PackedStringArray<class_PackedStringArray>`
 25: :ref:`PackedStringArray<class_PackedStringArray>`
@@ -446,7 +447,7 @@ The array data is padded to 4 bytes.
 +----------+-------+-----------+--------------------------+
 +----------+-------+-----------+--------------------------+
 | Offset   | Len   | Type      | Description              |
 | Offset   | Len   | Type      | Description              |
 +==========+=======+===========+==========================+
 +==========+=======+===========+==========================+
-| 4        | 4     | Integer   | Array Length (Strings)   |
+| 4        | 4     | Integer   | Array length (Strings)   |
 +----------+-------+-----------+--------------------------+
 +----------+-------+-----------+--------------------------+
 
 
 For each String:
 For each String:
@@ -454,9 +455,9 @@ For each String:
 +----------+-------+-----------+------------------------+
 +----------+-------+-----------+------------------------+
 | Offset   | Len   | Type      | Description            |
 | Offset   | Len   | Type      | Description            |
 +==========+=======+===========+========================+
 +==========+=======+===========+========================+
-| X+0      | 4     | Integer   | String Length          |
+| X+0      | 4     | Integer   | String length          |
 +----------+-------+-----------+------------------------+
 +----------+-------+-----------+------------------------+
-| X+4      | X     | Bytes     | UTF-8 Encoded String   |
+| X+4      | X     | Bytes     | UTF-8 encoded string   |
 +----------+-------+-----------+------------------------+
 +----------+-------+-----------+------------------------+
 
 
 Every string is padded to 4 bytes.
 Every string is padded to 4 bytes.
@@ -467,11 +468,11 @@ Every string is padded to 4 bytes.
 +-------------------+-------+-----------+----------------+
 +-------------------+-------+-----------+----------------+
 | Offset            | Len   | Type      | Description    |
 | Offset            | Len   | Type      | Description    |
 +===================+=======+===========+================+
 +===================+=======+===========+================+
-| 4                 | 4     | Integer   | Array Length   |
+| 4                 | 4     | Integer   | Array length   |
 +-------------------+-------+-----------+----------------+
 +-------------------+-------+-----------+----------------+
-| 8..8+length\*8    | 4     | Float     | X Coordinate   |
+| 8..8+length\*8    | 4     | Float     | X coordinate   |
 +-------------------+-------+-----------+----------------+
 +-------------------+-------+-----------+----------------+
-| 8..12+length\*8   | 4     | Float     | Y Coordinate   |
+| 8..12+length\*8   | 4     | Float     | Y coordinate   |
 +-------------------+-------+-----------+----------------+
 +-------------------+-------+-----------+----------------+
 
 
 27: :ref:`PackedVector3Array<class_PackedVector3Array>`
 27: :ref:`PackedVector3Array<class_PackedVector3Array>`
@@ -480,28 +481,28 @@ Every string is padded to 4 bytes.
 +--------------------+-------+-----------+----------------+
 +--------------------+-------+-----------+----------------+
 | Offset             | Len   | Type      | Description    |
 | Offset             | Len   | Type      | Description    |
 +====================+=======+===========+================+
 +====================+=======+===========+================+
-| 4                  | 4     | Integer   | Array Length   |
+| 4                  | 4     | Integer   | Array length   |
 +--------------------+-------+-----------+----------------+
 +--------------------+-------+-----------+----------------+
-| 8..8+length\*12    | 4     | Float     | X Coordinate   |
+| 8..8+length\*12    | 4     | Float     | X coordinate   |
 +--------------------+-------+-----------+----------------+
 +--------------------+-------+-----------+----------------+
-| 8..12+length\*12   | 4     | Float     | Y Coordinate   |
+| 8..12+length\*12   | 4     | Float     | Y coordinate   |
 +--------------------+-------+-----------+----------------+
 +--------------------+-------+-----------+----------------+
-| 8..16+length\*12   | 4     | Float     | Z Coordinate   |
+| 8..16+length\*12   | 4     | Float     | Z coordinate   |
 +--------------------+-------+-----------+----------------+
 +--------------------+-------+-----------+----------------+
 
 
 28: :ref:`PackedColorArray<class_PackedColorArray>`
 28: :ref:`PackedColorArray<class_PackedColorArray>`
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
-+--------------------+-------+-----------+----------------+
-| Offset             | Len   | Type      | Description    |
-+====================+=======+===========+================+
-| 4                  | 4     | Integer   | Array Length   |
-+--------------------+-------+-----------+----------------+
-| 8..8+length\*16    | 4     | Float     | Red (0..1)     |
-+--------------------+-------+-----------+----------------+
-| 8..12+length\*16   | 4     | Float     | Green (0..1)   |
-+--------------------+-------+-----------+----------------+
-| 8..16+length\*16   | 4     | Float     | Blue (0..1)    |
-+--------------------+-------+-----------+----------------+
-| 8..20+length\*16   | 4     | Float     | Alpha (0..1)   |
-+--------------------+-------+-----------+----------------+
++--------------------+-------+-----------+--------------------------------------------------------------+
+| Offset             | Len   | Type      | Description                                                  |
++====================+=======+===========+==============================================================+
+| 4                  | 4     | Integer   | Array length                                                 |
++--------------------+-------+-----------+--------------------------------------------------------------+
+| 8..8+length\*16    | 4     | Float     | Red (typically 0..1, can be above 1 for overbright colors)   |
++--------------------+-------+-----------+--------------------------------------------------------------+
+| 8..12+length\*16   | 4     | Float     | Green (typically 0..1, can be above 1 for overbright colors) |
++--------------------+-------+-----------+--------------------------------------------------------------+
+| 8..16+length\*16   | 4     | Float     | Blue (typically 0..1, can be above 1 for overbright colors)  |
++--------------------+-------+-----------+--------------------------------------------------------------+
+| 8..20+length\*16   | 4     | Float     | Alpha (0..1)                                                 |
++--------------------+-------+-----------+--------------------------------------------------------------+