Skip to content

Commit

Permalink
C++11 patchset 6: forbid object copy using assigment/copy function de…
Browse files Browse the repository at this point in the history
…leters (#5945)

C++11 implement function deleting, it's generally used to prevent some object copy
In script API use this function removal on ScriptApiBase instead of ScriptApiClient/Server/MainMenu, this affect all ScriptApis
Move DISABLE_CLASS_COPY with constructor, the deleted function permit to replace function in its original place
  • Loading branch information
nerzhul committed Jun 10, 2017
1 parent 9c497aa commit ab128e0
Show file tree
Hide file tree
Showing 12 changed files with 13 additions and 28 deletions.
2 changes: 1 addition & 1 deletion src/client.h
Expand Up @@ -272,6 +272,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
);

~Client();
DISABLE_CLASS_COPY(Client);

void initMods();

Expand Down Expand Up @@ -691,7 +692,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
GameUIFlags *m_game_ui_flags;

bool m_shutdown;
DISABLE_CLASS_COPY(Client);
};

#endif // !CLIENT_HEADER
4 changes: 1 addition & 3 deletions src/emerge.h
Expand Up @@ -119,6 +119,7 @@ class EmergeManager {
// Methods
EmergeManager(Server *server);
~EmergeManager();
DISABLE_CLASS_COPY(EmergeManager);

bool initMapgens(MapgenParams *mgparams);

Expand All @@ -144,7 +145,6 @@ class EmergeManager {
Mapgen *getCurrentMapgen();

// Mapgen helpers methods
Biome *getBiomeAtPoint(v3s16 p);
int getSpawnLevelAtPoint(v2s16 p);
int getGroundLevelAtPoint(v2s16 p);
bool isBlockUnderground(v3s16 blockpos);
Expand Down Expand Up @@ -178,8 +178,6 @@ class EmergeManager {
bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);

friend class EmergeThread;

DISABLE_CLASS_COPY(EmergeManager);
};

#endif
3 changes: 1 addition & 2 deletions src/environment.h
Expand Up @@ -49,6 +49,7 @@ class Environment
// Environment will delete the map passed to the constructor
Environment(IGameDef *gamedef);
virtual ~Environment();
DISABLE_CLASS_COPY(Environment);

/*
Step everything in environment.
Expand Down Expand Up @@ -121,8 +122,6 @@ class Environment

private:
std::mutex m_time_lock;

DISABLE_CLASS_COPY(Environment);
};

#endif
8 changes: 1 addition & 7 deletions src/map.h
Expand Up @@ -142,11 +142,7 @@ class Map /*: public NodeContainer*/

Map(std::ostream &dout, IGameDef *gamedef);
virtual ~Map();

/*virtual u16 nodeContainerId() const
{
return NODECONTAINER_ID_MAP;
}*/
DISABLE_CLASS_COPY(Map);

virtual s32 mapType() const
{
Expand Down Expand Up @@ -344,8 +340,6 @@ class Map /*: public NodeContainer*/
u32 m_unprocessed_count;
u64 m_inc_trending_up_start_time; // milliseconds
bool m_queue_size_timer_started;

DISABLE_CLASS_COPY(Map);
};

/*
Expand Down
2 changes: 1 addition & 1 deletion src/mapgen.h
Expand Up @@ -192,6 +192,7 @@ class Mapgen {
Mapgen();
Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge);
virtual ~Mapgen();
DISABLE_CLASS_COPY(Mapgen);

virtual MapgenType getType() const { return MAPGEN_INVALID; }

Expand Down Expand Up @@ -233,7 +234,6 @@ class Mapgen {
// that checks whether there are floodable nodes without liquid beneath
// the node at index vi.
inline bool isLiquidHorizontallyFlowable(u32 vi, v3s16 em);
DISABLE_CLASS_COPY(Mapgen);
};

/*
Expand Down
4 changes: 1 addition & 3 deletions src/objdef.h
Expand Up @@ -59,6 +59,7 @@ class ObjDefManager {
public:
ObjDefManager(IGameDef *gamedef, ObjDefType type);
virtual ~ObjDefManager();
DISABLE_CLASS_COPY(ObjDefManager);

virtual const char *getObjectTitle() const { return "ObjDef"; }

Expand Down Expand Up @@ -91,9 +92,6 @@ class ObjDefManager {
INodeDefManager *m_ndef;
std::vector<ObjDef *> m_objects;
ObjDefType m_objtype;

private:
DISABLE_CLASS_COPY(ObjDefManager);
};

#endif
2 changes: 2 additions & 0 deletions src/script/cpp_api/s_base.h
Expand Up @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,

#include <iostream>
#include <string>
#include "util/basic_macros.h"

extern "C" {
#include <lua.h>
Expand Down Expand Up @@ -66,6 +67,7 @@ class ScriptApiBase {
public:
ScriptApiBase();
virtual ~ScriptApiBase();
DISABLE_CLASS_COPY(ScriptApiBase);

// These throw a ModError on failure
void loadMod(const std::string &script_path, const std::string &mod_name);
Expand Down
2 changes: 0 additions & 2 deletions src/script/scripting_client.h
Expand Up @@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_base.h"
#include "cpp_api/s_client.h"
#include "cpp_api/s_security.h"
#include "util/basic_macros.h"

class Client;
class LocalPlayer;
Expand All @@ -41,6 +40,5 @@ class ClientScripting:

private:
virtual void InitializeModApi(lua_State *L, int top);
DISABLE_CLASS_COPY(ClientScripting);
};
#endif
2 changes: 0 additions & 2 deletions src/script/scripting_mainmenu.h
Expand Up @@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_base.h"
#include "cpp_api/s_mainmenu.h"
#include "cpp_api/s_async.h"
#include "util/basic_macros.h"

/*****************************************************************************/
/* Scripting <-> Main Menu Interface */
Expand All @@ -47,7 +46,6 @@ class MainMenuScripting
static void registerLuaClasses(lua_State *L, int top);

AsyncEngine asyncEngine;
DISABLE_CLASS_COPY(MainMenuScripting);
};


