Andre Poenitz wrote:
I want to get rid of those parts of boost that have an
exceptionally bad overhead.

Patch to replace boost::noncopyable with a homemade version attached.
If you're confident about the code, I don't myself see any loss---except the 30,000 lines of code.

rh
This is to avoid a discussion on the "expressiveness" of
        #include "something"

        class Foo : NonCopiable {
                ...
        };

vs

        class Foo {
                ...
        private:
                // make class noncopyable: unintentionally no implemented
                Foo(Foo const &);
                Foo & operator=(Foo const &);
        };

I actually prefer the latter, but the former is closer to the boost::noncopyable version we have right now.

In any case I want to get rid of #include <boost/utility> which we only
use for boost::noncopyable (i.e. < 10 lines) It pulls in 30000 lines of
otherwise mainly useless code which ends up thanks to its use in
BufferView.h in almost all of our translation units.

Andre'
------------------------------------------------------------------------

Index: BufferList.h
===================================================================
--- BufferList.h        (revision 20587)
+++ BufferList.h        (working copy)
@@ -14,7 +14,7 @@
#include "support/docstring.h" -#include <boost/utility.hpp>
+#include "support/utility.h"
#include <vector> @@ -28,7 +28,7 @@
  * The class holds all all open buffers, and handles construction
  * and deletions of new ones.
  */
