A simple collection of objects that can be described and transmitted in a portable way. More...
#include <yarp/os/Bottle.h>
Public Types | |
using | size_type = size_t |
Public Member Functions | |
Bottle () | |
Constructor. | |
Bottle (const std::string &text) | |
Creates a bottle from a string. | |
Bottle (const Bottle &rhs) | |
Copy constructor. | |
Bottle (Bottle &&rhs) noexcept | |
Move constructor. | |
Bottle (std::initializer_list< yarp::os::Value > values) | |
Initializer list constructor. | |
Bottle & | operator= (const Bottle &rhs) |
Copy assignment operator. | |
Bottle & | operator= (Bottle &&rhs) noexcept |
Move assignment operator. | |
~Bottle () override | |
Destructor. | |
void | clear () |
Empties the bottle of any objects it contains. | |
void | addInt8 (std::int8_t x) |
Places a 8-bit integer in the bottle, at the end of the list. | |
void | addInt16 (std::int16_t x) |
Places a 16-bit integer in the bottle, at the end of the list. | |
void | addInt32 (std::int32_t x) |
Places a 32-bit integer in the bottle, at the end of the list. | |
void | addInt64 (std::int64_t x) |
Places a 64-bit integer in the bottle, at the end of the list. | |
void | addVocab32 (yarp::conf::vocab32_t x) |
Places a vocabulary item in the bottle, at the end of the list. | |
void | addVocab32 (char a, char b=0, char c=0, char d=0) |
Places a vocabulary item in the bottle, at the end of the list. | |
void | addVocab32 (const std::string &str) |
Places a vocabulary item in the bottle, at the end of the list. | |
void | addFloat32 (yarp::conf::float32_t x) |
Places a 32-bit floating point number in the bottle, at the end of the list. | |
void | addFloat64 (yarp::conf::float64_t x) |
Places a 64-bit floating point number in the bottle, at the end of the list. | |
void | addString (const char *str) |
Places a string in the bottle, at the end of the list. | |
void | addString (const std::string &str) |
Places a string in the bottle, at the end of the list. | |
void | add (const Value &value) |
Add a Value to the bottle, at the end of the list. | |
void | add (Value *value) |
Add a Value to the bottle, at the end of the list. | |
Bottle & | addList () |
Places an empty nested list in the bottle, at the end of the list. | |
Property & | addDict () |
Places an empty key/value object in the bottle, at the end of the list. | |
Value | pop () |
Removes a Value v from the end of the list and returns this value. | |
Value & | get (size_type index) const |
Reads a Value v from a certain part of the list. | |
size_type | size () const |
Gets the number of elements in the bottle. | |
void | fromString (const std::string &text) |
Initializes bottle from a string. | |
void | fromBinary (const char *buf, size_t len) |
Initializes bottle from a binary representation. | |
const char * | toBinary (size_t *size=nullptr) |
Returns binary representation of bottle. | |
std::string | toString () const override |
Gives a human-readable textual representation of the bottle. | |
bool | write (ConnectionWriter &writer) const override |
Output a representation of the bottle to a network connection. | |
bool | read (ConnectionReader &reader) override |
Set the bottle's value based on input from a network connection. | |
bool | write (PortReader &reader, bool textMode=false) |
Copy the bottle's value to a object that can read a serialization. | |
bool | read (const PortWriter &writer, bool textMode=false) |
Set the bottle's value based on input from a serializable object. | |
void | onCommencement () const override |
This is called when the port is about to begin writing operations. | |
bool | check (const std::string &key) const override |
Check if there exists a property of the given name. | |
Value & | find (const std::string &key) const override |
Gets a value corresponding to a given keyword. | |
Bottle & | findGroup (const std::string &key) const override |
Gets a list corresponding to a given keyword. | |
bool | isNull () const override |
Checks if the object is invalid. | |
void | copy (const Bottle &alt, size_type first=0, size_type len=npos) |
Copy all or part of another Bottle. | |
bool | operator== (const Bottle &alt) const |
Equality test. | |
bool | operator!= (const Bottle &alt) const |
Inequality test. | |
void | append (const Bottle &alt) |
Append the content of the given bottle to the current list. | |
Bottle | tail () const |
Get all but the first element of a bottle. | |
void | hasChanged () |
Declare that the content of the Bottle has been changed. | |
int | getSpecialization () |
Get numeric bottle code for this bottle. | |
virtual bool | check (const std::string &key) const=0 |
Check if there exists a property of the given name. | |
virtual bool | check (const std::string &key, const std::string &comment) const |
Check if there exists a property of the given name. | |
virtual bool | check (const std::string &key, Value *&result, const std::string &comment="") const |
Gets a value corresponding to a given keyword. | |
virtual Value | check (const std::string &key, const Value &fallback, const std::string &comment="") const |
Gets a value corresponding to a given keyword. | |
virtual Bottle & | findGroup (const std::string &key) const=0 |
Gets a list corresponding to a given keyword. | |
Bottle & | findGroup (const std::string &key, const std::string &comment) const |
Gets a list corresponding to a given keyword. | |
Public Member Functions inherited from yarp::os::Portable | |
virtual Type | getType () const |
Public Member Functions inherited from yarp::os::PortReader | |
virtual | ~PortReader () |
Destructor. | |
virtual Type | getReadType () const |
Public Member Functions inherited from yarp::os::PortWriter | |
virtual | ~PortWriter () |
Destructor. | |
virtual void | onCompletion () const |
This is called when the port has finished all writing operations. | |
virtual yarp::os::Type | getWriteType () const |
Public Member Functions inherited from yarp::os::Searchable | |
Searchable () | |
Default constructor. | |
Searchable (const Searchable &rhs)=default | |
Copy constructor. | |
Searchable (Searchable &&rhs) noexcept=default | |
Move constructor. | |
virtual | ~Searchable () |
Destructor. | |
Searchable & | operator= (const Searchable &rhs)=default |
Copy assignment operator. | |
Searchable & | operator= (Searchable &&rhs) noexcept=default |
Move assignment operator. | |
Bottle & | findGroup (const std::string &key, const std::string &comment) const |
Gets a list corresponding to a given keyword. | |
Static Public Member Functions | |
static Bottle & | getNullBottle () |
A special Bottle with no content. | |
static std::string | toString (int x) |
static std::string | describeBottleCode (int code) |
Convert a numeric bottle code to a string. | |
Static Public Member Functions inherited from yarp::os::Portable | |
static bool | copyPortable (const PortWriter &writer, PortReader &reader) |
Copy one portable to another, via writing and reading. | |
Static Public Attributes | |
static const size_type | npos = static_cast<Bottle::size_type>(-1) |
Protected Member Functions | |
void | setReadOnly (bool readOnly) |
Friends | |
class | yarp::os::NetworkBase |
A simple collection of objects that can be described and transmitted in a portable way.
Objects are stored in a list, which you can add to and access. It is handy to use until you feel the need to make your own more efficient formats for transmission.
Here's an example of using a Bottle:
This class has a well-defined, documented representation in both binary and text form. The name of this class comes from the idea of throwing a "message in a bottle" into the network and hoping it will eventually wash ashore somewhere else. In the very early days of YARP, that is what communication felt like.
Bottle::Bottle | ( | ) |
|
explicit |
Creates a bottle from a string.
The string which should contain a textual form of the bottle, e.g. text = "10 -5.3 1.0 \"hello there\"" would give a bottle with 4 elements: an integer, two floating point numbers, and a string.
text | the textual form of the bottle to be interpreted. |
Definition at line 54 of file Bottle.cpp.
|
noexcept |
yarp::os::Bottle::Bottle | ( | std::initializer_list< yarp::os::Value > | values | ) |
|
override |
Destructor.
Definition at line 116 of file Bottle.cpp.
Add a Value to the bottle, at the end of the list.
value | the Value to add. |
Definition at line 309 of file Bottle.cpp.
Add a Value to the bottle, at the end of the list.
The object passed will be placed directly into the list, without copying. The Bottle will be responsible for deallocating it when appropriate.
value | the Value to add. |
Definition at line 303 of file Bottle.cpp.
Property & Bottle::addDict | ( | ) |
Places an empty key/value object in the bottle, at the end of the list.
Definition at line 188 of file Bottle.cpp.
void Bottle::addFloat32 | ( | yarp::conf::float32_t | x | ) |
Places a 32-bit floating point number in the bottle, at the end of the list.
x | the number to add. |
Definition at line 152 of file Bottle.cpp.
void Bottle::addFloat64 | ( | yarp::conf::float64_t | x | ) |
Places a 64-bit floating point number in the bottle, at the end of the list.
x | the number to add. |
Definition at line 158 of file Bottle.cpp.
void Bottle::addInt16 | ( | std::int16_t | x | ) |
Places a 16-bit integer in the bottle, at the end of the list.
x | the 16-bit integer to add. |
Definition at line 134 of file Bottle.cpp.
void Bottle::addInt32 | ( | std::int32_t | x | ) |
Places a 32-bit integer in the bottle, at the end of the list.
x | the 32-bit integer to add. |
Definition at line 140 of file Bottle.cpp.
void Bottle::addInt64 | ( | std::int64_t | x | ) |
Places a 64-bit integer in the bottle, at the end of the list.
x | the 64-bit integer to add. |
Definition at line 146 of file Bottle.cpp.
void Bottle::addInt8 | ( | std::int8_t | x | ) |
Places a 8-bit integer in the bottle, at the end of the list.
x | the 8-bit integer to add. |
Definition at line 128 of file Bottle.cpp.
Bottle & Bottle::addList | ( | ) |
Places an empty nested list in the bottle, at the end of the list.
The list itself is represented as a bottle.
Definition at line 182 of file Bottle.cpp.
Places a string in the bottle, at the end of the list.
str | the string to add. |
Definition at line 170 of file Bottle.cpp.
Places a string in the bottle, at the end of the list.
str | the string to add. |
Definition at line 176 of file Bottle.cpp.
void Bottle::addVocab32 | ( | yarp::conf::vocab32_t | x | ) |
Places a vocabulary item in the bottle, at the end of the list.
x | the item to add. |
Definition at line 164 of file Bottle.cpp.
Append the content of the given bottle to the current list.
alt | the content to add. |
Definition at line 353 of file Bottle.cpp.
Check if there exists a property of the given name.
key | the name to check for |
Implements yarp::os::Searchable.
Definition at line 277 of file Bottle.cpp.
Check if there exists a property of the given name.
key | the name to check for |
Implements yarp::os::Searchable.
|
virtual |
Check if there exists a property of the given name.
key | the name to check for |
comment | Human-readable explanation |
Reimplemented from yarp::os::Searchable.
Definition at line 79 of file Searchable.cpp.
|
virtual |
Gets a value corresponding to a given keyword.
key | The keyword to look for |
fallback | A default value to return if nothing found |
comment | Optional human-readable explanation |
Reimplemented from yarp::os::Searchable.
Definition at line 156 of file Searchable.cpp.
|
virtual |
Gets a value corresponding to a given keyword.
If a property does not exist, this returns false and does not modify the result pointer. If a property exists but does not have a value, this again returns false and does not modify the result pointer.
key | The keyword to look for |
result | A pointer to store the address of the result in |
comment | Optional human-readable explanation |
Reimplemented from yarp::os::Searchable.
Definition at line 142 of file Searchable.cpp.
void Bottle::clear | ( | ) |
Empties the bottle of any objects it contains.
Definition at line 121 of file Bottle.cpp.
Copy all or part of another Bottle.
alt | The object to copy. |
first | The index of the first element to copy. |
len | The number of elements to copy (-1 for all). |
Definition at line 266 of file Bottle.cpp.
|
static |
Convert a numeric bottle code to a string.
code | the code to convert |
Definition at line 376 of file Bottle.cpp.
Gets a value corresponding to a given keyword.
key | The keyword to look for |
Implements yarp::os::Searchable.
Definition at line 287 of file Bottle.cpp.
Gets a list corresponding to a given keyword.
key | The keyword to look for |
Implements yarp::os::Searchable.
Definition at line 293 of file Bottle.cpp.
Gets a list corresponding to a given keyword.
key | The keyword to look for |
Implements yarp::os::Searchable.
yarp::os::Bottle & yarp::os::Searchable::findGroup | ( | const std::string & | key, |
const std::string & | comment | ||
) | const |
Gets a list corresponding to a given keyword.
key | The keyword to look for |
comment | Human-readable explanation |
Definition at line 115 of file Searchable.cpp.
Initializes bottle from a binary representation.
buf | the binary form of the bottle to be interpreted. |
len | the length of the binary form. |
Definition at line 216 of file Bottle.cpp.
Initializes bottle from a string.
The string should contain a textual form of the bottle, e.g. text = "10 -5.3 1.0 \"hello there\"" would give a bottle with 4 elements: an integer, two floating point numbers, and a string.
text | the textual form of the bottle to be interpreted. |
Definition at line 204 of file Bottle.cpp.
Reads a Value v from a certain part of the list.
Methods like v.isInt32() or v.isString() can be used to check the type of the result. Methods like v.asInt32() or v.asString() can be used to access the result as a particular type.
index | the part of the list to read from. |
Definition at line 246 of file Bottle.cpp.
|
static |
A special Bottle with no content.
Definition at line 315 of file Bottle.cpp.
int Bottle::getSpecialization | ( | ) |
Get numeric bottle code for this bottle.
Definition at line 261 of file Bottle.cpp.
void Bottle::hasChanged | ( | ) |
Declare that the content of the Bottle has been changed.
It is important to call this if you modify an individual element of the Bottle through assignment, so that serialization happens correctly.
Definition at line 256 of file Bottle.cpp.
|
overridevirtual |
Checks if the object is invalid.
Reimplemented from yarp::os::Searchable.
Reimplemented in NullBottle.
Definition at line 343 of file Bottle.cpp.
|
overridevirtual |
This is called when the port is about to begin writing operations.
After this point, the write method may be called zero, once, or many times by YARP depending on the mix of formats and protocols in use.
Reimplemented from yarp::os::PortWriter.
Definition at line 235 of file Bottle.cpp.
Inequality test.
alt | the value to compare against. |
Definition at line 348 of file Bottle.cpp.
Move assignment operator.
rhs | The object to move. |
Definition at line 108 of file Bottle.cpp.
Copy assignment operator.
rhs | The object to copy. |
Definition at line 99 of file Bottle.cpp.
Equality test.
alt | the value to compare against. |
Definition at line 321 of file Bottle.cpp.
Value Bottle::pop | ( | ) |
Removes a Value v from the end of the list and returns this value.
Definition at line 194 of file Bottle.cpp.
|
overridevirtual |
Set the bottle's value based on input from a network connection.
reader | the interface to the network connection for reading |
Implements yarp::os::Portable.
Definition at line 240 of file Bottle.cpp.
bool Bottle::read | ( | const PortWriter & | writer, |
bool | textMode = false |
||
) |
Set the bottle's value based on input from a serializable object.
Must be serialized in standard Bottle-compatible format.
writer | the serializable object. |
textMode | true if text serialization should be used. |
Definition at line 334 of file Bottle.cpp.
Definition at line 412 of file Bottle.cpp.
size_t Bottle::size | ( | ) | const |
Gets the number of elements in the bottle.
Definition at line 251 of file Bottle.cpp.
Bottle Bottle::tail | ( | ) | const |
Get all but the first element of a bottle.
Definition at line 361 of file Bottle.cpp.
Returns binary representation of bottle.
Lifetime is until next modification of bottle.
size | if non-null, the referenced variable is set to the buffer size. |
Definition at line 222 of file Bottle.cpp.
|
overridevirtual |
Gives a human-readable textual representation of the bottle.
This representation is suitable for passing to Bottle::fromString (see that method for examples).
Implements yarp::os::Searchable.
Definition at line 211 of file Bottle.cpp.
|
static |
Definition at line 371 of file Bottle.cpp.
|
overridevirtual |
Output a representation of the bottle to a network connection.
writer | the interface to the network connection for writing |
Implements yarp::os::Portable.
Definition at line 230 of file Bottle.cpp.
bool Bottle::write | ( | PortReader & | reader, |
bool | textMode = false |
||
) |
Copy the bottle's value to a object that can read a serialization.
Must be serialized in standard Bottle-compatible format.
reader | the serializable object. |
textMode | true if text serialization should be used. |
Definition at line 326 of file Bottle.cpp.
|
friend |
|
static |