59 lines
1.2 KiB
C++
59 lines
1.2 KiB
C++
/*
|
|
* Key.h
|
|
*
|
|
* Created on: Jan 12, 2010
|
|
* @author: Frank Dellaert
|
|
* @author: Richard Roberts
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <boost/format.hpp>
|
|
#include <boost/serialization/serialization.hpp>
|
|
|
|
namespace gtsam {
|
|
|
|
/**
|
|
* Symbol key class is templated on
|
|
* 1) the type T it is supposed to retrieve, for extra type checking
|
|
* 2) the character constant used for its string representation
|
|
* TODO: make Testable
|
|
*/
|
|
template <class T, char C>
|
|
class Symbol {
|
|
|
|
private:
|
|
size_t j_;
|
|
|
|
public:
|
|
|
|
// Constructors:
|
|
|
|
Symbol():j_(999999) {}
|
|
Symbol(size_t j):j_(j) {}
|
|
|
|
// Get stuff:
|
|
|
|
size_t index() const { return j_;}
|
|
operator std::string() const { return (boost::format("%c%d") % C % j_).str(); }
|
|
std::string latex() const { return (boost::format("%c_{%d}") % C % j_).str(); }
|
|
|
|
// logic:
|
|
|
|
bool operator< (const Symbol& compare) const { return j_<compare.j_;}
|
|
bool operator== (const Symbol& compare) const { return j_==compare.j_;}
|
|
|
|
private:
|
|
|
|
/** Serialization function */
|
|
friend class boost::serialization::access;
|
|
template<class Archive>
|
|
void serialize(Archive & ar, const unsigned int version) {
|
|
ar & BOOST_SERIALIZATION_NVP(j_);
|
|
}
|
|
|
|
};
|
|
|
|
} // namespace gtsam
|
|
|