-class BufferList : boost::noncopyable {
+class BufferList : NonCopyable {
 public:
        typedef std::vector<Buffer *>::iterator iterator;
        typedef std::vector<Buffer *>::const_iterator const_iterator;
Index: insets/ExternalTemplate.h
===================================================================
--- insets/ExternalTemplate.h   (revision 20587)
+++ insets/ExternalTemplate.h   (working copy)
@@ -15,7 +15,7 @@
#include "ExternalTransforms.h" -#include <boost/utility.hpp>
+#include "support/utility.h"
namespace lyx { @@ -97,7 +97,7 @@
 /**
  *  A singleton class that manages the external inset templates
  */
-class TemplateManager : boost::noncopyable {
+class TemplateManager : NonCopyable {
 public:
        /// Map from the LyX name of the template to the template structure
        typedef std::map<std::string, Template> Templates;
Index: graphics/GraphicsCacheItem.h
===================================================================
--- graphics/GraphicsCacheItem.h        (revision 20587)
+++ graphics/GraphicsCacheItem.h        (working copy)
@@ -30,7 +30,7 @@
#include "GraphicsTypes.h" -#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/scoped_ptr.hpp>
 #include <boost/signal.hpp>
@@ -45,7 +45,7 @@
 class Converter;
/// A lyx::graphics::Cache item holder.
-class CacheItem : boost::noncopyable {
+class CacheItem : NonCopyable {
 public:
        ///
        CacheItem(support::FileName const & file);
Index: graphics/Previews.h
===================================================================
--- graphics/Previews.h (revision 20587)
+++ graphics/Previews.h (working copy)
@@ -15,7 +15,7 @@
 #ifndef PREVIEWS_H
 #define PREVIEWS_H
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/scoped_ptr.hpp>
namespace lyx {
@@ -27,7 +27,7 @@
class PreviewLoader; -class Previews : boost::noncopyable {
+class Previews : NonCopyable {
 public:
        /// a wrapper for lyxrc.preview
        static LyXRC_PreviewStatus status();
Index: graphics/PreviewLoader.h
===================================================================
--- graphics/PreviewLoader.h    (revision 20587)
+++ graphics/PreviewLoader.h    (working copy)
@@ -18,7 +18,7 @@
 #ifndef PREVIEWLOADER_H
 #define PREVIEWLOADER_H
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/scoped_ptr.hpp>
 #include <boost/signal.hpp>
@@ -31,7 +31,7 @@ class PreviewImage; -class PreviewLoader : boost::noncopyable {
+class PreviewLoader : NonCopyable {
 public:
        /** We need buffer because we require the preamble to the
         *  LaTeX file.
Index: graphics/GraphicsCache.h
===================================================================
--- graphics/GraphicsCache.h    (revision 20587)
+++ graphics/GraphicsCache.h    (working copy)
@@ -20,7 +20,7 @@
 #ifndef GRAPHICSCACHE_H
 #define GRAPHICSCACHE_H
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/scoped_ptr.hpp>
 #include <boost/shared_ptr.hpp>
@@ -36,7 +36,7 @@ class CacheItem; -class Cache : boost::noncopyable {
+class Cache : NonCopyable {
 public:
/// This is a singleton class. Get the instance.
Index: graphics/GraphicsConverter.h
===================================================================
--- graphics/GraphicsConverter.h        (revision 20587)
+++ graphics/GraphicsConverter.h        (working copy)
@@ -19,7 +19,7 @@
#include <boost/scoped_ptr.hpp>
 #include <boost/signal.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
namespace lyx { @@ -27,7 +27,7 @@ namespace graphics { -class Converter : boost::noncopyable {
+class Converter : NonCopyable {
 public:
        /// Can the conversion be performed?
        static bool isReachable(std::string const & from_format_name,
Index: LyXAction.h
===================================================================
--- LyXAction.h (revision 20587)
+++ LyXAction.h (working copy)
@@ -15,7 +15,7 @@
#include "lfuns.h" -#include <boost/utility.hpp>
+#include "support/utility.h"
#include <map>
 #include <string>
@@ -32,7 +32,7 @@
  * dynamically, for encapsulating a real action and an
  * argument. They are used for things like the menus.
  */
-class LyXAction : boost::noncopyable {
+class LyXAction : NonCopyable {
 private:
        /// information for an action
        struct func_info {
Index: Session.h
===================================================================
--- Session.h   (revision 20587)
+++ Session.h   (working copy)
@@ -16,7 +16,7 @@
 #include "support/FileName.h"
 #include "support/types.h"
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/tuple/tuple.hpp>
#include <string>
@@ -38,7 +38,7 @@
/** base class for all sections in the session file
 */
-class SessionSection : boost::noncopyable {
+class SessionSection : NonCopyable {
public:
        ///
@@ -372,7 +372,7 @@
 };
-class Session : boost::noncopyable {
+class Session : NonCopyable {
public:
        /** Read the session file.
Index: TextClassList.h
===================================================================
--- TextClassList.h     (revision 20587)
+++ TextClassList.h     (working copy)
@@ -16,7 +16,7 @@
#include "support/types.h" -#include <boost/utility.hpp>
+#include "support/utility.h"
#include <string>
 #include <vector>
@@ -30,7 +30,7 @@
 extern bool LyXSetStyle();
///
-class TextClassList : boost::noncopyable {
+class TextClassList : NonCopyable {
 public:
        ///
        typedef std::vector<TextClass> ClassList;
Index: frontends/WorkArea.cpp
===================================================================
--- frontends/WorkArea.cpp      (revision 20587)
+++ frontends/WorkArea.cpp      (working copy)
@@ -38,7 +38,7 @@
 #include "support/ForkedcallsController.h"
 #include "support/FileName.h"
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/bind.hpp>
 #include <boost/current_function.hpp>
Index: frontends/LyXView.h
===================================================================
--- frontends/LyXView.h (revision 20587)
+++ frontends/LyXView.h (working copy)
@@ -18,7 +18,7 @@
#include <boost/signal.hpp>
 #include <boost/signals/trackable.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
#include <vector> @@ -54,7 +54,7 @@
  * Additionally we would like to support multiple views
  * in a single LyXView.
  */
-class LyXView : public boost::signals::trackable, boost::noncopyable {
+class LyXView : public boost::signals::trackable, NonCopyable {
 public:
        ///
        LyXView(int id);
Index: frontends/Dialogs.h
===================================================================
--- frontends/Dialogs.h (revision 20587)
+++ frontends/Dialogs.h (working copy)
@@ -14,7 +14,7 @@
 #define DIALOGS_H
#include <boost/signal.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
#include <map> @@ -29,7 +29,7 @@ /** Container of all dialogs.
  */
-class Dialogs : boost::noncopyable {
+class Dialogs : NonCopyable {
 public:
        ///
        Dialogs(LyXView &);
Index: frontends/qt4/pch.h
===================================================================
--- frontends/qt4/pch.h (revision 20587)
+++ frontends/qt4/pch.h (working copy)
@@ -10,7 +10,7 @@
 #include <boost/signals/trackable.hpp>
 #include <boost/signal.hpp>
 #include <boost/tuple/tuple.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
#include <algorithm>
 #include <cmath>
Index: support/RandomAccessList.h
===================================================================
--- support/RandomAccessList.h  (revision 20587)
+++ support/RandomAccessList.h  (working copy)
@@ -15,7 +15,7 @@
//#include "debug.h" -#include <boost/utility.hpp>
+#include "support/utility.h"
#include <vector>
 #include <list>
Index: support/FileMonitor.h
===================================================================
--- support/FileMonitor.h       (revision 20587)
+++ support/FileMonitor.h       (working copy)
@@ -15,7 +15,7 @@
 #ifndef FILEMONITOR_H
 #define FILEMONITOR_H
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/scoped_ptr.hpp>
 #include <boost/signal.hpp>
@@ -24,7 +24,7 @@ class FileName; -class FileMonitor : boost::noncopyable {
+class FileMonitor : NonCopyable {
 public:
        /** Once monitoring begins, the file will be monitored every
         *  interval ms.
Index: support/pch.h
===================================================================
--- support/pch.h       (revision 20587)
+++ support/pch.h       (working copy)
@@ -19,7 +19,7 @@
 #endif
#include <boost/tokenizer.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
#include <fcntl.h>
 #ifdef HAVE_SYS_STAT_H
Index: support/docstring.h
===================================================================
--- support/docstring.h (revision 20587)
+++ support/docstring.h (working copy)
@@ -10,8 +10,8 @@
  * Full author contact details are available in file CREDITS.
  */
-#ifndef LYX_DOCSTRING_H
-#define LYX_DOCSTRING_H
+#ifndef DOCSTRING_H
+#define DOCSTRING_H
#include "support/types.h" @@ -66,34 +66,34 @@
 docstring const normalize_c(docstring const & s);
/// Compare a docstring with a C string of ASCII characters
-bool operator==(lyx::docstring const &, char const *);
+bool operator==(docstring const &, char const *);
/// Compare a C string of ASCII characters with a docstring
-inline bool operator==(char const * l, lyx::docstring const & r) { return r == 
l; }
+inline bool operator==(char const * l, docstring const & r) { return r == l; }
/// Compare a docstring with a C string of ASCII characters
-inline bool operator!=(lyx::docstring const & l, char const * r) { return !(l 
== r); }
+inline bool operator!=(docstring const & l, char const * r) { return !(l == 
r); }
/// Compare a C string of ASCII characters with a docstring
-inline bool operator!=(char const * l, lyx::docstring const & r) { return !(r 
== l); }
+inline bool operator!=(char const * l, docstring const & r) { return !(r == 
l); }
/// Concatenate a docstring and a C string of ASCII characters
-lyx::docstring operator+(lyx::docstring const &, char const *);
+docstring operator+(docstring const &, char const *);
/// Concatenate a C string of ASCII characters and a docstring
-lyx::docstring operator+(char const *, lyx::docstring const &);
+docstring operator+(char const *, docstring const &);
/// Concatenate a docstring and a single ASCII character
-lyx::docstring operator+(lyx::docstring const & l, char r);
+docstring operator+(docstring const & l, char r);
/// Concatenate a single ASCII character and a docstring
-lyx::docstring operator+(char l, lyx::docstring const & r);
+docstring operator+(char l, docstring const & r);
/// Append a C string of ASCII characters to a docstring
-lyx::docstring & operator+=(lyx::docstring &, char const *);
+docstring & operator+=(docstring &, char const *);
/// Append a single ASCII character to a docstring
-lyx::docstring & operator+=(lyx::docstring & l, char r);
+docstring & operator+=(docstring & l, char r);
} // namespace lyx Index: support/Path.h
===================================================================
--- support/Path.h      (revision 20587)
+++ support/Path.h      (working copy)
@@ -14,7 +14,7 @@
#include "support/FileName.h" -#include <boost/utility.hpp>
+#include "support/utility.h"
#include <string> @@ -34,7 +34,7 @@
  *
  * At the end of p's scope the cwd is reset to its previous value.
  */
-class Path : boost::noncopyable {
+class Path : NonCopyable {
 public:
        /// change to the given directory
        explicit Path(FileName const & path);
Index: support/utility.h
===================================================================
--- support/utility.h   (revision 0)
+++ support/utility.h   (revision 0)
@@ -0,0 +1,48 @@
+// -*- C++ -*-
+/**
+ * \file utility.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * Provide a set of typedefs for commonly used things like sizes and
+ * indices wile trying to stay compatible with types used
+ * by the standard containers.
+ *
+ * \author Andr� P�nitz
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef UTILITY_H
+#define UTILITY_H
+
+// This is mainly a replacement for stuff that's too expensive in boost.
+
+namespace lyx {
+
+class NonCopyable
+{
+public:
+       NonCopyable() {}
+private:
+       // intentionally unimplemented
+       NonCopyable(NonCopyable const &);
+       void operator=(NonCopyable const &);
+};
+
+
+template <typename T>
+class ScopedPtr : public NonCopyable
+{
+public:
+       ScopedPtr() : ptr_(0) {}
+       explicit ScopedPtr(T * ptr) : ptr_(ptr) {}
+       ~ScopedPtr() { delete ptr_; }
+       T * get() const { return ptr_; }
+private:
+       T * ptr_;
+};
+
+} // namespace lyx
+
+#endif // UTILITY_H
Index: LaTeX.h
===================================================================
--- LaTeX.h     (revision 20587)
+++ LaTeX.h     (working copy)
@@ -19,7 +19,7 @@
 #include "support/docstring.h"
 #include "support/FileName.h"
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/signal.hpp>
#include <vector>
@@ -93,7 +93,7 @@
  * This is required by the LaTeX compiler, and we also make use of it by
  * various support::makeAbsPath() calls.
  */
-class LaTeX : boost::noncopyable {
+class LaTeX : NonCopyable {
 public:
        /** Return values from scanLogFile() and run() (to come)
Index: pch.h
===================================================================
--- pch.h       (revision 20587)
+++ pch.h       (working copy)
@@ -18,7 +18,7 @@
 #include <boost/signals/trackable.hpp>
 #include <boost/tokenizer.hpp>
 #include <boost/tuple/tuple.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/version.hpp>
#include <algorithm>
Index: ConverterCache.h
===================================================================
--- ConverterCache.h    (revision 20587)
+++ ConverterCache.h    (working copy)
@@ -21,7 +21,7 @@
 #ifndef CONVERTERCACHE_H
 #define CONVERTERCACHE_H
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/scoped_ptr.hpp>
#include <string>
@@ -49,7 +49,7 @@
  *
  * There is no cache maintenance yet (max size, max age etc.)
  */
-class ConverterCache : boost::noncopyable {
+class ConverterCache : NonCopyable {
 public:
/// This is a singleton class. Get the instance.
Index: BufferView.h
===================================================================
--- BufferView.h        (revision 20587)
+++ BufferView.h        (working copy)
@@ -24,7 +24,7 @@
 #include "support/types.h"
#include <boost/tuple/tuple.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
 #include <boost/signal.hpp>
#include <utility>
@@ -85,7 +85,7 @@
  * \sa Buffer
  * \sa CoordCache
  */
-class BufferView : boost::noncopyable {
+class BufferView : NonCopyable {
 public:
        ///
        BufferView(Buffer & buffer);
Index: LyX.h
===================================================================
--- LyX.h       (revision 20587)
+++ LyX.h       (working copy)
@@ -15,7 +15,7 @@
 #define LYX_H
#include <boost/scoped_ptr.hpp>
-#include <boost/utility.hpp>
+#include "support/utility.h"
#include <string> @@ -47,7 +47,7 @@
 }
/// initial startup
-class LyX : boost::noncopyable {
+class LyX : NonCopyable {
 public:
LyX();
Index: ModuleList.h
===================================================================
--- ModuleList.h        (revision 20587)
+++ ModuleList.h        (working copy)
@@ -15,7 +15,7 @@
 #include <vector>
 #include "support/FileName.h"
-#include <boost/utility.hpp>
+#include "support/utility.h"
#include <map> @@ -45,7 +45,7 @@
         *  The ModuleList represents the various LyXModule's that are 
available at
         *  present.
         */
-       class ModuleList : boost::noncopyable {
+       class ModuleList : NonCopyable {
                public:
                        /// reads the modules from a file generated by 
configure.py
                        bool load();


--
==================================================================
Richard G Heck, Jr
Professor of Philosophy
Brown University
http://frege.brown.edu/heck/
==================================================================
Get my public key from http://sks.keyserver.penguin.de
Hash: 0x1DE91F1E66FFBDEC
Learn how to sign your email using Thunderbird and GnuPG at:
http://dudu.dyn.2-h.org/nist/gpg-enigmail-howto

Reply via email to