From 58841ef12f6cba1bb622353c1fcaa0e3c6fb46c9 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Tue, 23 Oct 2012 01:18:44 +0400 Subject: Add dummy and LevelDB database backends --- src/database.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/database.cpp (limited to 'src/database.cpp') diff --git a/src/database.cpp b/src/database.cpp new file mode 100644 index 000000000..771d9b962 --- /dev/null +++ b/src/database.cpp @@ -0,0 +1,50 @@ +#include "map.h" +#include "mapsector.h" +#include "mapblock.h" +#include "main.h" +#include "filesys.h" +#include "voxel.h" +#include "porting.h" +#include "mapgen.h" +#include "nodemetadata.h" +#include "settings.h" +#include "log.h" +#include "profiler.h" +#include "nodedef.h" +#include "gamedef.h" +#include "util/directiontables.h" +#include "rollback_interface.h" + + +#include "database.h" + +static s32 unsignedToSigned(s32 i, s32 max_positive) +{ + if(i < max_positive) + return i; + else + return i - 2*max_positive; +} + +// modulo of a negative number does not work consistently in C +static s64 pythonmodulo(s64 i, s64 mod) +{ + if(i >= 0) + return i % mod; + return mod - ((-i) % mod); +} + +long long Database::getBlockAsInteger(const v3s16 pos) { + return (unsigned long long)pos.Z*16777216 + + (unsigned long long)pos.Y*4096 + + (unsigned long long)pos.X; +} + +v3s16 Database::getIntegerAsBlock(long long i) { + s32 x = unsignedToSigned(pythonmodulo(i, 4096), 2048); + i = (i - x) / 4096; + s32 y = unsignedToSigned(pythonmodulo(i, 4096), 2048); + i = (i - y) / 4096; + s32 z = unsignedToSigned(pythonmodulo(i, 4096), 2048); + return v3s16(x,y,z); +} -- cgit v1.2.3