Added clone() to Value
parent
8a8b27005f
commit
dd8afd6527
|
|
@ -16,7 +16,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <boost/make_shared.hpp>
|
||||||
#include <boost/pool/singleton_pool.hpp>
|
#include <boost/pool/singleton_pool.hpp>
|
||||||
#include <gtsam/base/Value.h>
|
#include <gtsam/base/Value.h>
|
||||||
|
|
||||||
|
|
@ -37,7 +37,8 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a duplicate object returned as a pointer to the generic Value interface.
|
* Create a duplicate object returned as a pointer to the generic Value interface.
|
||||||
* For the sake of performance, this function use singleton pool allocator instead of the normal heap allocator
|
* For the sake of performance, this function use singleton pool allocator instead of the normal heap allocator.
|
||||||
|
* The result must be deleted with Value::deallocate_, not with the 'delete' operator.
|
||||||
*/
|
*/
|
||||||
virtual Value* clone_() const {
|
virtual Value* clone_() const {
|
||||||
void *place = boost::singleton_pool<PoolTag, sizeof(DERIVED)>::malloc();
|
void *place = boost::singleton_pool<PoolTag, sizeof(DERIVED)>::malloc();
|
||||||
|
|
@ -53,6 +54,13 @@ public:
|
||||||
boost::singleton_pool<PoolTag, sizeof(DERIVED)>::free((void*)this);
|
boost::singleton_pool<PoolTag, sizeof(DERIVED)>::free((void*)this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clone this value (normal clone on the heap, delete with 'delete' operator)
|
||||||
|
*/
|
||||||
|
virtual boost::shared_ptr<Value> clone() const {
|
||||||
|
return boost::make_shared<DERIVED>(static_cast<const DERIVED&>(*this));
|
||||||
|
}
|
||||||
|
|
||||||
/// equals implementing generic Value interface
|
/// equals implementing generic Value interface
|
||||||
virtual bool equals_(const Value& p, double tol = 1e-9) const {
|
virtual bool equals_(const Value& p, double tol = 1e-9) const {
|
||||||
// Cast the base class Value pointer to a derived class pointer
|
// Cast the base class Value pointer to a derived class pointer
|
||||||
|
|
|
||||||
|
|
@ -101,12 +101,15 @@ namespace gtsam {
|
||||||
class Value {
|
class Value {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Allocate and construct a clone of this value */
|
/** Clone this value in a special memory pool, must be deleted with Value::deallocate_, *not* with the 'delete' operator. */
|
||||||
virtual Value* clone_() const = 0;
|
virtual Value* clone_() const = 0;
|
||||||
|
|
||||||
/** Deallocate a raw pointer of this value */
|
/** Deallocate a raw pointer of this value */
|
||||||
virtual void deallocate_() const = 0;
|
virtual void deallocate_() const = 0;
|
||||||
|
|
||||||
|
/** Clone this value (normal clone on the heap, delete with 'delete' operator) */
|
||||||
|
virtual boost::shared_ptr<Value> clone() const = 0;
|
||||||
|
|
||||||
/** Compare this Value with another for equality. */
|
/** Compare this Value with another for equality. */
|
||||||
virtual bool equals_(const Value& other, double tol = 1e-9) const = 0;
|
virtual bool equals_(const Value& other, double tol = 1e-9) const = 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue