summaryrefslogtreecommitdiff
path: root/src/areastore.h
diff options
context:
space:
mode:
authorShadowNinja <shadowninja@minetest.net>2015-10-29 23:08:32 -0400
committerShadowNinja <shadowninja@minetest.net>2016-03-07 16:33:20 -0500
commit095db16990eea878ce01b29c1eb85a128f98381a (patch)
tree9845f990ebdb7c78c1ecf487cfa91eb29fd2b7db /src/areastore.h
parent725cb4eb0743a382851e011fb7de1b7d443ce51f (diff)
downloadminetest-095db16990eea878ce01b29c1eb85a128f98381a.tar.gz
minetest-095db16990eea878ce01b29c1eb85a128f98381a.tar.bz2
minetest-095db16990eea878ce01b29c1eb85a128f98381a.zip
Simplify AreaStore ID management
Diffstat (limited to 'src/areastore.h')
-rw-r--r--src/areastore.h46
1 files changed, 14 insertions, 32 deletions
diff --git a/src/areastore.h b/src/areastore.h
index 57d96450b..de4588706 100644
--- a/src/areastore.h
+++ b/src/areastore.h
@@ -36,34 +36,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/serialize.h"
#endif
-#define AST_EXTREMIFY(min, max, pa, pb) \
- (min).X = MYMIN((pa).X, (pb).X); \
- (min).Y = MYMIN((pa).Y, (pb).Y); \
- (min).Z = MYMIN((pa).Z, (pb).Z); \
- (max).X = MYMAX((pa).X, (pb).X); \
- (max).Y = MYMAX((pa).Y, (pb).Y); \
- (max).Z = MYMAX((pa).Z, (pb).Z);
-
-#define AREA_ID_INVALID 0
struct Area {
- Area(const v3s16 &minedge, const v3s16 &maxedge)
- {
- this->minedge = minedge;
- this->maxedge = maxedge;
- }
-
Area() {}
-
- void extremifyEdges()
+ Area(const v3s16 &mine, const v3s16 &maxe)
{
- v3s16 nminedge;
- v3s16 nmaxedge;
-
- AST_EXTREMIFY(nminedge, nmaxedge, minedge, maxedge)
-
- maxedge = nmaxedge;
- minedge = nminedge;
+ minedge = mine;
+ maxedge = maxe;
+ sortBoxVerticies(minedge, maxedge);
}
u32 id;
@@ -76,13 +56,16 @@ std::vector<std::string> get_areastore_typenames();
class AreaStore {
protected:
- // TODO change to unordered_map when we can
- std::map<u32, Area> areas_map;
void invalidateCache();
virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos) = 0;
+ u32 getNextId() { return m_next_id++; }
+
+ // TODO change to unordered_map when we can
+ std::map<u32, Area> areas_map;
bool cache_enabled; // don't write to this from subclasses, only read.
public:
- virtual void insertArea(const Area &a) = 0;
+ // Updates the area's ID
+ virtual bool insertArea(Area *a) = 0;
virtual void reserve(size_t count) {};
virtual bool removeArea(u32 id) = 0;
void getAreasForPos(std::vector<Area *> *result, v3s16 pos);
@@ -103,13 +86,12 @@ public:
cache_enabled(true),
m_cacheblock_radius(64),
m_res_cache(1000, &cacheMiss, this),
- m_highest_id(0)
+ m_next_id(0)
{
}
void setCacheParams(bool enabled, u8 block_radius, size_t limit);
- u32 getFreeId(v3s16 minedge, v3s16 maxedge);
const Area *getArea(u32 id) const;
u16 size() const;
#if 0
@@ -120,7 +102,7 @@ private:
static void cacheMiss(void *data, const v3s16 &mpos, std::vector<Area *> *dest);
u8 m_cacheblock_radius; // if you modify this, call invalidateCache()
LRUCache<v3s16, std::vector<Area *> > m_res_cache;
- u32 m_highest_id;
+ u32 m_next_id;
};
@@ -129,7 +111,7 @@ class VectorAreaStore : public AreaStore {
protected:
virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos);
public:
- virtual void insertArea(const Area &a);
+ virtual bool insertArea(Area *a);
virtual void reserve(size_t count);
virtual bool removeArea(u32 id);
virtual void getAreasInArea(std::vector<Area *> *result,
@@ -146,7 +128,7 @@ protected:
virtual void getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos);
public:
SpatialAreaStore();
- virtual void insertArea(const Area &a);
+ virtual bool insertArea(Area *a);
virtual bool removeArea(u32 id);
virtual void getAreasInArea(std::vector<Area *> *result,
v3s16 minedge, v3s16 maxedge, bool accept_overlap);