gtsam 4.1.1
gtsam
LabeledSymbol.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4 * Atlanta, Georgia 30332-0415
5 * All Rights Reserved
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7
8 * See LICENSE for the license information
9
10 * -------------------------------------------------------------------------- */
11
20#pragma once
21
22#include <functional>
24
25namespace gtsam {
26
35class GTSAM_EXPORT LabeledSymbol {
36protected:
37 unsigned char c_, label_;
38 std::uint64_t j_;
39
40public:
43
45 LabeledSymbol(const LabeledSymbol& key);
46
48 LabeledSymbol(unsigned char c, unsigned char label, std::uint64_t j);
49
52
54 operator gtsam::Key() const;
55
56 // Testable Requirements
57 void print(const std::string& s = "") const;
58
59 bool equals(const LabeledSymbol& expected, double tol = 0.0) const {
60 return (*this) == expected;
61 }
62
64 gtsam::Key key() const { return (gtsam::Key) *this; }
65
67 inline unsigned char label() const { return label_; }
68
70 inline unsigned char chr() const { return c_; }
71
73 inline size_t index() const { return j_; }
74
76 operator std::string() const;
77
79 bool operator<(const LabeledSymbol& comp) const;
80 bool operator==(const LabeledSymbol& comp) const;
81 bool operator==(gtsam::Key comp) const;
82 bool operator!=(const LabeledSymbol& comp) const;
83 bool operator!=(gtsam::Key comp) const;
84
91 // Checks only the type
92 static std::function<bool(gtsam::Key)> TypeTest(unsigned char c);
93
94 // Checks only the robot ID (label_)
95 static std::function<bool(gtsam::Key)> LabelTest(unsigned char label);
96
97 // Checks both type and the robot ID
98 static std::function<bool(gtsam::Key)> TypeLabelTest(unsigned char c, unsigned char label);
99
100 // Converts to upper/lower versions of labels
101 LabeledSymbol upper() const { return LabeledSymbol(c_, toupper(label_), j_); }
102 LabeledSymbol lower() const { return LabeledSymbol(c_, tolower(label_), j_); }
103
104 // Create a new symbol with a different character.
105 LabeledSymbol newChr(unsigned char c) const { return LabeledSymbol(c, label_, j_); }
106
107 // Create a new symbol with a different label.
108 LabeledSymbol newLabel(unsigned char label) const { return LabeledSymbol(c_, label, j_); }
109
111 friend GTSAM_EXPORT std::ostream &operator<<(std::ostream &, const LabeledSymbol &);
112
113private:
114
116 friend class boost::serialization::access;
117 template<class ARCHIVE>
118 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
119 ar & BOOST_SERIALIZATION_NVP(c_);
120 ar & BOOST_SERIALIZATION_NVP(label_);
121 ar & BOOST_SERIALIZATION_NVP(j_);
122 }
123}; // \class LabeledSymbol
124
126inline Key mrsymbol(unsigned char c, unsigned char label, size_t j) {
127 return (Key)LabeledSymbol(c,label,j);
128}
129
131inline unsigned char mrsymbolChr(Key key) { return LabeledSymbol(key).chr(); }
132
134inline unsigned char mrsymbolLabel(Key key) { return LabeledSymbol(key).label(); }
135
137inline size_t mrsymbolIndex(Key key) { return LabeledSymbol(key).index(); }
138
140template<> struct traits<LabeledSymbol> : public Testable<LabeledSymbol> {};
141
142} // \namespace gtsam
143
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:112
unsigned char mrsymbolChr(Key key)
Return the character portion of a symbol key.
Definition: LabeledSymbol.h:131
size_t mrsymbolIndex(Key key)
Return the index portion of a symbol key.
Definition: LabeledSymbol.h:137
unsigned char mrsymbolLabel(Key key)
Return the label portion of a symbol key.
Definition: LabeledSymbol.h:134
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:155
bool operator!=(const Matrix &A, const Matrix &B)
inequality
Definition: Matrix.h:110
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:69
Key mrsymbol(unsigned char c, unsigned char label, size_t j)
Create a symbol key from a character, label and index, i.e.
Definition: LabeledSymbol.h:126
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition: Matrix.h:103
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
Template to create a binary predicate.
Definition: Testable.h:111
A helper that implements the traits interface for GTSAM types.
Definition: Testable.h:151
Customized version of gtsam::Symbol for multi-robot use.
Definition: LabeledSymbol.h:35
unsigned char chr() const
Retrieve key character.
Definition: LabeledSymbol.h:70
gtsam::Key key() const
return the integer version
Definition: LabeledSymbol.h:64
size_t index() const
Retrieve key index.
Definition: LabeledSymbol.h:73
unsigned char label() const
Retrieve label character.
Definition: LabeledSymbol.h:67