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_ */