#include <iostream>
#include <cstdint>
using s8 = std::int8_t;
using u8 = std::uint8_t;
using s16 = std::int16_t;
using u16 = std::uint16_t;
using s32 = std::int32_t;
using u32 = std::uint32_t;
using s64 = std::int64_t;
using u64 = std::uint64_t;
using namespace std;
template <typename TIndex>
struct CVertexManagerFixed
{
template <typename TPathBuilder, typename TCompoundVertex>
class CDataStorage : public TPathBuilder::template CDataStorage<TCompoundVertex>
{
public:
using CDataStorageBase = typename TPathBuilder::template CDataStorage<TCompoundVertex>;
using Vertex = TCompoundVertex;
using Index = TIndex;
public:
inline CDataStorage(const u32 vertex_count);
inline virtual ~CDataStorage();
inline Vertex& get_node(const Index& vertex_id) const;
};
};
#define TEMPLATE_SPECIALIZATION \
template <typename TIndex> \
template <typename TPathBuilder, typename TCompoundVertex>
#define CFixedVertexManager \
CVertexManagerFixed<TIndex>::template CDataStorage<TPathBuilder, TCompoundVertex> // error#1: non-template ‘CDataStorage’ used as template error#2: expected unqualified-id before ‘,’ token
TEMPLATE_SPECIALIZATION
inline CFixedVertexManager::CDataStorage(const u32 vertex_count)
: CDataStorageBase(vertex_count)
{
}
TEMPLATE_SPECIALIZATION
inline typename CFixedVertexManager::Vertex& CFixedVertexManager::get_node(const Index& vertex_id) const
{
VERIFY(vertex_id < m_max_node_count);
VERIFY(is_visited(vertex_id));
return *m_indexes[vertex_id].m_vertex;
}