← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands/bug-1332627 into lp:widelands

 

SirVer has proposed merging lp:~widelands-dev/widelands/bug-1332627 into lp:widelands.

Requested reviews:
  Widelands Developers (widelands-dev)
Related bugs:
  Bug #1332627 in widelands: "Remove use of boost::noncopyable"
  https://bugs.launchpad.net/widelands/+bug/1332627

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/bug-1332627/+merge/226628

Removes boost::noncopyable and replaces it through a macro.
-- 
https://code.launchpad.net/~widelands-dev/widelands/bug-1332627/+merge/226628
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/bug-1332627 into lp:widelands.
=== added file 'cmake/codecheck/rules/do_not_use_BOOST_noncopyable'
--- cmake/codecheck/rules/do_not_use_BOOST_noncopyable	1970-01-01 00:00:00 +0000
+++ cmake/codecheck/rules/do_not_use_BOOST_noncopyable	2014-07-14 05:56:47 +0000
@@ -0,0 +1,18 @@
+#!/usr/bin/python
+
+"""
+Prefer DEBUG.
+"""
+
+error_msg="Do not inherit from boost::noncopyable. Instead #include \"base/macros.h\" and add \"DISALLOW_COPY_AND_ASSIGN(<Objectname>);\" to the private section of the object or type."
+
+regexp=r"""(^#include.*boost.noncopyable\.hpp|noncopyable)"""
+
+forbidden = [
+    "#include <boost/noncopyable.hpp>",
+    "noncopyable"
+]
+
+allowed = [
+    "DISALLOW_COPY_AND_ASSIGN",
+]

=== modified file 'src/ai/ai_hints.h'
--- src/ai/ai_hints.h	2014-07-12 20:37:13 +0000
+++ src/ai/ai_hints.h	2014-07-14 05:56:47 +0000
@@ -21,14 +21,19 @@
 #define WL_AI_AI_HINTS_H
 
 #include <stdint.h>
+<<<<<<< TREE
 #include <boost/noncopyable.hpp>
+=======
+
+#include "base/macros.h"
+>>>>>>> MERGE-SOURCE
 
 struct Section;
 
 /// This struct is used to read out the data given in [aihints] section of a
 /// buildings conf file. It is used to tell the computer player about the
 /// special properties of a building.
-struct BuildingHints : boost::noncopyable {
+struct BuildingHints {
 	BuildingHints(Section*);
 	~BuildingHints();
 
@@ -94,6 +99,7 @@
 	}
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(BuildingHints);
 	char* renews_map_resource;
 	char* mines_;
 	bool basic_;

=== modified file 'src/ai/computer_player.h'
--- src/ai/computer_player.h	2014-07-05 16:41:51 +0000
+++ src/ai/computer_player.h	2014-07-14 05:56:47 +0000
@@ -20,8 +20,7 @@
 #ifndef WL_AI_COMPUTER_PLAYER_H
 #define WL_AI_COMPUTER_PLAYER_H
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "logic/game.h"
 #include "logic/notification.h"
 
@@ -32,7 +31,6 @@
  * \ref Implementation interface.
  */
 struct Computer_Player :
-	boost::noncopyable,
 	Widelands::NoteReceiver<Widelands::NoteImmovable>,
 	Widelands::NoteReceiver<Widelands::NoteFieldPossession>
 {
@@ -72,6 +70,7 @@
 	static const Implementation * getImplementation(const std::string & name);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Computer_Player);
 	Widelands::Game & m_game;
 	Widelands::Player_Number const m_player_number;
 };

=== modified file 'src/base/macros.h'
--- src/base/macros.h	2014-07-05 16:41:51 +0000
+++ src/base/macros.h	2014-07-14 05:56:47 +0000
@@ -65,6 +65,11 @@
 #define DIAG_OFF(x) GCC_DIAG_OFF(x) CLANG_DIAG_OFF(x)
 #define DIAG_ON(x) GCC_DIAG_ON(x) CLANG_DIAG_ON(x)
 
