Split the pager class into two

I've also made the base class abstract, and the derived class a template.
Hopefully this'll let me work on different parts of the class without
major issues.

This code compiles, but since it's incomplete, I can't test it properly.
This commit is contained in:
Kayne Ruse
2014-02-21 03:42:02 +11:00
parent 808fe570a3
commit 31c8bd7fd2
2 changed files with 88 additions and 34 deletions
+43 -25
View File
@@ -21,42 +21,60 @@
*/ */
#include "region_pager.hpp" #include "region_pager.hpp"
RegionPager::RegionPager(int argWidth, int argHeight, int argDepth): #include "utility.hpp"
#include <algorithm>
RegionPagerBase::RegionPagerBase(int argWidth, int argHeight, int argDepth):
regionWidth(argWidth), regionWidth(argWidth),
regionHeight(argHeight), regionHeight(argHeight),
regionDepth(argDepth) regionDepth(argDepth)
{ {
// //EMPTY
} }
RegionPager::~RegionPager() { RegionPagerBase::~RegionPagerBase() {
// //EMPTY
} }
int RegionPager::SetTile(int x, int y, int z, int v) { int RegionPagerBase::SetTile(int x, int y, int z, int v) {
// Region* ptr = GetRegion(snapToBase(regionWidth, x), snapToBase(regionHeight, y));
return ptr->SetTile(x - ptr->GetX(), y = ptr->GetY(), z, v);
} }
int RegionPager::GetTile(int x, int y, int z) { int RegionPagerBase::GetTile(int x, int y, int z) {
// Region* ptr = GetRegion(snapToBase(regionWidth, x), snapToBase(regionHeight, y));
return ptr->GetTile(x - ptr->GetX(), y = ptr->GetY(), z);
} }
Region* RegionPager::GetRegion(int x, int y) { Region* RegionPagerBase::GetRegion(int x, int y) {
// //TODO: clean this up
Region* ptr = nullptr;
//find the loaded region
auto iter = std::find_if(regionList.begin(), regionList.end(), [x,y](Region& it) {
if (it.GetX() == x && it.GetY() == y)
return true;
else
return false;
});
if (iter != regionList.end()) { //ugly hack
ptr = &(*iter);
}
//or load the region
if (!ptr) {
ptr = LoadRegion(x, y);
}
//or create the region
if (!ptr) {
ptr = CreateRegion(x, y);
}
return ptr;
} }
void RegionPager::LoadRegion(int x, int y) { void RegionPagerBase::Update() {
// //TODO
} }
void RegionPager::SaveRegion(int x, int y) {
//
}
void RegionPager::CreateRegion(int x, int y) {
//
}
void RegionPager::UnloadRegion(int x, int y) {
//
}
+45 -9
View File
@@ -26,31 +26,67 @@
#include <list> #include <list>
class RegionPager { class RegionPagerBase {
public: public:
RegionPager() = delete; RegionPagerBase() = delete;
RegionPager(int regionWidth, int regionHeight, int regionDepth); RegionPagerBase(int regionWidth, int regionHeight, int regionDepth);
~RegionPager(); ~RegionPagerBase();
int SetTile(int x, int y, int z, int v); int SetTile(int x, int y, int z, int v);
int GetTile(int x, int y, int z); int GetTile(int x, int y, int z);
void Update();
Region* GetRegion(int x, int y); Region* GetRegion(int x, int y);
void LoadRegion(int x, int y); //interface
void SaveRegion(int x, int y); virtual Region* LoadRegion(int x, int y) = 0;
void CreateRegion(int x, int y); virtual Region* SaveRegion(int x, int y) = 0;
void UnloadRegion(int x, int y); virtual Region* CreateRegion(int x, int y) = 0;
virtual void UnloadRegion(int x, int y) = 0;
//accessors //accessors
int GetRegionWidth() { return regionWidth; } int GetRegionWidth() { return regionWidth; }
int GetRegionHeight() { return regionHeight; } int GetRegionHeight() { return regionHeight; }
int GetRegionDepth() { return regionDepth; } int GetRegionDepth() { return regionDepth; }
private: protected:
const int regionWidth; const int regionWidth;
const int regionHeight; const int regionHeight;
const int regionDepth; const int regionDepth;
std::list<Region> regionList; std::list<Region> regionList;
}; };
template<typename MapGenerator, typename MapFileFormat>
class RegionPager : public RegionPagerBase {
public:
Region* LoadRegion(int x, int y) {
//TODO
//if there's no region to load, return null
}
Region* SaveRegion(int x, int y) {
//TODO
//save the region using the functor
}
Region* CreateRegion(int x, int y) {
//TODO
//create the region
//DON'T call this on a non-zero region,
//or if there's a region saved to the disk
}
void UnloadRegion(int x, int y) {
//TODO
//free the region, possibly saving it
}
//accessors
MapGenerator* GetGenerator() { return &generator; }
MapFileFormat* GetFormat() { return &format; }
protected:
MapGenerator generator;
MapFileFormat format;
};
#endif #endif