summaryrefslogtreecommitdiffstats
path: root/src/BlockState.h
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@outlook.com>2020-09-08 10:46:16 +0200
committerTiger Wang <ziwei.tiger@outlook.com>2020-12-21 01:11:34 +0100
commit742e27ad2f037205285e475be487ec9ed874ca91 (patch)
tree3218d3c2791e823c88a294ba7fdb10035c8fbb9b /src/BlockState.h
parentEnable LOS checks for Hostile Mobs. (diff)
downloadcuberite-742e27ad2f037205285e475be487ec9ed874ca91.tar
cuberite-742e27ad2f037205285e475be487ec9ed874ca91.tar.gz
cuberite-742e27ad2f037205285e475be487ec9ed874ca91.tar.bz2
cuberite-742e27ad2f037205285e475be487ec9ed874ca91.tar.lz
cuberite-742e27ad2f037205285e475be487ec9ed874ca91.tar.xz
cuberite-742e27ad2f037205285e475be487ec9ed874ca91.tar.zst
cuberite-742e27ad2f037205285e475be487ec9ed874ca91.zip
Diffstat (limited to 'src/BlockState.h')
-rw-r--r--src/BlockState.h93
1 files changed, 0 insertions, 93 deletions
diff --git a/src/BlockState.h b/src/BlockState.h
deleted file mode 100644
index ab451236b..000000000
--- a/src/BlockState.h
+++ /dev/null
@@ -1,93 +0,0 @@
-#pragma once
-
-#include <initializer_list>
-
-
-
-
-
-/** Represents the state of a single block (previously known as "block meta").
-The state consists of a map of string -> string, plus a mechanism for fast equality checks between two BlockState instances.
-Once a BlockState instance is created, it is then immutable - there's no way of changing it, only by creating a (modified) copy.
-A BlockState instance can be created from hard-coded data or from dynamic data:
- BlockState bs({{"key1", "value1"}, {key2", "value2"}}); // Hard-coded
- - or -
- std::map<AString, AString> map({{"key1", "value1"}, {key2", "value2"}});
- map["key3"] = "value3";
- BlockState bs(map); // From dynamic data
-*/
-class BlockState
-{
-public:
-
- /** Creates a new instance with an empty map. */
- BlockState();
-
- /** Creates a new instance consisting of a single key-value pair.
- If the value is empty, it is not stored wihin the map. */
- BlockState(const AString & aKey, const AString & aValue);
-
- /** Creates a new instance initialized with several (hard-coded) key-value pairs.
- Any key with an empty value is not stored within the map. */
- BlockState(std::initializer_list<std::pair<const AString, AString>> aKeysAndValues);
-
- /** Creates a new instance initialized with several (dynamic) key-value pairs.
- Makes a copy of aKeysAndValues for this object.
- Any key with an empty value is not stored within the map. */
- BlockState(const std::map<AString, AString> & aKeysAndValues);
-
- /** Creates a new instance initialized with several (dynamic) key-value pairs.
- Any key with an empty value is not stored within the map. */
- BlockState(std::map<AString, AString> && aKeysAndValues);
-
- /** Creates a copy of the specified BlockState with the (hard-coded) additional keys and values added to it.
- Any key in aAdditionalKeysAndValues that is already present in aCopyFrom is overwritten with the aAdditionalKeysAndValues' one.
- Any key with an empty value is not stored in the map.
- (it's possible to erase a key from aCopyFrom by setting it to empty string in aAdditionalKeysAndValues). */
- BlockState(const BlockState & aCopyFrom, std::initializer_list<std::pair<const AString, AString>> aAdditionalKeysAndValues);
-
- /** Creates a copy of the specified BlockState with the (dynamic) additional keys and values added to it.
- Any key in aAdditionalKeysAndValues that is already present in aCopyFrom is overwritten with the aAdditionalKeysAndValues' one.
- Any key with an empty value is not stored in the map.
- (it's possible to erase a key from aCopyFrom by setting it to empty string in aAdditionalKeysAndValues). */
- BlockState(const BlockState & aCopyFrom, const std::map<AString, AString> & aAdditionalKeysAndValues);
-
- /** Less-than comparison. */
- bool operator <(const BlockState & aOther) const;
-
- /** Fast equality check. */
- bool operator ==(const BlockState & aOther) const;
-
- /** Fast inequality check. */
- bool operator !=(const BlockState & aOther) const
- {
- return !(operator ==(aOther));
- }
-
- /** Returns the value at the specified key.
- If the key is not present, returns an empty string. */
- const AString & value(const AString & aKey) const;
-
-
-protected:
-
- /** The state, represented as a string->string map. */
- std::map<AString, AString> mState;
-
- /** The checksum used for the fast equality check.
- This is calculated upon creation. */
- UInt32 mChecksum;
-
-
- /** Normalizes mState and calculates the checksum from it.
- Removes all the empty values from mState.
- Used only from constructors. */
- UInt32 initializeChecksum();
-
- /** Removes all the keys from mState that have an empty value. */
- void removeEmptyKeys();
-
- /** Calculates the partial checksum of a single string.
- Used from within initializeChecksum(). */
- UInt32 partialChecksum(const AString & aString);
-};