+// disallow copying or assigning a class
+#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
+TypeName(const TypeName&);   \
+void operator=(const TypeName&)
+
 /// Wrapper macro around a dynamic_cast.
 #define upcast(type, identifier, source) type * const identifier = \
 dynamic_cast<type *>(source)

=== modified file 'src/base/scoped_timer.h'
--- src/base/scoped_timer.h	2014-07-05 16:41:51 +0000
+++ src/base/scoped_timer.h	2014-07-14 05:56:47 +0000
@@ -23,13 +23,13 @@
 #include <string>
 #include <stdint.h>
 
-#include <boost/noncopyable.hpp>
+#include "base/macros.h"
 
 /**
  * A cheap timer class that can be queried for timings and will print out
  * it's total time in existence on destruction.
  */
-class ScopedTimer : boost::noncopyable {
+class ScopedTimer {
 public:
 	// Takes the output message that will be boost::format() with the total time
 	// this object existed (in ms, use %u).
@@ -42,6 +42,7 @@
 	uint32_t ms_since_last_query();
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(ScopedTimer);
 	std::string message_;
 	uint32_t startime_, lasttime_;
 };

=== modified file 'src/economy/economy.h'
--- src/economy/economy.h	2014-07-05 16:41:51 +0000
+++ src/economy/economy.h	2014-07-14 05:56:47 +0000
@@ -27,6 +27,7 @@
 #include <boost/function.hpp>
 #include <boost/utility.hpp>
 
+#include "base/macros.h"
 #include "logic/instances.h"
 #include "logic/warelist.h"
 #include "logic/wareworker.h"
@@ -71,7 +72,7 @@
  * connected by roads or the seafaring network - though of course, most code operates
  * on the assumption that they are, with fallbacks for when they aren't.
  */
-class Economy : boost::noncopyable {
+class Economy {
 public:
 	friend class EconomyDataPacket;
 
@@ -183,6 +184,7 @@
 	void rebalance_supply() {_start_request_timer();}
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Economy);
 /*************/
 /* Functions */
 /*************/

=== modified file 'src/editor/tools/editor_tool.h'
--- src/editor/tools/editor_tool.h	2014-07-05 16:41:51 +0000
+++ src/editor/tools/editor_tool.h	2014-07-14 05:56:47 +0000
@@ -22,8 +22,7 @@
 
 #define MAX_TOOL_AREA 9
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "editor/tools/editor_action_args.h"
 #include "logic/widelands_geometry.h"
 
@@ -39,7 +38,7 @@
  * one function (like delete_building, place building, modify building are 3
  * tools).
  */
-class Editor_Tool : boost::noncopyable {
+class Editor_Tool {
 public:
 	Editor_Tool(Editor_Tool & second, Editor_Tool & third, bool uda = true) :
 		m_second(second), m_third(third), undoable(uda)
@@ -102,6 +101,8 @@
 protected:
 	Editor_Tool & m_second, & m_third;
 	bool undoable;
+private:
+	DISALLOW_COPY_AND_ASSIGN(Editor_Tool);
 };
 
 #endif  // end of include guard: WL_EDITOR_TOOLS_EDITOR_TOOL_H

=== modified file 'src/graphic/animation.cc'
--- src/graphic/animation.cc	2014-07-12 20:37:13 +0000
+++ src/graphic/animation.cc	2014-07-14 05:56:47 +0000
@@ -33,6 +33,7 @@
 #include "base/deprecated.h"
 #include "base/i18n.h"
 #include "base/log.h"
+#include "base/macros.h"
 #include "base/wexception.h"
 #include "graphic/diranimations.h"
 #include "graphic/graphic.h"
@@ -55,7 +56,7 @@
 namespace  {
 
 /// A class that makes iteration over filename_?.png templates easy.
-class NumberGlob : boost::noncopyable {
+class NumberGlob {
 public:
 	typedef uint32_t type;
 	NumberGlob(const std::string& pictmp);
@@ -64,6 +65,7 @@
 	bool next(std::string* s);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(NumberGlob);
 	std::string templ_;
 	std::string fmtstr_;
 	std::string replstr_;

=== modified file 'src/graphic/animation.h'
--- src/graphic/animation.h	2014-07-05 16:41:51 +0000
+++ src/graphic/animation.h	2014-07-14 05:56:47 +0000
@@ -27,6 +27,7 @@
 
 #include <boost/utility.hpp>
 
+#include "base/macros.h"
 #include "base/point.h"
 #include "base/rect.h"
 
@@ -48,7 +49,7 @@
  * The dimensions of an animation is constant and can not change from frame to
  * frame.
  */
-class Animation : boost::noncopyable {
+class Animation {
 public:
 	Animation() {}
 	virtual ~Animation() {}
@@ -87,6 +88,9 @@
 
 	/// Play the sound effect associated with this animation at the given time.
 	virtual void trigger_soundfx(uint32_t time, uint32_t stereo_position) const = 0;
+
+private:
+	DISALLOW_COPY_AND_ASSIGN(Animation);
 };
 
 /**

=== modified file 'src/graphic/image_cache.h'
--- src/graphic/image_cache.h	2014-07-05 19:33:23 +0000
+++ src/graphic/image_cache.h	2014-07-14 05:56:47 +0000
@@ -25,6 +25,7 @@
 
 #include <boost/utility.hpp>
 
+#include "base/macros.h"
 #include "graphic/image.h"
 
 class SurfaceCache;
@@ -36,7 +37,7 @@
 // its hash is not found. Other parts of Widelands will create images when they
 // do not exist in the cache yet and then put it into the cache and therefore
 // releasing their ownership.
-class ImageCache : boost::noncopyable {
+class ImageCache {
 public:
 	// Does not take ownership.
 	ImageCache(SurfaceCache* surface_cache);
@@ -56,6 +57,7 @@
 	bool has(const std::string& hash) const;
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(ImageCache);
 	typedef std::map<std::string, const Image*> ImageMap;
 
 	ImageMap images_;  /// hash of cached filename/image pairs

=== modified file 'src/graphic/render/gamerenderer.h'
--- src/graphic/render/gamerenderer.h	2014-07-05 16:41:51 +0000
+++ src/graphic/render/gamerenderer.h	2014-07-14 05:56:47 +0000
@@ -22,6 +22,7 @@
 
 #include <boost/utility.hpp>
 
+#include "base/macros.h"
 #include "base/point.h"
 
 namespace Widelands {
@@ -41,7 +42,7 @@
  * so that target-specific optimizations (such as caching data) can
  * be effective.
  */
-class GameRenderer : boost::noncopyable {
+class GameRenderer {
 public:
 	GameRenderer();
 	virtual ~GameRenderer();
@@ -93,6 +94,7 @@
 	/*@}*/
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(GameRenderer);
 	void draw_wrapper();
 };
 

=== modified file 'src/graphic/surface_cache.h'
--- src/graphic/surface_cache.h	2014-07-05 16:41:51 +0000
+++ src/graphic/surface_cache.h	2014-07-14 05:56:47 +0000
@@ -24,6 +24,8 @@
 
 #include <boost/utility.hpp>
 
+#include "base/macros.h"
+
 class Surface;
 
 // Caches Surfaces. It contains surfaces which must not be deleted and
@@ -33,7 +35,7 @@
 // Nobody in Widelands should hold onto a Surface they get from this class,
 // instead, they should use it only temporarily and rerequest it whenever they
 // need it.
-class SurfaceCache : boost::noncopyable {
+class SurfaceCache {
 public:
 	SurfaceCache() {}
 	virtual ~SurfaceCache() {}
@@ -50,6 +52,8 @@
 	// automatically - use this if surfaces are around for a long time and
 	// recreation is expensive (i.e. images loaded from disk).
 	virtual Surface* insert(const std::string& hash, Surface*, bool transient) = 0;
+private:
+	DISALLOW_COPY_AND_ASSIGN(SurfaceCache);
 };
 
 // Create a new Cache whichs combined pixels in all transient surfaces are

=== modified file 'src/io/filesystem/filesystem.h'
--- src/io/filesystem/filesystem.h	2014-07-05 16:41:51 +0000
+++ src/io/filesystem/filesystem.h	2014-07-14 05:56:47 +0000
@@ -28,7 +28,6 @@
 #include <vector>
 
 #include <stdint.h>
-#include <boost/noncopyable.hpp>
 
 #include "io/filesystem/filesystem_exceptions.h"
 

=== modified file 'src/io/streamread.h'
--- src/io/streamread.h	2014-07-05 16:41:51 +0000
+++ src/io/streamread.h	2014-07-14 05:56:47 +0000
@@ -23,8 +23,7 @@
 #include <cstring>
 #include <string>
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "base/wexception.h"
 #include "machdep.h"
 
@@ -42,7 +41,7 @@
  *
  * Convenience functions are provided for many data types.
  */
-class StreamRead : boost::noncopyable {
+class StreamRead {
 public:
 	explicit StreamRead() {}
 	virtual ~StreamRead();
@@ -77,6 +76,9 @@
 		_data_error(char const * const fmt, ...) PRINTF_FORMAT(2, 3);
 	};
 #define data_error(...) _data_error(__VA_ARGS__)
+
+private:
+	DISALLOW_COPY_AND_ASSIGN(StreamRead);
 };
 
 #endif  // end of include guard: WL_IO_STREAMREAD_H

=== modified file 'src/io/streamwrite.h'
--- src/io/streamwrite.h	2014-07-05 16:41:51 +0000
+++ src/io/streamwrite.h	2014-07-14 05:56:47 +0000
@@ -25,8 +25,6 @@
 #include <limits>
 #include <string>
 
-#include <boost/noncopyable.hpp>
-
 #include "base/macros.h"
 #include "machdep.h"
 
@@ -40,7 +38,7 @@
  *
  * Convenience functions are provided for many data types.
  */
-class StreamWrite : boost::noncopyable {
+class StreamWrite {
 public:
 	explicit StreamWrite() {}
 	virtual ~StreamWrite();
@@ -90,6 +88,9 @@
 	//  Write strings without null terminator.
 	void Text   (char        const * const x) {Data(x,         strlen(x));}
 	void Text   (const std::string &       x) {Data(x.c_str(), x.size());}
+
+private:
+	DISALLOW_COPY_AND_ASSIGN(StreamWrite);
 };
 
 #endif  // end of include guard: WL_IO_STREAMWRITE_H

=== modified file 'src/logic/cookie_priority_queue.h'
--- src/logic/cookie_priority_queue.h	2014-07-05 16:41:51 +0000
+++ src/logic/cookie_priority_queue.h	2014-07-14 05:56:47 +0000
@@ -25,7 +25,7 @@
 #include <limits>
 #include <vector>
 
-#include <boost/noncopyable.hpp>
+#include "base/macros.h"
 
 template<typename _Type>
 struct default_cookie_accessor;
@@ -36,7 +36,7 @@
 	typedef std::vector<type *> container;
 	typedef typename container::size_type size_type;
 
-	struct cookie : boost::noncopyable {
+	struct cookie {
 		cookie() : pos(bad_pos()) {}
 		~cookie() {}
 
@@ -44,6 +44,7 @@
 		bool is_active() const {return pos != bad_pos();}
 
 	private:
+		DISALLOW_COPY_AND_ASSIGN(cookie);
 		friend struct cookie_priority_queue_base<_Type>;
 
 		size_type pos;

=== modified file 'src/logic/editor_game_base.h'
--- src/logic/editor_game_base.h	2014-07-05 16:41:51 +0000
+++ src/logic/editor_game_base.h	2014-07-14 05:56:47 +0000
@@ -25,8 +25,7 @@
 #include <string>
 #include <vector>
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "logic/bob.h"
 #include "logic/building.h"
 #include "logic/map.h"
@@ -55,7 +54,6 @@
 struct AttackController;
 
 class Editor_Game_Base :
-	boost::noncopyable,
 	NoteReceiver<NoteImmovable>,
 	NoteReceiver<NoteFieldPossession>,
 	NoteReceiver<NoteFieldTransformed>
@@ -171,6 +169,7 @@
 	World* mutable_world();
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Editor_Game_Base);
 	// FIXME -- SDL returns time as uint32. Why do I have int32 ? Please comment or change this to uint32.
 	int32_t gametime_;
 	Object_Manager objects_;

=== modified file 'src/logic/expedition_bootstrap.h'
--- src/logic/expedition_bootstrap.h	2014-07-05 16:41:51 +0000
+++ src/logic/expedition_bootstrap.h	2014-07-14 05:56:47 +0000
@@ -23,8 +23,7 @@
 #include <vector>
 #include <memory>
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "economy/wares_queue.h"
 
 namespace Widelands {
@@ -43,7 +42,7 @@
 // Handles the mustering of workers and wares in a port for one Expedition. This
 // object is created in the port dock as soon as the start expedition button is
 // pressed. As soon as the ship is loaded, this object gets destroyed.
-class ExpeditionBootstrap : boost::noncopyable {
+class ExpeditionBootstrap {
 public:
 	ExpeditionBootstrap(PortDock* const portdock);
 	virtual ~ExpeditionBootstrap();
@@ -82,6 +81,7 @@
 	void save(FileWrite& fw, Game& game, Map_Map_Object_Saver& mos);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(ExpeditionBootstrap);
 	struct ExpeditionWorker;
 
 	// Handles arriving workers and wares.

=== modified file 'src/logic/instances.h'
--- src/logic/instances.h	2014-07-05 16:41:51 +0000
+++ src/logic/instances.h	2014-07-14 05:56:47 +0000
@@ -27,7 +27,6 @@
 #include <vector>
 
 #include <boost/function.hpp>
-#include <boost/noncopyable.hpp>
 #include <boost/unordered_map.hpp>
 #include <boost/signals2.hpp>
 
@@ -53,7 +52,7 @@
  * Base class for descriptions of worker, files and so on. This must just
  * link them together
  */
-struct Map_Object_Descr : boost::noncopyable {
+struct Map_Object_Descr {
 	Map_Object_Descr(const std::string& init_name, const std::string& init_descname)
 	   : m_name(init_name), m_descname(init_descname) {
 	}
@@ -91,6 +90,7 @@
 	void add_attribute(uint32_t attr);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Map_Object_Descr);
 	typedef std::map<std::string, uint32_t> Anims;
 	typedef std::map<std::string, uint32_t> AttribMap;
 	typedef std::vector<uint32_t>           Attributes;
@@ -148,7 +148,7 @@
       return ref_cast<type const, Map_Object_Descr const>(*m_descr);          \
    }                                                                          \
 
-class Map_Object : boost::noncopyable {
+class Map_Object {
 	friend struct Object_Manager;
 	friend struct Object_Ptr;
 
@@ -326,6 +326,9 @@
 	const Map_Object_Descr * m_descr;
 	Serial                   m_serial;
 	LogSink                * m_logsink;
+
+private:
+	DISALLOW_COPY_AND_ASSIGN(Map_Object);
 };
 
 inline int32_t get_reverse_dir(int32_t const dir) {
@@ -337,7 +340,7 @@
  *
  * Keeps the list of all objects currently in the game.
  */
-struct Object_Manager : boost::noncopyable {
+struct Object_Manager  {
 	typedef boost::unordered_map<Serial, Map_Object *> objmap_t;
 
 	Object_Manager() {m_lastserial = 0;}
@@ -372,6 +375,7 @@
 	std::vector<Serial> all_object_serials_ordered () const;
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Object_Manager);
 	Serial   m_lastserial;
 	objmap_t m_objects;
 };

=== modified file 'src/logic/message_queue.h'
--- src/logic/message_queue.h	2014-07-05 16:41:51 +0000
+++ src/logic/message_queue.h	2014-07-14 05:56:47 +0000
@@ -23,14 +23,13 @@
 #include <cassert>
 #include <map>
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "logic/message.h"
 #include "logic/message_id.h"
 
 namespace Widelands {
 
-struct MessageQueue : boost::noncopyable, private std::map<Message_Id, Message *> {
+struct MessageQueue : private std::map<Message_Id, Message *> {
 	friend class Map_Players_Messages_Data_Packet;
 	// Make typedefs public so that this looks like proper
 	// STL container to templated algorithms.
@@ -152,6 +151,8 @@
 	}
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(MessageQueue);
+
 	/// Only for working around bugs in map loading code. If something has
 	/// accidentally been added to the queue during load, it can be worked
 	/// around by clearing the queue before the saved messages are loaded into

=== modified file 'src/logic/player.h'
--- src/logic/player.h	2014-07-05 16:41:51 +0000
+++ src/logic/player.h	2014-07-14 05:56:47 +0000
@@ -20,6 +20,7 @@
 #ifndef WL_LOGIC_PLAYER_H
 #define WL_LOGIC_PLAYER_H
 
+#include "base/macros.h"
 #include "graphic/color.h"
 #include "logic/building.h"
 #include "logic/constants.h"
@@ -54,7 +55,6 @@
  * properly.
  */
 class Player :
-	boost::noncopyable,
 	public NoteReceiver<NoteImmovable>, public NoteReceiver<NoteFieldPossession>,
 	public NoteSender  <NoteImmovable>, public NoteSender  <NoteFieldPossession>
 {
@@ -140,7 +140,7 @@
 	};
 
 	/// Per-player field information.
-	struct Field : boost::noncopyable {
+	struct Field {
 		Field() :
 			military_influence(0),
 			vision            (0),
@@ -352,6 +352,8 @@
 		//  border_br
 		//  border_bl
 		//  <end>                           0x100         0x160
+		private:
+			DISALLOW_COPY_AND_ASSIGN(Field);
 	};
 
 	const Field * fields() const {return m_fields;}
@@ -539,6 +541,8 @@
 		(Building *, Building_Index const index_of_new_building);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Player);
+
 	MessageQueue           m_messages;
 
 	Editor_Game_Base     & m_egbase;

=== modified file 'src/logic/terrain_affinity.h'
--- src/logic/terrain_affinity.h	2014-07-06 08:25:05 +0000
+++ src/logic/terrain_affinity.h	2014-07-14 05:56:47 +0000
@@ -22,8 +22,7 @@
 
 #include <string>
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "logic/description_maintainer.h"
 
 class LuaTable;
@@ -38,7 +37,7 @@
 // Describes the parameters and the pickiness of Immovables towards terrain
 // parameters. Alls immovables that use 'grow' in any of their programs must
 // define this.
-class TerrainAffinity : boost::noncopyable {
+class TerrainAffinity {
 public:
 	explicit TerrainAffinity(const LuaTable& table, const std::string& immovable_name);
 
@@ -56,6 +55,7 @@
 	double pickiness() const;
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(TerrainAffinity);
 	double preferred_fertility_;
 	double preferred_humidity_;
 	double preferred_temperature_;

=== modified file 'src/logic/tribe.h'
--- src/logic/tribe.h	2014-07-05 16:41:51 +0000
+++ src/logic/tribe.h	2014-07-14 05:56:47 +0000
@@ -23,6 +23,7 @@
 #include <map>
 #include <vector>
 
+#include "base/macros.h"
 #include "graphic/animation.h"
 #include "logic/bob.h"
 #include "logic/building.h"
@@ -51,7 +52,7 @@
 buildings it can build and the associated graphics.
 Two players can choose the same tribe.
 */
-struct Tribe_Descr : boost::noncopyable {
+struct Tribe_Descr {
 	Tribe_Descr(const std::string & name, Editor_Game_Base &);
 
 	//  Static function to check for tribes.
@@ -172,6 +173,7 @@
 	void resize_ware_orders(size_t maxLength);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Tribe_Descr);
 	const std::string m_name;
 	uint32_t m_frontier_animation_id;
 	uint32_t m_flag_animation_id;

=== modified file 'src/logic/world/editor_category.h'
--- src/logic/world/editor_category.h	2014-07-05 16:41:51 +0000
+++ src/logic/world/editor_category.h	2014-07-14 05:56:47 +0000
@@ -22,7 +22,7 @@
 
 #include <string>
 
-#include <boost/noncopyable.hpp>
+#include "base/macros.h"
 
 class Image;
 class LuaTable;
@@ -31,7 +31,7 @@
 
 /// Represents a category for grouping items in the Editor, so purely a UI
 /// distinction and not a logical one.
-class EditorCategory : boost::noncopyable {
+class EditorCategory {
 public:
 	EditorCategory(const LuaTable& table);
 
@@ -45,6 +45,7 @@
 	const Image* picture() const;
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(EditorCategory);
 	const std::string name_;
 	const std::string descname_;
 	const std::string image_file_;

=== modified file 'src/logic/world/resource_description.h'
--- src/logic/world/resource_description.h	2014-07-05 16:41:51 +0000
+++ src/logic/world/resource_description.h	2014-07-14 05:56:47 +0000
@@ -23,15 +23,14 @@
 #include <string>
 #include <vector>
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "logic/widelands.h"
 
 class LuaTable;
 
 namespace Widelands {
 
-class ResourceDescription : boost::noncopyable {
+class ResourceDescription {
 public:
 	struct EditorPicture {
 		std::string picname;
@@ -57,6 +56,7 @@
 	const std::string& get_editor_pic(uint32_t amount) const;
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(ResourceDescription);
 	const std::string name_;
 	const std::string descname_;
 	const bool detectable_;

=== modified file 'src/logic/world/terrain_description.h'
--- src/logic/world/terrain_description.h	2014-07-06 08:17:24 +0000
+++ src/logic/world/terrain_description.h	2014-07-14 05:56:47 +0000
@@ -22,8 +22,7 @@
 
 #include <string>
 
-#include <boost/noncopyable.hpp>
-
+#include "base/macros.h"
 #include "logic/widelands.h"
 #include "logic/world/resource_description.h"
 
@@ -34,7 +33,7 @@
 class EditorCategory;
 class World;
 
-class TerrainDescription : boost::noncopyable {
+class TerrainDescription {
 public:
 	enum Type {
 		GREEN = 0,
@@ -94,6 +93,7 @@
 	double fertility() const;
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(TerrainDescription);
 	const std::string name_;
 	const std::string descname_;
 	const EditorCategory* editor_category_;  ///< not owned.

=== modified file 'src/logic/world/world.h'
--- src/logic/world/world.h	2014-07-05 16:41:51 +0000
+++ src/logic/world/world.h	2014-07-14 05:56:47 +0000
@@ -22,6 +22,7 @@
 
 #include <memory>
 
+#include "base/macros.h"
 #include "logic/bob.h"
 #include "logic/description_maintainer.h"
 
@@ -36,7 +37,7 @@
 
 /// This is the in memory descriptions of the world and provides access to
 /// terrains, immovables and resources.
-class World : boost::noncopyable {
+class World {
 public:
 	World();
 	~World();  // Defined in .cc because all forward declarations are known then.
@@ -83,6 +84,7 @@
 	const DescriptionMaintainer<EditorCategory>& editor_immovable_categories() const;
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(World);
 	std::unique_ptr<DescriptionMaintainer<BobDescr>> bobs_;
 	std::unique_ptr<DescriptionMaintainer<Immovable_Descr>> immovables_;
 	std::unique_ptr<DescriptionMaintainer<TerrainDescription>> terrains_;

=== modified file 'src/map_io/s2map.cc'
--- src/map_io/s2map.cc	2014-07-05 14:22:44 +0000
+++ src/map_io/s2map.cc	2014-07-14 05:56:47 +0000
@@ -229,7 +229,7 @@
 /// Returns S2 terrain index into (pre one-world) terrain names. Those are then
 /// looked up in the legacy conversion code and this gives the Widelands
 /// terrain.
-class TerrainConverter : boost::noncopyable {
+class TerrainConverter {
 public:
 	TerrainConverter(const Widelands::World& world, const OneWorldLegacyLookupTable& lookup_table);
 	Widelands::Terrain_Index lookup(S2_Map_Loader::WorldType world, int8_t c) const;
@@ -238,6 +238,9 @@
 	const OneWorldLegacyLookupTable& one_world_legacy_lookup_table_;
 	const Widelands::World& world_;
 	const std::map<S2_Map_Loader::WorldType, std::vector<std::string>> table_;
+
+private:
+	DISALLOW_COPY_AND_ASSIGN(TerrainConverter);
 };
 
 TerrainConverter::TerrainConverter

=== modified file 'src/map_io/s2map.h'
--- src/map_io/s2map.h	2014-07-05 16:41:51 +0000
+++ src/map_io/s2map.h	2014-07-14 05:56:47 +0000
@@ -22,6 +22,7 @@
 
 #include <string>
 
+#include "base/macros.h"
 #include "map_io/map_loader.h"
 
 class FileRead;

=== modified file 'src/profile/profile.h'
--- src/profile/profile.h	2014-07-05 16:41:51 +0000
+++ src/profile/profile.h	2014-07-14 05:56:47 +0000
@@ -23,8 +23,6 @@
 #include <cstring>
 #include <vector>
 
-#include <boost/noncopyable.hpp>
-
 #include "base/macros.h"
 #include "base/point.h"
 #include "io/filesystem/layered_filesystem.h"
@@ -188,7 +186,7 @@
  * Returns the next unused section of the given name, or 0 if all sections
  * have been used. name can be 0 to retrieve any remaining sections.
  */
-class Profile : boost::noncopyable {
+class Profile {
 public:
 	enum {
 		err_ignore = 0,
@@ -233,6 +231,7 @@
 	Section & create_section_duplicate(char const * name);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Profile);
 	std::string m_filename;
 	typedef std::vector<Section> Section_list;
 	Section_list m_sections;

=== modified file 'src/ui_basic/panel.h'
--- src/ui_basic/panel.h	2014-07-13 14:36:19 +0000
+++ src/ui_basic/panel.h	2014-07-14 05:56:47 +0000
@@ -27,9 +27,9 @@
 #include <string>
 
 #include <SDL_keyboard.h>
-#include <boost/noncopyable.hpp>
 #include <boost/signals2/trackable.hpp>
 
+#include "base/macros.h"
 #include "base/point.h"
 
 class RenderTarget;
@@ -57,7 +57,7 @@
  * its desired size changes, this automatically changes the actual size (which then invokes
  * \ref layout and \ref move_inside_parent).
  */
-struct Panel : boost::signals2::trackable, boost::noncopyable {
+struct Panel : boost::signals2::trackable {
 	enum {
 		pf_handle_mouse = 1, ///< receive mouse events
 		pf_think = 2, ///< call think() function during run
@@ -247,6 +247,7 @@
 	static bool draw_tooltip(RenderTarget &, const std::string & text);
 
 private:
+	DISALLOW_COPY_AND_ASSIGN(Panel);
 	class CacheImage;
 	friend class CacheImage;
 

=== modified file 'src/ui_basic/unique_window.h'
--- src/ui_basic/unique_window.h	2014-07-05 16:41:51 +0000
+++ src/ui_basic/unique_window.h	2014-07-14 05:56:47 +0000
@@ -22,8 +22,6 @@
 
 #include <functional>
 
-#include "boost/noncopyable.hpp"
-
 #include "ui_basic/button.h"
 #include "ui_basic/window.h"
 


Follow ups