Optimize updateFastFaceRow processing by removing some TileSpec copy (#5678)
[oweals/minetest.git] / src / clientiface.h
index d7622cad3e9e53961bab493ae1fcde6fb8bb80b7..49101fbc1bae4dd0044f20d56ed4b1bb9e19b31c 100644 (file)
@@ -25,10 +25,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "serialization.h"             // for SER_FMT_VER_INVALID
 #include "threading/mutex.h"
 #include "network/networkpacket.h"
+#include "util/cpp11_container.h"
+#include "porting.h"
 
 #include <list>
 #include <vector>
-#include <map>
 #include <set>
 
 class MapBlock;
@@ -165,7 +166,6 @@ namespace con {
        class Connection;
 }
 
-#define CI_ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
 
 // Also make sure to update the ClientInterface::statenames
 // array when modifying these enums
@@ -266,7 +266,7 @@ public:
                m_version_patch(0),
                m_full_version("unknown"),
                m_deployed_compression(0),
-               m_connection_time(getTime(PRECISION_SECONDS))
+               m_connection_time(porting::getTime(PRECISION_SECONDS))
        {
        }
        ~RemoteClient()
@@ -325,14 +325,11 @@ public:
        */
        std::set<u16> m_known_objects;
 
-       ClientState getState()
-               { return m_state; }
+       ClientState getState() const { return m_state; }
 
-       std::string getName()
-               { return m_name; }
+       std::string getName() const { return m_name; }
 
-       void setName(std::string name)
-               { m_name = name; }
+       void setName(const std::string &name) { m_name = name; }
 
        /* update internal client state */
        void notifyEvent(ClientStateEvent event);
@@ -351,7 +348,8 @@ public:
        u32 uptime();
 
        /* set version information */
-       void setVersionInfo(u8 major, u8 minor, u8 patch, std::string full) {
+       void setVersionInfo(u8 major, u8 minor, u8 patch, const std::string &full)
+       {
                m_version_major = major;
                m_version_minor = minor;
                m_version_patch = patch;
@@ -359,10 +357,10 @@ public:
        }
 
        /* read version information */
-       u8 getMajor() { return m_version_major; }
-       u8 getMinor() { return m_version_minor; }
-       u8 getPatch() { return m_version_patch; }
-       std::string getVersion() { return m_full_version; }
+       u8 getMajor() const { return m_version_major; }
+       u8 getMinor() const { return m_version_minor; }
+       u8 getPatch() const { return m_version_patch; }
+       std::string getVersion() const { return m_full_version; }
 private:
        // Version is stored in here after INIT before INIT2
        u8 m_pending_serialization_version;
@@ -394,6 +392,16 @@ private:
        */
        std::map<v3s16, float> m_blocks_sending;
 
+       /*
+               Blocks that have been modified since last sending them.
+               These blocks will not be marked as sent, even if the
+               client reports it has received them to account for blocks
+               that are being modified while on the line.
+
+               List of block positions.
+       */
+       std::set<v3s16> m_blocks_modified;
+
        /*
                Count of excess GotBlocks().
                There is an excess amount because the client sometimes
@@ -443,13 +451,13 @@ public:
        std::vector<u16> getClientIDs(ClientState min_state=CS_Active);
 
        /* get list of client player names */
-       std::vector<std::string> getPlayerNames();
+       const std::vector<std::string> &getPlayerNames() const { return m_clients_names; }
 
        /* send message to client */
        void send(u16 peer_id, u8 channelnum, NetworkPacket* pkt, bool reliable);
 
        /* send to all clients */
-       void sendToAll(u16 channelnum, NetworkPacket* pkt, bool reliable);
+       void sendToAll(NetworkPacket *pkt);
 
        /* delete a client */
        void DeleteClient(u16 peer_id);
@@ -492,8 +500,7 @@ protected:
        void lock() { m_clients_mutex.lock(); }
        void unlock() { m_clients_mutex.unlock(); }
 
-       std::map<u16, RemoteClient*>& getClientList()
-               { return m_clients; }
+       UNORDERED_MAP<u16, RemoteClient*>& getClientList() { return m_clients; }
 
 private:
        /* update internal player list */
@@ -503,7 +510,7 @@ private:
        con::Connection* m_con;
        Mutex m_clients_mutex;
        // Connected clients (behind the con mutex)
-       std::map<u16, RemoteClient*> m_clients;
+       UNORDERED_MAP<u16, RemoteClient*> m_clients;
        std::vector<std::string> m_clients_names; //for announcing masterserver
 
        // Environment