DCCL v4
|
Encodes empty optional fields with a single "presence" bit. More...
#include <dccl/codecs3/field_codec_presence.h>
Public Types | |
typedef TypedFieldCodec< typename WrappedType::wire_type, typename WrappedType::field_type > | Base |
typedef WrappedType | wrapped_type |
The codec type of the "wrapped" codec. | |
typedef Base::wire_type | wire_type |
The wire_type of the "wrapped" codec. | |
typedef Base::field_type | field_type |
The field_type of the "wrapped" codec. | |
![]() | |
typedef WrappedType::wire_type | wire_type |
typedef WrappedType::field_type | field_type |
Public Member Functions | |
virtual wire_type | pre_encode (const field_type &field_value) |
virtual field_type | post_decode (const wire_type &wire_value) |
virtual void | validate () |
Calls _inner_codec.validate() | |
virtual Bitset | encode () |
Encodes an empty field as a single 0 bit. | |
virtual Bitset | encode (const wire_type &value) |
Encodes a non-empty field, adding a 1 bit to the front for optional fields. | |
virtual wire_type | decode (Bitset *bits) |
Decodes a field, first evaluating the presence bit if necessary. | |
virtual unsigned | size () |
Size of an empty field (1 bit) | |
virtual unsigned | size (const wire_type &wire_value) |
Size of a non-empty field; gets size from "wrapped" codec, adds 1 for optional fields. | |
virtual unsigned | max_size () |
Calculate maximum size of the field in bits. More... | |
virtual unsigned | min_size () |
Calculate minimum size of the field in bits. More... | |
![]() | |
virtual Bitset | encode (const WrappedType::wire_type &wire_value)=0 |
Encode a non-empty field. More... | |
virtual unsigned | size (const WrappedType::wire_type &wire_value)=0 |
Calculate the size (in bits) of a non-empty field. More... | |
![]() | |
virtual WrappedType::wire_type | pre_encode (const WrappedType::field_type &field_value)=0 |
Convert from the FieldType representation (used in the Google Protobuf message) to the WireType representation (used with encode() and decode(), i.e. "on the wire"). More... | |
virtual WrappedType::field_type | post_decode (const WrappedType::wire_type &wire_value)=0 |
Convert from the WireType representation (used with encode() and decode(), i.e. "on the wire") to the FieldType representation (used in the Google Protobuf message). More... | |
![]() | |
FieldCodecBase () | |
virtual | ~FieldCodecBase () |
void | base_encode (Bitset *bits, const google::protobuf::Message &msg, MessagePart part, bool strict) |
Encode this part (body or head) of the base message. More... | |
void | base_size (unsigned *bit_size, const google::protobuf::Message &msg, MessagePart part) |
Calculate the size (in bits) of a part of the base message when it is encoded. More... | |
void | base_decode (Bitset *bits, google::protobuf::Message *msg, MessagePart part) |
Decode part of a message. More... | |
void | base_max_size (unsigned *bit_size, const google::protobuf::Descriptor *desc, MessagePart part) |
Calculate the maximum size of a message given its Descriptor alone (no data) More... | |
void | base_min_size (unsigned *bit_size, const google::protobuf::Descriptor *desc, MessagePart part) |
Calculate the minimum size of a message given its Descriptor alone (no data) More... | |
void | base_validate (const google::protobuf::Descriptor *desc, MessagePart part) |
Validate this part of the message to make sure all required extensions are set. More... | |
void | base_info (std::ostream *os, const google::protobuf::Descriptor *desc, MessagePart part) |
Get human readable information (size of fields, etc.) about this part of the DCCL message. More... | |
std::string | name () const |
the name of the codec used to identifier it in the .proto custom option extension | |
google::protobuf::FieldDescriptor::Type | field_type () const |
the type exposed to the user in the original and decoded Protobuf messages More... | |
google::protobuf::FieldDescriptor::CppType | wire_type () const |
the C++ type used "on the wire". This is the type visible after pre_encode and before post_decode functions are called. More... | |
const google::protobuf::FieldDescriptor * | this_field () const |
Returns the FieldDescriptor (field schema meta-data) for this field. More... | |
void | set_force_use_required (bool force_required=true) |
Force the codec to always use the "required" field encoding, regardless of the FieldDescriptor setting. Useful when wrapping this codec in another that handles optional and repeated fields. | |
void | field_pre_encode (boost::any *wire_value, const boost::any &field_value) |
Pre-encodes a non-repeated (i.e. optional or required) field by converting the FieldType representation (the Google Protobuf representation) into the WireType representation (the type used in the encoded DCCL message). This allows for type-converting codecs. More... | |
void | field_pre_encode_repeated (std::vector< boost::any > *wire_values, const std::vector< boost::any > &field_values) |
Pre-encodes a repeated field. More... | |
void | field_encode (Bitset *bits, const boost::any &field_value, const google::protobuf::FieldDescriptor *field) |
Encode a non-repeated field. More... | |
void | field_encode_repeated (Bitset *bits, const std::vector< boost::any > &field_values, const google::protobuf::FieldDescriptor *field) |
Encode a repeated field. More... | |
void | field_size (unsigned *bit_size, const boost::any &field_value, const google::protobuf::FieldDescriptor *field) |
Calculate the size of a field. More... | |
void | field_size_repeated (unsigned *bit_size, const std::vector< boost::any > &field_values, const google::protobuf::FieldDescriptor *field) |
Calculate the size of a repeated field. More... | |
void | field_decode (Bitset *bits, boost::any *field_value, const google::protobuf::FieldDescriptor *field) |
Decode a non-repeated field. More... | |
void | field_decode_repeated (Bitset *bits, std::vector< boost::any > *field_values, const google::protobuf::FieldDescriptor *field) |
Decode a repeated field. More... | |
void | field_post_decode (const boost::any &wire_value, boost::any *field_value) |
Post-decodes a non-repeated (i.e. optional or required) field by converting the WireType (the type used in the encoded DCCL message) representation into the FieldType representation (the Google Protobuf representation). This allows for type-converting codecs. More... | |
void | field_post_decode_repeated (const std::vector< boost::any > &wire_values, std::vector< boost::any > *field_values) |
Post-decodes a repeated field. More... | |
void | field_max_size (unsigned *bit_size, const google::protobuf::FieldDescriptor *field) |
Calculate the upper bound on this field's size (in bits) More... | |
void | field_min_size (unsigned *bit_size, const google::protobuf::FieldDescriptor *field) |
Calculate the lower bound on this field's size (in bits) More... | |
void | field_validate (bool *b, const google::protobuf::FieldDescriptor *field) |
Validate this field, checking that all required option extensions are set (e.g. (dccl.field).max and (dccl.field).min for arithmetic codecs) More... | |
void | field_info (std::ostream *os, const google::protobuf::FieldDescriptor *field) |
Write human readable information about the field and its bounds to the provided stream. More... | |
dccl::DCCLFieldOptions | dccl_field_options () const |
Get the DCCL field option extension value for the current field. More... | |
void | require (bool b, const std::string &description) |
Essentially an assertion to be used in the validate() virtual method. More... | |
DynamicConditions & | dynamic_conditions (const google::protobuf::FieldDescriptor *field) |
Protected Attributes | |
WrappedType | _inner_codec |
Instance of the "wrapped" codec. | |
Additional Inherited Members | |
![]() | |
static const google::protobuf::Descriptor * | this_descriptor () |
Returns the Descriptor (message schema meta-data) for the immediate parent Message. More... | |
static const google::protobuf::Message * | this_message () |
static const google::protobuf::Message * | root_message () |
static bool | has_codec_group () |
static std::string | codec_group (const google::protobuf::Descriptor *desc) |
static std::string | codec_group () |
static int | codec_version () |
static MessagePart | part () |
the part of the message currently being encoded (head or body). | |
static bool | strict () |
![]() | |
bool | use_required () |
Whether to use the required or optional encoding. | |
virtual std::string | info () |
Write field specific information (in addition to general information such as sizes that are automatically written by this class for all fields. More... | |
virtual void | any_encode_repeated (Bitset *bits, const std::vector< boost::any > &wire_values) |
virtual void | any_decode_repeated (Bitset *repeated_bits, std::vector< boost::any > *field_values) |
virtual void | any_pre_encode_repeated (std::vector< boost::any > *wire_values, const std::vector< boost::any > &field_values) |
virtual void | any_post_decode_repeated (const std::vector< boost::any > &wire_values, std::vector< boost::any > *field_values) |
virtual unsigned | any_size_repeated (const std::vector< boost::any > &wire_values) |
virtual unsigned | max_size_repeated () |
virtual unsigned | min_size_repeated () |
void | check_repeat_settings () |
Encodes empty optional fields with a single "presence" bit.
This class wraps an existing TypedFieldCodec, adding an extra "presence" bit to the LSB for optional fields. The field size is as follows:
Definition at line 45 of file field_codec_presence.h.
|
inlinevirtual |
Calculate maximum size of the field in bits.
Implements dccl::FieldCodecBase.
Definition at line 139 of file field_codec_presence.h.
|
inlinevirtual |
Calculate minimum size of the field in bits.
Implements dccl::FieldCodecBase.
Definition at line 152 of file field_codec_presence.h.