Program Listing for File BaseHandle.hpp
↰ Return to documentation for file (include/lvr2/util/BaseHandle.hpp)
/*
* BaseHandle.hpp
*
* @date 02.06.2017
* @author Lukas Kalbertodt <lukas.kalbertodt@gmail.com>
* @author Malte Hillmann <mhillmann@uni-osnabrueck.de>
*/
#ifndef LVR2_UTIL_BASEHANDLE_H_
#define LVR2_UTIL_BASEHANDLE_H_
#include <boost/optional.hpp>
#include <limits>
#include "lvr2/geometry/pmp/SurfaceMesh.h"
#include "lvr2/util/Panic.hpp"
namespace lvr2
{
using BaseHandle = pmp::Handle;
template <typename NonOptionalT = BaseHandle>
class BaseOptionalHandle : public BaseHandle
{
pmp::IndexType idx() const = delete;
public:
using BaseHandle::BaseHandle;
BaseOptionalHandle()
: BaseHandle()
{}
BaseOptionalHandle(NonOptionalT src)
: BaseHandle(src)
{}
BaseOptionalHandle(boost::optional<BaseHandle> handle)
: BaseHandle(handle ? handle->idx() : std::numeric_limits<pmp::IndexType>::max())
{}
explicit operator bool() const
{
return is_valid();
}
bool operator!() const
{
return !is_valid();
}
NonOptionalT unwrap() const
{
return NonOptionalT(BaseHandle::idx());
}
};
} // namespace lvr2
#endif /* LVR2_UTIL_BASEHANDLE_H_ */