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>
23 #include <gtsam/base/FastVector.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 
32 namespace gtsam {
33 
35 using KeyFormatter = std::function<std::string(Key)>;
36 
37 // Helper function for DefaultKeyFormatter
38 GTSAM_EXPORT std::string _defaultKeyFormatter(Key key);
39 
49 extern GTSAM_EXPORT KeyFormatter DefaultKeyFormatter;
50 
51 // Helper function for Multi-robot Key Formatter
52 GTSAM_EXPORT std::string _multirobotKeyFormatter(gtsam::Key key);
53 
60 extern GTSAM_EXPORT KeyFormatter MultiRobotKeyFormatter;
61 
63 struct StreamedKey {
64  const Key &key_;
65  explicit StreamedKey(const Key &key) : key_(key) {}
66  GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
67 };
68 
78  public:
80  GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const key_formatter &);
81  GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
82 
83  private:
85  static void *&property(std::ios_base &s);
86  static void set_property(std::ios_base &s, const KeyFormatter &f);
87  static KeyFormatter *get_property(std::ios_base &s);
88 };
89 
92 
93 // TODO(frank): Nothing fast about these :-(
97 
99 GTSAM_EXPORT void PrintKey(
100  Key key, const std::string &s = "",
101  const KeyFormatter &keyFormatter = DefaultKeyFormatter);
102 
104 GTSAM_EXPORT void PrintKeyList(
105  const KeyList &keys, const std::string &s = "",
106  const KeyFormatter &keyFormatter = DefaultKeyFormatter);
107 
109 GTSAM_EXPORT void PrintKeyVector(
110  const KeyVector &keys, const std::string &s = "",
111  const KeyFormatter &keyFormatter = DefaultKeyFormatter);
112 
114 GTSAM_EXPORT void PrintKeySet(
115  const KeySet &keys, const std::string &s = "",
116  const KeyFormatter &keyFormatter = DefaultKeyFormatter);
117 
118 // Define Key to be Testable by specializing gtsam::traits
119 template<typename T> struct traits;
120 
121 template <>
122 struct traits<Key> {
123  static void Print(const Key& val, const std::string& str = "") {
124  PrintKey(val, str);
125  }
126  static bool Equals(const Key& val1, const Key& val2, double tol = 1e-8) {
127  return val1 == val2;
128  }
129 };
130 
131 } // namespace gtsam
FastVector.h
A thin wrapper around std::vector that uses a custom allocator.
s
RealScalar s
Definition: level1_cplx_impl.h:126
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
types.h
Typedefs for easier changing of types.
Testable.h
Concept check for values that can be used in unit tests.
keys
const KeyVector keys
Definition: testRegularImplicitSchurFactor.cpp:40
gtsam::FastVector
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
Definition: FastVector.h:34
gtsam::StreamedKey::key_
const Key & key_
Definition: Key.h:64
gtsam::FastMap
Definition: FastMap.h:39
gtsam::PrintKeyVector
void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition: Key.cpp:84
gtsam::FastSet
Definition: FastSet.h:53
gtsam::key_formatter::get_property
static KeyFormatter * get_property(std::ios_base &s)
Definition: Key.cpp:109
gtsam::KeyVector
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:91
gtsam::StreamedKey::operator<<
GTSAM_EXPORT friend std::ostream & operator<<(std::ostream &, const StreamedKey &)
gtsam::DefaultKeyFormatter
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition: Key.cpp:30
gtsam::key_formatter::formatter_
KeyFormatter formatter_
Definition: Key.h:84
gtsam::_multirobotKeyFormatter
string _multirobotKeyFormatter(Key key)
Definition: Key.cpp:50
FastSet.h
A thin wrapper around std::set that uses boost's fast_pool_allocator.
gtsam::PrintKey
void PrintKey(Key key, const string &s, const KeyFormatter &keyFormatter)
Utility function to print one key with optional prefix.
Definition: Key.cpp:45
gtsam::StreamedKey::StreamedKey
StreamedKey(const Key &key)
Definition: Key.h:65
gtsam::KeyFormatter
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
gtsam::key_formatter::property
static void *& property(std::ios_base &s)
Definition: Key.cpp:96
gtsam::FastList
Definition: FastList.h:43
gtsam::traits< Key >::Print
static void Print(const Key &val, const std::string &str="")
Definition: Key.h:123
str
Definition: pytypes.h:1560
key
const gtsam::Symbol key('X', 0)
tree::f
Point2(* f)(const Point3 &, OptionalJacobian< 2, 3 >)
Definition: testExpression.cpp:218
gtsam::key_formatter::set_property
static void set_property(std::ios_base &s, const KeyFormatter &f)
Definition: Key.cpp:103
gtsam::MultiRobotKeyFormatter
KeyFormatter MultiRobotKeyFormatter
Definition: Key.cpp:31
gtsam::StreamedKey
To use the key_formatter on Keys, they must be wrapped in a StreamedKey.
Definition: Key.h:63
gtsam
traits
Definition: ABC.h:17
gtsam::traits
Definition: Group.h:36
gtsam::key_formatter::operator<<
GTSAM_EXPORT friend std::ostream & operator<<(std::ostream &, const key_formatter &)
gtsam::key_formatter
Definition: Key.h:77
gtsam::_defaultKeyFormatter
string _defaultKeyFormatter(Key key)
Definition: Key.cpp:34
v
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
gtsam::traits< Key >::Equals
static bool Equals(const Key &val1, const Key &val2, double tol=1e-8)
Definition: Key.h:126
gtsam::tol
const G double tol
Definition: Group.h:79
FastList.h
A thin wrapper around std::list that uses boost's fast_pool_allocator.
gtsam::key_formatter::key_formatter
key_formatter(KeyFormatter v)
Definition: Key.h:79
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
gtsam::PrintKeySet
void PrintKeySet(const KeySet &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition: Key.cpp:89
gtsam::PrintKeyList
void PrintKeyList(const KeyList &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition: Key.cpp:79
FastMap.h
A thin wrapper around std::map that uses boost's fast_pool_allocator.


gtsam
Author(s):
autogenerated on Wed May 28 2025 03:01:37