namespace mrpt::maps

namespace maps {

// namespaces

namespace mrpt::maps::detail;
namespace mrpt::maps::internal;
namespace mrpt::maps::mrpt;
    namespace mrpt::maps::mrpt::maps;
        namespace mrpt::maps::mrpt::maps::COctoMapBase;

// structs

template <typename TCELL>
struct CLogOddsGridMap2D;

template <typename TCELL>
struct CLogOddsGridMap3D;

template <typename TCELL>
struct CLogOddsGridMapLUT;

struct LAS_HeaderInfo;
struct LAS_LoadParams;
struct LAS_WriteParams;
struct OccGridCellTraits;
struct THeightGridmapCell;
struct TMatchingExtraResults;
struct TMatchingParams;
struct TMatchingRatioParams;
struct TMetricMapInitializer;
struct TRandomFieldCell;
struct TRandomFieldVoxel;
struct TVoxelMap_InsertionOptions;
struct TVoxelMap_LikelihoodOptions;
struct TVoxelMap_RenderingOptions;
struct VoxelNodeOccRGB;
struct VoxelNodeOccupancy;

// classes

class CBeacon;
class CBeaconMap;
class CColouredOctoMap;
class CColouredPointsMap;
class CGasConcentrationGridMap2D;
class CHeightGridMap2D;
class CHeightGridMap2D_Base;
class CHeightGridMap2D_MRF;
class CLandmark;
class CLandmarksMap;
class CMetricMap;
class CMultiMetricMap;
class CMultiMetricMapPDF;
class COccupancyGridMap2D;
class COccupancyGridMap3D;
class COctoMap;

template <class octree_t, class octree_node_t>
class COctoMapBase;

class CPointCloudFilterBase;
class CPointCloudFilterByDistance;
class CPointsMap;
class CPointsMapXYZI;
class CRBPFParticleData;
class CRandomFieldGridMap2D;
class CRandomFieldGridMap3D;
class CReflectivityGridMap2D;
class CSimpleMap;
class CSimplePointsMap;
class CVoxelMap;

template <typename node_t>
class CVoxelMapBase;

template <typename voxel_node_t, typename occupancy_t = int8_t>
class CVoxelMapOccupancyBase;

class CVoxelMapRGB;
class CWeightedPointsMap;
class CWirelessPowerGridMap2D;
class NearestNeighborsCapable;
class TMapGenericParams;
class TSetOfMetricMapInitializers;
class mrptEventMetricMapClear;
class mrptEventMetricMapInsert;

// global functions

bool operator < (
    const COccupancyGridMap2D::TPairLikelihoodIndex& e1,
    const COccupancyGridMap2D::TPairLikelihoodIndex& e2
    );

template <class POINTSMAP>
bool saveLASFile(
    const POINTSMAP& ptmap,
    const std::string& filename,
    const LAS_WriteParams& params = LAS_WriteParams()
    );

template <class POINTSMAP>
bool loadLASFile(
    POINTSMAP& ptmap,
    const std::string& filename,
    LAS_HeaderInfo& out_headerInfo,
    const LAS_LoadParams& params = LAS_LoadParams()
    );

void registerAllClasses_mrpt_maps();

} // namespace maps