Expand Down
2 changes: 0 additions & 2 deletions src/script/scripting_server.h
Expand Up @@ -28,7 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_player.h"
#include "cpp_api/s_server.h"
#include "cpp_api/s_security.h"
#include "util/basic_macros.h"

/*****************************************************************************/
/* Scripting <-> Server Game Interface */
Expand All @@ -51,7 +50,6 @@ class ServerScripting:

private:
void InitializeModApi(lua_State *L, int top);
DISABLE_CLASS_COPY(ServerScripting);
};

void log_deprecated(const std::string &message);
Expand Down
4 changes: 2 additions & 2 deletions src/server.h
Expand Up @@ -155,6 +155,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
ChatInterface *iface = NULL
);
~Server();
DISABLE_CLASS_COPY(Server);

void start(Address bind_addr);
void stop();
// This is mainly a way to pass the time to the server.
Expand Down Expand Up @@ -671,8 +673,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,

std::unordered_map<std::string, ModMetadata *> m_mod_storages;
float m_mod_storage_save_timer;

DISABLE_CLASS_COPY(Server);
};

/*
Expand Down
6 changes: 3 additions & 3 deletions src/util/basic_macros.h
Expand Up @@ -33,9 +33,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) as a private member.
// Note this also disables copying for any classes derived from 'Foobar' as well
// as classes having a 'Foobar' member.
#define DISABLE_CLASS_COPY(C) \
C(const C &); \
C &operator=(const C &)
#define DISABLE_CLASS_COPY(C) \
C(const C &) = delete; \
C &operator=(const C &) = delete;

#ifndef _MSC_VER
#define UNUSED_ATTRIBUTE __attribute__ ((unused))
Expand Down

0 comments on commit ab128e0

Please sign in to comment.