38    template <MapdataDerived T>
 
   39    [[nodiscard]] T *parseMapdata(
u32 sectionName)
 const {
 
   41        return sectionPtr ? 
new T(sectionPtr) : 
nullptr;
 
   44    [[nodiscard]] s16 findSector(
const EGG::Vector3f &pos, 
u16 checkpointIdx, f32 &distanceRatio);
 
   45    [[nodiscard]] s16 findRecursiveSector(
const EGG::Vector3f &pos, s16 depth,
 
   47            bool playerIsForwards) 
const;
 
   52    [[nodiscard]] f32 getCheckPointEntryOffsetExact(
u16 i, 
const EGG::Vector3f &pos,
 
   57        return i < getCannonPointCount() ? m_cannonPoint->get(i) : 
nullptr;
 
   62        return i < getCheckPathCount() ? m_checkPath->get(i) : 
nullptr;
 
   67        return i < getCheckPointCount() ? m_checkPoint->get(i) : 
nullptr;
 
   72        return i < getGeoObjCount() ? m_geoObj->get(i) : 
nullptr;
 
   77        return i < getPointInfoCount() ? m_pointInfo->get(i) : 
nullptr;
 
   82        return i < getJugemPointCount() ? m_jugemPoint->get(i) : 
nullptr;
 
   87        return getStageInfoCount() != 0 ? m_stageInfo->get(0) : 
nullptr;
 
   92        return i < getStartPointCount() ? m_startPoint->get(i) : 
nullptr;
 
   95    [[nodiscard]] 
u16 getCannonPointCount()
 const {
 
   96        return m_cannonPoint ? m_cannonPoint->size() : 0;
 
   99    [[nodiscard]] 
u16 getCheckPathCount()
 const {
 
  100        return m_checkPath ? m_checkPath->size() : 0;
 
  103    [[nodiscard]] 
u16 getCheckPointCount()
 const {
 
  104        return m_checkPoint ? m_checkPoint->size() : 0;
 
  107    [[nodiscard]] 
u16 getGeoObjCount()
 const {
 
  108        return m_geoObj ? m_geoObj->size() : 0;
 
  111    [[nodiscard]] 
u16 getPointInfoCount()
 const {
 
  112        return m_pointInfo ? m_pointInfo->size() : 0;
 
  115    [[nodiscard]] 
u16 getJugemPointCount()
 const {
 
  116        return m_jugemPoint ? m_jugemPoint->size() : 0;
 
  119    [[nodiscard]] 
u16 getStageInfoCount()
 const {
 
  120        return m_stageInfo ? m_stageInfo->size() : 0;
 
  123    [[nodiscard]] 
u16 getStartPointCount()
 const {
 
  124        return m_startPoint ? m_startPoint->size() : 0;
 
  127    [[nodiscard]] 
u32 version()
 const {
 
  128        return m_course->version();
 
  139    [[nodiscard]] f32 startTmpAngle()
 const {
 
  140        return m_startTmpAngle;
 
  143    [[nodiscard]] f32 startTmp0()
 const {
 
  147    [[nodiscard]] f32 startTmp1()
 const {
 
  151    [[nodiscard]] f32 startTmp2()
 const {
 
  155    [[nodiscard]] f32 startTmp3()
 const {
 
  161    static void DestroyInstance();
 
  163    [[nodiscard]] 
static CourseMap *Instance() {
 
  171    [[nodiscard]] s16 findSectorBetweenSides(
const EGG::Vector3f &pos,
 
  173    [[nodiscard]] s16 findSectorOutsideSector(
const EGG::Vector3f &pos,
 
  177    [[nodiscard]] s16 searchNextCheckpoint(
const EGG::Vector3f &pos, s16 depth,
 
  179            bool useCache) 
const;
 
  180    [[nodiscard]] s16 searchPrevCheckpoint(
const EGG::Vector3f &pos, s16 depth,
 
  182            bool useCache) 
const;
 
  183    void clearSectorChecked();
 
  202    static void *LoadFile(
const char *filename); 
 
 
Contexts can be used to restore a previous memory state for the current session.