gtsam 4.1.1
gtsam
Key.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
18#pragma once
19
20#include <gtsam/base/FastList.h>
21#include <gtsam/base/FastMap.h>
22#include <gtsam/base/FastSet.h>
24#include <gtsam/base/Testable.h>
25#include <gtsam/base/types.h>
26#include <gtsam/dllexport.h>
27
28#include <functional>
29
30#include <iosfwd>
31
32namespace gtsam {
33
35using KeyFormatter = std::function<std::string(Key)>;
36
37// Helper function for DefaultKeyFormatter
38GTSAM_EXPORT std::string _defaultKeyFormatter(Key key);
39
43static const KeyFormatter DefaultKeyFormatter = &_defaultKeyFormatter;
44
45// Helper function for Multi-robot Key Formatter
46GTSAM_EXPORT std::string _multirobotKeyFormatter(gtsam::Key key);
47
54static const gtsam::KeyFormatter MultiRobotKeyFormatter =
55 &_multirobotKeyFormatter;
56
59 const Key &key_;
60 explicit StreamedKey(const Key &key) : key_(key) {}
61 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
62};
63
73 public:
74 explicit key_formatter(KeyFormatter v) : formatter_(v) {}
75 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const key_formatter &);
76 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
77
78 private:
79 KeyFormatter formatter_;
80 static void *&property(std::ios_base &s);
81 static void set_property(std::ios_base &s, const KeyFormatter &f);
82 static KeyFormatter *get_property(std::ios_base &s);
83};
84
86using KeyVector = FastVector<Key>;
87
88// TODO(frank): Nothing fast about these :-(
90using KeySet = FastSet<Key>;
92
94GTSAM_EXPORT void PrintKey(
95 Key key, const std::string &s = "",
96 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
97
99GTSAM_EXPORT void PrintKeyList(
100 const KeyList &keys, const std::string &s = "",
101 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
102
104GTSAM_EXPORT void PrintKeyVector(
105 const KeyVector &keys, const std::string &s = "",
106 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
107
109GTSAM_EXPORT void PrintKeySet(
110 const KeySet &keys, const std::string &s = "",
111 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
112
113// Define Key to be Testable by specializing gtsam::traits
114template<typename T> struct traits;
115
116template <>
117struct traits<Key> {
118 static void Print(const Key& val, const std::string& str = "") {
119 PrintKey(val, str);
120 }
121 static bool Equals(const Key& val1, const Key& val2, double tol = 1e-8) {
122 return val1 == val2;
123 }
124};
125
126} // namespace gtsam
127
128
129
130
A thin wrapper around std::vector that uses a custom allocator.
Typedefs for easier changing of types.
A thin wrapper around std::list that uses boost's fast_pool_allocator.
A thin wrapper around std::map that uses boost's fast_pool_allocator.
A thin wrapper around std::set that uses boost's fast_pool_allocator.
Concept check for values that can be used in unit tests.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition: Key.cpp:77
void PrintKey(Key key, const string &s, const KeyFormatter &keyFormatter)
Utility function to print one key with optional prefix.
Definition: Key.cpp:40
void PrintKeyList(const KeyList &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition: Key.cpp:72
void PrintKeySet(const KeySet &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition: Key.cpp:82
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:69
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
Definition: FastList.h:40
Definition: FastMap.h:38
To use the key_formatter on Keys, they must be wrapped in a StreamedKey.
Definition: Key.h:58
Output stream manipulator that will format gtsam::Keys according to the given KeyFormatter,...
Definition: Key.h:72