From 74d76d223b8c1b790c84b3e69776d18c29cffc4d Mon Sep 17 00:00:00 2001
From: Brad Barber <bradb@shore.net>
Date: Sat, 23 Jan 2010 12:32:14 -0500
Subject: [PATCH] Reviewed all copy constructors and copy assignments.  Updated
 comments.    Defined Qhull copy constructor and copy assignment [G.
 Rivet-Sabourin]    Disabled UsingQhullLib default constructor, copy
 construct, and copy assign

- Add #error to Qhull.h if qh_QHpointer is not defined
- Define MSG_QHULL_ERROR in user.h
- Move MSG_FIXUP to 11000 and updated FIXUP QH11...
---
 cpp/Coordinates.h                    |  8 ++---
 cpp/PointCoordinates.h               |  8 ++---
 cpp/Qhull.cpp                        | 46 ++++++++++++++++++++++++----
 cpp/Qhull.h                          | 23 +++++++++-----
 cpp/QhullError.h                     |  8 ++---
 cpp/QhullFacet.cpp                   | 20 ++++++------
 cpp/QhullFacet.h                     |  7 +++--
 cpp/QhullFacetList.h                 |  8 ++---
 cpp/QhullFacetSet.h                  |  6 ++--
 cpp/QhullHyperplane.cpp              |  8 ++---
 cpp/QhullHyperplane.h                | 10 +++---
 cpp/QhullLinkedList.h                |  7 +++--
 cpp/QhullPoint.cpp                   |  8 ++---
 cpp/QhullPoint.h                     |  8 ++---
 cpp/QhullPointSet.h                  | 12 ++++----
 cpp/QhullPoints.h                    |  7 +++--
 cpp/QhullRidge.h                     |  7 +++--
 cpp/QhullSet.cpp                     |  6 ++--
 cpp/QhullSet.h                       |  6 ++--
 cpp/QhullVertex.cpp                  |  6 ++--
 cpp/QhullVertex.h                    |  7 +++--
 cpp/UsingLibQhull.cpp                |  8 ++---
 cpp/UsingLibQhull.h                  | 10 ++++--
 cpp/qhulltest/Qhull_test.cpp         | 32 +++++++++++++++++--
 cpp/qhulltest/UsingLibQhull_test.cpp |  5 +--
 cpp/road/RoadError.h                 |  6 ++--
 src/Changes.txt                      | 34 +++++++++++++++-----
 src/io.c                             |  6 ++--
 src/user.h                           |  5 +--
 29 files changed, 217 insertions(+), 115 deletions(-)

diff --git a/cpp/Coordinates.h b/cpp/Coordinates.h
index a062c42..774fd48 100644
--- a/cpp/Coordinates.h
+++ b/cpp/Coordinates.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/Coordinates.h#35 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/Coordinates.h#36 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -180,7 +180,7 @@ public:
         bool            operator>(const Coordinates::const_iterator &other) const { return *this>reinterpret_cast<const iterator &>(other); }
         bool            operator>=(const Coordinates::const_iterator &other) const { return *this>=reinterpret_cast<const iterator &>(other); }
 
-        iterator        operator++() { return iterator(++i); } //FIXUP QH10012 Should return reference, but get reference to temporary
+        iterator        operator++() { return iterator(++i); } //FIXUP QH11012 Should return reference, but get reference to temporary
         iterator        operator++(int) { return iterator(i++); }
         iterator        operator--() { return iterator(--i); }
         iterator        operator--(int) { return iterator(i--); }
@@ -221,7 +221,7 @@ public:
         bool            operator>(const const_iterator &other) const { return i>other.i; }
         bool            operator>=(const const_iterator &other) const { return i>=other.i; }
 
-        const_iterator  operator++() { return const_iterator(++i); } //FIXUP QH10014 -- too much copying
+        const_iterator  operator++() { return const_iterator(++i); } //FIXUP QH11014 -- too much copying
         const_iterator  operator++(int) { return const_iterator(i++); }
         const_iterator  operator--() { return const_iterator(--i); }
         const_iterator  operator--(int) { return const_iterator(i--); }
diff --git a/cpp/PointCoordinates.h b/cpp/PointCoordinates.h
index 4ded776..037a1ad 100644
--- a/cpp/PointCoordinates.h
+++ b/cpp/PointCoordinates.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/PointCoordinates.h#16 $$Change: 1167 $
-** $DateTime: 2010/01/08 19:03:17 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/PointCoordinates.h#17 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -88,7 +88,7 @@ public:
     PointCoordinates    operator+(const PointCoordinates &other) const;
 
 #//Modify
-    //FIXUP QH10001: Add clear() and other modify operators from Coordinates.h.  Include QhullPoint::operator=()
+    //FIXUP QH11001: Add clear() and other modify operators from Coordinates.h.  Include QhullPoint::operator=()
     void                append(int count, const coordT *c);  //! Dimension previously defined
     void                append(const coordT &c) { append(1, &c); } //! Dimension previously defined
     void                append(const QhullPoint &p);
@@ -138,7 +138,7 @@ class PointCoordinatesIterator
     return false;  }
 };//CoordinatesIterator
 
-// FIXUP QH10002:  Add MutablePointCoordinatesIterator after adding modify operators
+// FIXUP QH11002:  Add MutablePointCoordinatesIterator after adding modify operators
 \
 }//namespace orgQhull
 
diff --git a/cpp/Qhull.cpp b/cpp/Qhull.cpp
index 38c324c..3931829 100644
--- a/cpp/Qhull.cpp
+++ b/cpp/Qhull.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/Qhull.cpp#44 $$Change: 1180 $
-** $DateTime: 2010/01/12 21:45:49 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/Qhull.cpp#46 $$Change: 1194 $
+** $DateTime: 2010/01/23 12:14:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -96,6 +96,40 @@ Qhull(const char *rboxCommand, int pointDimension, int pointCount, const realT *
     runQhull(rboxCommand, pointDimension, pointCount, points, qhullCommand);
 }//Qhull points
 
+Qhull::
+Qhull(const Qhull &other)
+: qhull_qh(0)
+, qhull_run_id(UsingLibQhull::NOqhRunId)
+, origin_point()
+, qhull_status(qh_ERRnone)
+, qhull_dimension(0)
+, run_called(false)
+, qh_active(false)
+, qhull_message(other.qhull_message)
+, error_stream(other.error_stream)
+, output_stream(other.output_stream)
+, feasiblePoint(other.feasiblePoint)
+, useOutputStream(other.useOutputStream)
+{
+    if(other.initialized()){
+        throw QhullError(10069, "Qhull error: can not use Qhull copy constructor if initialized() is true");
+    }
+    initializeQhull();
+}//copy constructor
+
+Qhull & Qhull::
+operator=(const Qhull &other)
+{
+    if(other.initialized() || initialized()){
+        throw QhullError(10070, "Qhull error: can not use Qhull copy assignment if initialized() is true");
+    }
+    qhull_message= other.qhull_message;
+    error_stream= other.error_stream;
+    output_stream= other.output_stream;
+    feasiblePoint= other.feasiblePoint;
+    useOutputStream= other.useOutputStream;
+    return *this;
+}//copy constructor
 
 void Qhull::
 initializeQhull()
@@ -134,7 +168,7 @@ Qhull::
             qhull_run_id= UsingLibQhull::NOqhRunId;
             // Except for cerr, does not throw errors
             if(hasQhullMessage()){
-                cerr<< "\nQhull output at end\n"; //FIXUP QH10005: where should error and log messages go on ~Qhull?
+                cerr<< "\nQhull output at end\n"; //FIXUP QH11005: where should error and log messages go on ~Qhull?
                 cerr<<qhullMessage();
                 clearQhullMessage();
             }
@@ -172,7 +206,7 @@ bool Qhull::
 hasQhullMessage() const
 {
     return (!qhull_message.empty() || qhull_status!=qh_ERRnone);
-    //FIXUP QH10006 -- inconsistent usage with Rbox.  hasRboxMessage just tests rbox_status.  No appendRboxMessage()
+    //FIXUP QH11006 -- inconsistent usage with Rbox.  hasRboxMessage just tests rbox_status.  No appendRboxMessage()
 }
 
 //! qhullMessage does not throw errors (~Qhull)
@@ -417,7 +451,7 @@ maybeThrowQhullMessage(int exitCode)
     if(qhull_status!=qh_ERRnone){
         QhullError e(qhull_status, qhull_message);
         clearQhullMessage();
-        throw e; // FIXUP QH10007: copy constructor is expensive if logging
+        throw e; // FIXUP QH11007: copy constructor is expensive if logging
     }
 }//maybeThrowQhullMessage
 
@@ -482,7 +516,7 @@ void qh_fprintf(FILE *fp, int msgcode, const char *fmt, ... ) {
         va_end(args);
         return;
     }
-    // FIXUP QH10008: how do users trap messages and handle input?  A callback?
+    // FIXUP QH11008: how do users trap messages and handle input?  A callback?
     char newMessage[MSG_MAXLEN];
     vsnprintf(newMessage, sizeof(newMessage), fmt, args);
     out->appendQhullMessage(newMessage);
diff --git a/cpp/Qhull.h b/cpp/Qhull.h
index 850760e..b3b9768 100644
--- a/cpp/Qhull.h
+++ b/cpp/Qhull.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/Qhull.h#38 $$Change: 1167 $
-** $DateTime: 2010/01/08 19:03:17 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/Qhull.h#39 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -23,6 +23,13 @@
 #include <sstream>
 #include <iostream>
 
+#if qh_QHpointer != 1
+#error  qh_QHpointer is not set.  Please set it in user.h or
+#error  compile Qhull with -Dqh_QHpointer.  The C++ classes
+#error  require dynamic allocation for Qhulls global data
+#error  structure qhT (QhullQh).
+#endif
+
 namespace orgQhull {
 
 /***
@@ -47,7 +54,7 @@ private:
     int                 qhull_status;   //! qh_ERRnone if valid
     int                 qhull_dimension; //! Dimension of result (qh.hull_dim or one less for Delaunay/Voronoi)
     bool                run_called;     //! True at start of runQhull.  Errors if call again.
-    bool                qh_active;      //! True if qh_qh is qhull_qh
+    bool                qh_active;      //! True if global pointer qh_qh equals qhull_qh
     std::string         qhull_message;
     std::ostream       *error_stream;   //! overrides errorMessage, use appendQhullMessage()
     std::ostream       *output_stream;  //! send output to stream
@@ -59,21 +66,23 @@ private:
 public:
     Coordinates         feasiblePoint;  //! feasible point for half-space intersection
     bool                useOutputStream; //! Set if using outputStream
-    // FIXUP QH10003 feasiblePoint useOutputStream as field or getter?
+    // FIXUP QH11003 feasiblePoint useOutputStream as field or getter?
 
 #//constructor, assignment, destructor, invariant
                         Qhull();      //! Qhull::runQhull() must be called next
                         Qhull(const RboxPoints &points, const char *qhullCommand);
                         Qhull(const char *rboxCommand, int pointDimension, int pointCount, const realT *points, const char *qhullCommand);
+                        // Throws error if other.initialized().  Needed for return by value and parameter passing
+                        Qhull(const Qhull &other);
+                        // Throws error if initialized() or other.initialized().  Needed for vector<Qhull>
+    Qhull              &operator=(const Qhull &other);
                        ~Qhull() throw();
 private:
     void                initializeQhull();
-                        Qhull(const Qhull&); //disabled
-    Qhull              &operator=(const Qhull&); //disabled
 
 public:
 #//virtual methods
-    //FIXUP QH10004 -- qh_memfree, etc. as virtual?
+    //FIXUP QH11004 -- qh_memfree, etc. as virtual?
 
 #//Messaging
     void                appendQhullMessage(const std::string &s);
diff --git a/cpp/QhullError.h b/cpp/QhullError.h
index f90f44c..2f3e226 100644
--- a/cpp/QhullError.h
+++ b/cpp/QhullError.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullError.h#33 $$Change: 1139 $
-** $DateTime: 2010/01/03 11:20:29 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullError.h#34 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -26,8 +26,8 @@ class QhullError : public RoadError {
 public:
 #//Constants
     enum {
-        QHULLfirstError= 10000, //Larger than msgcode in Qhull's user.h
-        QHULLlastError= 10067,
+        QHULLfirstError= 10000, //MSG_QHULL_ERROR in Qhull's user.h
+        QHULLlastError= 10070,
         NOthrow= 1 //! For flag to UsingLibQhull()
     };
 
diff --git a/cpp/QhullFacet.cpp b/cpp/QhullFacet.cpp
index 43715af..eb306b1 100644
--- a/cpp/QhullFacet.cpp
+++ b/cpp/QhullFacet.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullFacet.cpp#37 $$Change: 1184 $
-** $DateTime: 2010/01/13 22:44:48 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullFacet.cpp#38 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -131,7 +131,7 @@ tricoplanarOwner() const
         }
         return qh_facet->f.triowner;
     }
-    return 0; // FIXUP QH10009 Should false be the NULL facet or empty facet
+    return 0; // FIXUP QH11009 Should false be the NULL facet or empty facet
 }//tricoplanarOwner
 
 QhullPoint QhullFacet::
@@ -258,11 +258,11 @@ operator<<(ostream &os, const QhullFacet::PrintCenter &pr)
                 f->center= qh_facetcenter(f->vertices);
             }
             for(int k=0; k<numCoords; k++){
-                os << f->center[k] << " "; // FIXUP QH10010 qh_REAL_1
+                os << f->center[k] << " "; // FIXUP QH11010 qh_REAL_1
             }
         }else{
             for(int k=0; k<numCoords; k++){
-                os << qh_INFINITE << " "; // FIXUP QH10010 qh_REAL_1
+                os << qh_INFINITE << " "; // FIXUP QH11010 qh_REAL_1
             }
         }
     }else{ // qh CENTERtype==qh_AScentrum
@@ -274,7 +274,7 @@ operator<<(ostream &os, const QhullFacet::PrintCenter &pr)
             f->center= qh_getcentrum(f);
         }
         for(int k=0; k<numCoords; k++){
-            os << f->center[k] << " "; // FIXUP QH10010 qh_REAL_1
+            os << f->center[k] << " "; // FIXUP QH11010 qh_REAL_1
         }
     }
     if(pr.print_format==qh_PRINTgeom && numCoords==2){
@@ -364,7 +364,7 @@ operator<<(ostream &os, const QhullFacet::PrintHeader &pr)
     os << "- f" << facet.id() << endl;
     os << facet.printFlags("    - flags:");
     if(f->isarea){
-        os << "    - area: " << f->f.area << endl; //FIXUP QH10010 2.2g
+        os << "    - area: " << f->f.area << endl; //FIXUP QH11010 2.2g
     }else if(qh NEWfacets && f->visible && f->f.replace){
         os << "    - replacement: f" << f->f.replace->id << endl;
     }else if(f->newfacet){
@@ -381,13 +381,13 @@ operator<<(ostream &os, const QhullFacet::PrintHeader &pr)
     if(f->nummerge){
         os << "    - merges: " << f->nummerge << endl;
     }
-    os << facet.hyperplane().print("    - normal: ", "\n    - offset: "); // FIXUP QH10010 %10.7g
+    os << facet.hyperplane().print("    - normal: ", "\n    - offset: "); // FIXUP QH11010 %10.7g
     if(qh CENTERtype==qh_ASvoronoi || f->center){
         os << facet.printCenter(pr.run_id, qh_PRINTfacets, "    - center: ");
     }
 #if qh_MAXoutside
     if(f->maxoutside > qh DISTround){
-        os << "    - maxoutside: " << f->maxoutside << endl; //FIXUP QH10010 %10.7g
+        os << "    - maxoutside: " << f->maxoutside << endl; //FIXUP QH11010 %10.7g
     }
 #endif
     QhullPointSet ps= facet.outsidePoints();
@@ -406,7 +406,7 @@ operator<<(ostream &os, const QhullFacet::PrintHeader &pr)
             os << furthest.print(pr.run_id, "  Furthest");
         }
 #if !qh_COMPUTEfurthest
-        os << "    - furthest distance= " << f->furthestdist << endl; //FIXUP QH10010%2.2g
+        os << "    - furthest distance= " << f->furthestdist << endl; //FIXUP QH11010 %2.2g
 #endif
     }
     QhullPointSet cs= facet.coplanarPoints();
diff --git a/cpp/QhullFacet.h b/cpp/QhullFacet.h
index 72ced30..4d8bbe7 100644
--- a/cpp/QhullFacet.h
+++ b/cpp/QhullFacet.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullFacet.h#37 $$Change: 1167 $
-** $DateTime: 2010/01/08 19:03:17 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullFacet.h#38 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -50,8 +50,9 @@ public:
 
 #//Constructors
                         QhullFacet() : qh_facet(&s_empty_facet) {}
-                        //! Shallow copy
+                        // Creates an alias.  Does not copy QhullFacet.  Needed for return by value and parameter passing
                         QhullFacet(const QhullFacet &o) : qh_facet(o.qh_facet ? o.qh_facet : &s_empty_facet) {}
+                        // Creates an alias.  Does not copy QhullFacet.  Needed for vector<QhullFacet>
     QhullFacet         &operator=(const QhullFacet &o) { qh_facet= o.qh_facet ? o.qh_facet : &s_empty_facet; return *this; }
                        ~QhullFacet() {}
 
diff --git a/cpp/QhullFacetList.h b/cpp/QhullFacetList.h
index 2f14a84..d7dfb88 100644
--- a/cpp/QhullFacetList.h
+++ b/cpp/QhullFacetList.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullFacetList.h#25 $$Change: 1172 $
-** $DateTime: 2010/01/09 21:42:16 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullFacetList.h#26 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -35,12 +35,12 @@ private:
 #//Constructors
 public:
                         QhullFacetList(QhullFacet b, QhullFacet e) : QhullLinkedList<QhullFacet>(b, e), select_all(false) {}
-                        //Copy constructor copies pointer but not contents.  Needed for return by value.
+                        //Copy constructor copies pointer but not contents.  Needed for return by value and parameter passing.
                         QhullFacetList(const QhullFacetList &o) : QhullLinkedList<QhullFacet>(*o.begin(), *o.end()), select_all(o.select_all) {}
                        ~QhullFacetList() {}
 
 private:
-                        //!Disable default constructor and copy assignment.  See QhullSetBase
+                        //!Disable default constructor and copy assignment.  See QhullLinkedList
                         QhullFacetList();
     QhullFacetList     &operator=(const QhullFacetList &);
 public:
diff --git a/cpp/QhullFacetSet.h b/cpp/QhullFacetSet.h
index c250ad7..fc66ec4 100644
--- a/cpp/QhullFacetSet.h
+++ b/cpp/QhullFacetSet.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullFacetSet.h#23 $$Change: 1172 $
-** $DateTime: 2010/01/09 21:42:16 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullFacetSet.h#24 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -34,7 +34,7 @@ public:
 #//Constructor
                         //Conversion from setT* is not type-safe.  Implicit conversion for void* to T
    explicit             QhullFacetSet(setT *s) : QhullSet<QhullFacet>(s), select_all(false) {}
-                        //Copy constructor copies pointer but not contents.  Needed for return by value.
+                        //Copy constructor copies pointer but not contents.  Needed for return by value and parameter passing.
                         QhullFacetSet(const QhullFacetSet &o) : QhullSet<QhullFacet>(o), select_all(o.select_all) {}
 
 private:
diff --git a/cpp/QhullHyperplane.cpp b/cpp/QhullHyperplane.cpp
index f3af99c..946dbad 100644
--- a/cpp/QhullHyperplane.cpp
+++ b/cpp/QhullHyperplane.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullHyperplane.cpp#11 $$Change: 1176 $
-** $DateTime: 2010/01/11 19:40:05 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullHyperplane.cpp#12 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -150,9 +150,9 @@ operator<<(ostream &os, const QhullHyperplane::PrintHyperplane &pr)
     for(int k=p.dimension(); k--; ){
         realT r= *c++;
         if(pr.hyperplane_message){
-            os << " " << r; // FIXUP QH10010 %8.4g
+            os << " " << r; // FIXUP QH11010 %8.4g
         }else{
-            os << " " << r; // FIXUP QH10010 qh_REAL_1
+            os << " " << r; // FIXUP QH11010 qh_REAL_1
         }
     }
     if(pr.hyperplane_offset_message){
diff --git a/cpp/QhullHyperplane.h b/cpp/QhullHyperplane.h
index ae3835f..29c9385 100644
--- a/cpp/QhullHyperplane.h
+++ b/cpp/QhullHyperplane.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullHyperplane.h#13 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullHyperplane.h#14 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -46,9 +46,9 @@ public:
 #//Construct
                         QhullHyperplane() : hyperplane_coordinates(0), hyperplane_dimension(0), hyperplane_offset(0.0) {};
                         QhullHyperplane(int dimension, coordT *c, coordT offset) : hyperplane_coordinates(c), hyperplane_dimension(dimension), hyperplane_offset(offset) {}
-                        // Creates an alias.  Does not copy the point.  Needed for parameter passing
+                        // Creates an alias.  Does not copy the hyperplane's coordinates.  Needed for return by value and parameter passing.
                         QhullHyperplane(const QhullHyperplane &other)  : hyperplane_coordinates(other.hyperplane_coordinates), hyperplane_dimension(other.hyperplane_dimension), hyperplane_offset(other.hyperplane_offset) {}
-                        // Creates an alias.  Does not copy the point.  Needed for vector<QhullHyperplane>
+                        // Creates an alias.  Does not copy the hyperplane's coordinates.  Needed for vector<QhullHyperplane>
     QhullHyperplane    &operator=(const QhullHyperplane &other) { hyperplane_coordinates= other.hyperplane_coordinates; hyperplane_dimension= other.hyperplane_dimension; hyperplane_offset= other.hyperplane_offset; return *this; }
                        ~QhullHyperplane() {}
 
@@ -116,7 +116,7 @@ QHULL_DECLARE_SEQUENTIAL_ITERATOR(QhullHyperplane, coordT)
 #//Global functions
 
 std::ostream &operator<<(std::ostream &os, const orgQhull::QhullHyperplane::PrintHyperplane &pr);
-std::ostream &operator<<(std::ostream &os, const orgQhull::QhullHyperplane &p); //FIXUP QH10015 -- multiple instances if define here
+std::ostream &operator<<(std::ostream &os, const orgQhull::QhullHyperplane &p); //FIXUP QH11015 -- multiple instances if define here
 
 #endif // QHHYPERPLANE_H
 
diff --git a/cpp/QhullLinkedList.h b/cpp/QhullLinkedList.h
index 4c03a3c..4de29b0 100644
--- a/cpp/QhullLinkedList.h
+++ b/cpp/QhullLinkedList.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullLinkedList.h#33 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullLinkedList.h#34 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -59,6 +59,7 @@ public:
 
 #//Constructors
                         QhullLinkedList<T>(T b, T e) : begin_node(b), end_node(e) {}
+                        //Copy constructor copies pointer but not contents.  Needed for return by value and parameter passing.
                         QhullLinkedList<T>(const QhullLinkedList<T> &o) : begin_node(o.begin_node), end_node(o.end_node) {}
                        ~QhullLinkedList<T>() {}
 
@@ -177,7 +178,7 @@ public:
 };//QhullLinkedList
 
 template <typename T>
-class QhullLinkedListIterator // FiXUP QH10016 define QhullMutableLinkedListIterator
+class QhullLinkedListIterator // FIXUP QH11016 define QhullMutableLinkedListIterator
 {
     typedef typename QhullLinkedList<T>::const_iterator const_iterator;
     const QhullLinkedList<T> *c;
diff --git a/cpp/QhullPoint.cpp b/cpp/QhullPoint.cpp
index b61f8a4..d8ef470 100644
--- a/cpp/QhullPoint.cpp
+++ b/cpp/QhullPoint.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullPoint.cpp#29 $$Change: 1180 $
-** $DateTime: 2010/01/12 21:45:49 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullPoint.cpp#30 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -166,9 +166,9 @@ operator<<(ostream &os, const QhullPoint::PrintPoint &pr)
     for(int k=p.dimension(); k--; ){
         realT r= *c++;
         if(pr.point_message){
-            os << " " << r; // FIXUP QH10010 %8.4g
+            os << " " << r; // FIXUP QH11010 %8.4g
         }else{
-            os << " " << r; // FIXUP QH10010 qh_REAL_1
+            os << " " << r; // FIXUP QH11010 qh_REAL_1
         }
     }
     os << std::endl;
diff --git a/cpp/QhullPoint.h b/cpp/QhullPoint.h
index 785877a..097586c 100644
--- a/cpp/QhullPoint.h
+++ b/cpp/QhullPoint.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullPoint.h#34 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullPoint.h#35 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -52,7 +52,7 @@ public:
                         QhullPoint() : point_coordinates(0), point_dimension(0) {};
                         QhullPoint(int dimension, coordT *c) : point_coordinates(c), point_dimension(dimension) {}
     explicit            QhullPoint(Coordinates &c) : point_coordinates(c.data()), point_dimension(c.count()) {}
-                        // Creates an alias.  Does not copy the point.  Needed for parameter passing
+                        // Creates an alias.  Does not copy the point.  Needed for return by value and parameter passing.
                         QhullPoint(const QhullPoint &other)  : point_coordinates(other.point_coordinates), point_dimension(other.point_dimension) {}
                         // Creates an alias.  Does not copy the point.  Needed for vector<QhullPoint>
     QhullPoint         &operator=(const QhullPoint &other) { point_coordinates= other.point_coordinates; point_dimension= other.point_dimension; return *this; }
@@ -124,7 +124,7 @@ QHULL_DECLARE_SEQUENTIAL_ITERATOR(QhullPoint, coordT)
 #//Global functions
 
 std::ostream &operator<<(std::ostream &os, const orgQhull::QhullPoint::PrintPoint &pr);
-std::ostream &operator<<(std::ostream &os, const orgQhull::QhullPoint &p); // FIXUP QH10017 OK in c program but not inline { os << p.print(orgQhull::UsingLibQhull::NOqhRunId, ""); return os; }
+std::ostream &operator<<(std::ostream &os, const orgQhull::QhullPoint &p); // FIXUP QH11017 OK in c program but not inline { os << p.print(orgQhull::UsingLibQhull::NOqhRunId, ""); return os; }
 
 #endif // QHPOINT_H
 
diff --git a/cpp/QhullPointSet.h b/cpp/QhullPointSet.h
index bc44980..b954cf4 100644
--- a/cpp/QhullPointSet.h
+++ b/cpp/QhullPointSet.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullPointSet.h#20 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullPointSet.h#21 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -45,7 +45,7 @@ public:
     typedef QhullPoint  value_type;
     typedef ptrdiff_t   difference_type;
     typedef int         size_type;
-    //typedef const value_type *const_pointer;    // FIXUP QH10019: QhullPointSet does not define pointer or reference due to point_dimension
+    //typedef const value_type *const_pointer;    // FIXUP QH11019: QhullPointSet does not define pointer or reference due to point_dimension
     //typedef const value_type &const_reference;
     //typedef value_type *pointer;
     //typedef value_type &reference;
@@ -53,11 +53,11 @@ public:
 #//Construct
                         //Conversion from setT* is not type-safe.  Implicit conversion for void* to T
                         QhullPointSet(int dimension, setT *s) : QhullSet<coordT *>(s), point_dimension(dimension) {}
-                        //Copy constructor copies pointer but not contents.  Needed for return by value.
+                        //Copy constructor copies pointer but not contents.  Needed for return by value and parameter passing.
                         QhullPointSet(const QhullPointSet &o) : QhullSet<coordT *>(o), point_dimension(o.point_dimension) {}
                        ~QhullPointSet() {}
 
-//disabled since p= p2 is ambiguous (coord* vs coord)
+//Default constructor and copy assignment disabled since p= p2 is ambiguous (coord* vs coord)
 private:
                         QhullPointSet();
     QhullPointSet      &operator=(const QhullPointSet &);
@@ -223,7 +223,7 @@ public:
 };//QhullPointSet
 
 //derived from qiterator.h
-class QhullPointSetIterator { // FiXUP QH10020 define QhullMutablePointSetIterator
+class QhullPointSetIterator { // FIXUP QH11020 define QhullMutablePointSetIterator
     typedef QhullPointSet::const_iterator const_iterator;
     const QhullPointSet *c;
     const_iterator      i;
diff --git a/cpp/QhullPoints.h b/cpp/QhullPoints.h
index 2e913e6..68265b6 100644
--- a/cpp/QhullPoints.h
+++ b/cpp/QhullPoints.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2009-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullPoints.h#31 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullPoints.h#32 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -46,6 +46,7 @@ public:
                         QhullPoints() : point_first(0), point_end(0), point_dimension(0) {};
                         QhullPoints(int dimension) : point_first(0), point_end(0), point_dimension(dimension) { QHULL_ASSERT(dimension>=0); }
                         QhullPoints(int dimension, int coordinateCount, coordT *c) : point_first(c), point_end(c+coordinateCount), point_dimension(dimension) { QHULL_ASSERT(dimension>=0 && coordinateCount>=0 ); }
+                        //Copy constructor copies pointers but not contents.  Needed for return by value and parameter passing.
                         QhullPoints(const QhullPoints &other)  : point_first(other.point_first), point_end(other.point_end), point_dimension(other.point_dimension) {}
                        ~QhullPoints() {}
 
@@ -158,7 +159,7 @@ public:
         difference_type operator-(iterator other) const { QHULL_ASSERT(dimension()==other.dimension()); return (coordinates()-other.coordinates())/dimension(); }
     };//QhullPoints::iterator
 
-#//QhullPoints::const_iterator -- FIXUP QH10018 const_iterator same as iterator
+#//QhullPoints::const_iterator -- FIXUP QH11018 const_iterator same as iterator
     class const_iterator : public QhullPoint {
 
     public:
diff --git a/cpp/QhullRidge.h b/cpp/QhullRidge.h
index ce35d52..68f7ddf 100644
--- a/cpp/QhullRidge.h
+++ b/cpp/QhullRidge.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullRidge.h#24 $$Change: 1167 $
-** $DateTime: 2010/01/08 19:03:17 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullRidge.h#25 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -62,8 +62,9 @@ public:
 
 #//Constructors
                         QhullRidge() : qh_ridge(&s_empty_ridge) {}
-                        //! Shallow copy
+                        // Creates an alias.  Does not copy QhullRidge.  Needed for return by value and parameter passing
                         QhullRidge(const QhullRidge &o) : qh_ridge(o.qh_ridge) {}
+                        // Creates an alias.  Does not copy QhullRidge.  Needed for vector<QhullRidge>
     QhullRidge         &operator=(const QhullRidge &o) { qh_ridge= o.qh_ridge; return *this; }
                        ~QhullRidge() {}
 
diff --git a/cpp/QhullSet.cpp b/cpp/QhullSet.cpp
index 3c9ea41..ebe3f87 100644
--- a/cpp/QhullSet.cpp
+++ b/cpp/QhullSet.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullSet.cpp#20 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullSet.cpp#21 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -33,7 +33,7 @@ int QhullSetBase::count(const setT *set)
     if ((size= *sizep)) {
         size--;
         if (size > set->maxsize) {
-            // FIXUP QH10022 How to add additional output to a error? -- qh_setprint(qhmem.ferr, "set: ", set);
+            // FIXUP QH11022 How to add additional output to a error? -- qh_setprint(qhmem.ferr, "set: ", set);
             throw QhullError(10032, "QhullSet internal error: current set size %d is greater than maximum size %d\n",
                 size, set->maxsize);
         }
diff --git a/cpp/QhullSet.h b/cpp/QhullSet.h
index 4d1e16b..0a3ee5a 100644
--- a/cpp/QhullSet.h
+++ b/cpp/QhullSet.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullSet.h#38 $$Change: 1167 $
-** $DateTime: 2010/01/08 19:03:17 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullSet.h#39 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -56,7 +56,7 @@ public:
 
 
 #//Constructors
-                        //! Copy constructor copies the pointer but not the set.  Needed for return by value.
+                        //! Copy constructor copies the pointer but not the set.  Needed for return by value and parameter passing.
                         QhullSetBase(const QhullSetBase &o) : qh_set(o.qh_set) {}
     explicit            QhullSetBase(setT *s) : qh_set(s ? s : &s_empty_set) {}
                        ~QhullSetBase() {}
diff --git a/cpp/QhullVertex.cpp b/cpp/QhullVertex.cpp
index c788c79..dd483b6 100644
--- a/cpp/QhullVertex.cpp
+++ b/cpp/QhullVertex.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullVertex.cpp#25 $$Change: 1180 $
-** $DateTime: 2010/01/12 21:45:49 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullVertex.cpp#26 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -62,7 +62,7 @@ operator<<(ostream &os, const QhullVertex::PrintVertex &pr)
     os << "- p" << p.id(pr.run_id) << " (v" << v.id() << "): ";
     const realT *c= p.coordinates();
     for(int k= p.dimension(); k--; ){
-        os << " " << *c++; // FIXUP QH10010 %5.2g
+        os << " " << *c++; // FIXUP QH11010 %5.2g
     }
     if(v.getVertexT()->deleted){
         os << " deleted";
diff --git a/cpp/QhullVertex.h b/cpp/QhullVertex.h
index a41c577..1b50bf2 100644
--- a/cpp/QhullVertex.h
+++ b/cpp/QhullVertex.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/QhullVertex.h#26 $$Change: 1164 $
-** $DateTime: 2010/01/07 21:52:00 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/QhullVertex.h#27 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -54,8 +54,9 @@ public:
 
 #//Constructors
                         QhullVertex() : qh_vertex(&s_empty_vertex) {}
-                        //! Shallow copy
+                        // Creates an alias.  Does not copy QhullVertex.  Needed for return by value and parameter passing
                         QhullVertex(const QhullVertex &o) : qh_vertex(o.qh_vertex) {}
+                        // Creates an alias.  Does not copy QhullVertex.  Needed for vector<QhullVertex>
     QhullVertex        &operator=(const QhullVertex &o) { qh_vertex= o.qh_vertex; return *this; }
                        ~QhullVertex() {}
 
diff --git a/cpp/UsingLibQhull.cpp b/cpp/UsingLibQhull.cpp
index f8c5a47..5e4b151 100644
--- a/cpp/UsingLibQhull.cpp
+++ b/cpp/UsingLibQhull.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/UsingLibQhull.cpp#7 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/UsingLibQhull.cpp#9 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -45,7 +45,7 @@ int UsingLibQhull::
 s_points_dimension= 0;
 
 int UsingLibQhull::
-s_vertex_dimension= 0;  // FIXUP QH10023: s_vertex_dimension is required if dimension>15.  Cannot store in QhullVertex
+s_vertex_dimension= 0;  // FIXUP QH11023: s_vertex_dimension is required if dimension>15.  Cannot store in QhullVertex
 
 bool UsingLibQhull::
 s_has_points= false;
@@ -94,7 +94,7 @@ UsingLibQhull(Qhull *q)
     qhullqh->old_qhstat= 0;
     qhullqh->old_tempstack= 0;
 #else
-    #error FIXUP QH10024 static qh_qh not tested.  Delete the line to try.
+    #error FIXUP QH11024 static qh_qh not tested.  Delete the line to try.
     if(qhullqh!=&qh_qh){
         throw QhullError(10040, "Qhull internal error: Qhull.qhullQh() is not qh_qh (%x, static).  Overwrite?", 0,0,0.0, &qh_qh);
     }
diff --git a/cpp/UsingLibQhull.h b/cpp/UsingLibQhull.h
index c3c8c10..f971b69 100644
--- a/cpp/UsingLibQhull.h
+++ b/cpp/UsingLibQhull.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/UsingLibQhull.h#6 $$Change: 1164 $
-** $DateTime: 2010/01/07 21:52:00 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/UsingLibQhull.h#7 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -100,6 +100,12 @@ public:
                         UsingLibQhull(int qhRunId);
                        ~UsingLibQhull();
 
+private:                //! disable default constructor, copy constructor, and copy assignment
+                        UsingLibQhull();
+                        UsingLibQhull(const UsingLibQhull &);
+   UsingLibQhull       &operator=(const UsingLibQhull &);
+public:
+
 #//Methods
 #//Access
     bool                defined() const { return my_qhull!=0; }
diff --git a/cpp/qhulltest/Qhull_test.cpp b/cpp/qhulltest/Qhull_test.cpp
index de286c1..77cba85 100644
--- a/cpp/qhulltest/Qhull_test.cpp
+++ b/cpp/qhulltest/Qhull_test.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/qhulltest/Qhull_test.cpp#38 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/qhulltest/Qhull_test.cpp#40 $$Change: 1194 $
+** $DateTime: 2010/01/23 12:14:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -70,6 +70,10 @@ t_construct()
         }catch (const std::exception &e) {
             cout << "INFO   : Caught " << e.what();
         }
+        Qhull q2(q);  // Copy constructor and copy assignment OK if not q.initialized()
+        QCOMPARE(q2.dimension(),0);
+        q= q2;
+        QCOMPARE(q.dimension(),0);
     }
     {
         RboxPoints rbox("10000");
@@ -77,6 +81,28 @@ t_construct()
         QCOMPARE(q.dimension(),3);
         QVERIFY(q.volume() < 1.0);
         QVERIFY(q.volume() > 0.99);
+        try{
+            Qhull q2(q);
+            QFAIL("Copy constructor did not fail for initialized Qhull.");
+        }catch (const std::exception &e) {
+            cout << "INFO   : Caught " << e.what();
+        }
+        try{
+            Qhull q3;
+            q3= q;
+            QFAIL("Copy assignment did not fail for initialized Qhull source.");
+        }catch (const std::exception &e) {
+            cout << "INFO   : Caught " << e.what();
+        }
+        QCOMPARE(q.dimension(),3);
+        try{
+            Qhull q4;
+            q= q4;
+            QFAIL("Copy assignment did not fail for initialized Qhull destination.");
+        }catch (const std::exception &e) {
+            cout << "INFO   : Caught " << e.what();
+        }
+        QCOMPARE(q.dimension(),3);
     }
     {
         double points[] = {
@@ -137,7 +163,7 @@ t_message()
             const char *s= e.what();
             cout << "INFO   : Caught " << s;
             QCOMPARE(QString::fromStdString(s).left(6), QString("QH6029"));
-            // FIXUP QH10025 -- review decision to clearQhullMessage at QhullError()            // Cleared when copied to QhullError
+            // FIXUP QH11025 -- review decision to clearQhullMessage at QhullError()            // Cleared when copied to QhullError
             QVERIFY(!q.hasQhullMessage());
             // QCOMPARE(q.qhullMessage(), QString::fromStdString(s).remove(0, 7));
             // QCOMPARE(q.qhullStatus(), 6029);
diff --git a/cpp/qhulltest/UsingLibQhull_test.cpp b/cpp/qhulltest/UsingLibQhull_test.cpp
index 5d6f15d..f5f8dda 100644
--- a/cpp/qhulltest/UsingLibQhull_test.cpp
+++ b/cpp/qhulltest/UsingLibQhull_test.cpp
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/qhulltest/UsingLibQhull_test.cpp#6 $$Change: 1176 $
-** $DateTime: 2010/01/11 19:40:05 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/qhulltest/UsingLibQhull_test.cpp#7 $$Change: 1194 $
+** $DateTime: 2010/01/23 12:14:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -172,6 +172,7 @@ t_UsingLibQhull()
     }
     Qhull q3;
     UsingLibQhull uq3(&q3);
+    // UsingLibQhull uq4; // Default constructors disabled.
 }//t_UsingLibQhull
 
 void UsingLibQhull_test::
diff --git a/cpp/road/RoadError.h b/cpp/road/RoadError.h
index b8c1f7b..c1b5cc3 100644
--- a/cpp/road/RoadError.h
+++ b/cpp/road/RoadError.h
@@ -1,8 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2008-2010 C.B. Barber. All rights reserved.
-** $Id: //product/qhull/main/rel/cpp/road/RoadError.h#22 $$Change: 1179 $
-** $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+** $Id: //product/qhull/main/rel/cpp/road/RoadError.h#23 $$Change: 1193 $
+** $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 **
 ****************************************************************************/
 
@@ -70,7 +70,7 @@ public:
 #//GetSet
     bool                defined() const { return log_event.defined(); }
     int                 errorCode() const { return error_code; };
-   // FIXUP QH10021 should RoadError provide errorMessage().  Currently what()
+   // FIXUP QH11021 should RoadError provide errorMessage().  Currently what()
     RoadLogEvent        roadLogEvent() const { return log_event; };
 
 #//Update
diff --git a/src/Changes.txt b/src/Changes.txt
index 77316b1..6932492 100644
--- a/src/Changes.txt
+++ b/src/Changes.txt
@@ -7,17 +7,36 @@ Need help
    http://gitorious.org/qhull/
  - Produce conformant triangulations for merged facets using option 'Qt' 
  - Add CMakeLists.txt for qhullcpp, user_eg3, cpp/, and cpp/road
-   If practical, please move to project/
- - Verify -fno-strict-aliasing needed for gcc 4.1, 4.2, and 4.3 (qset segfault)
+   If practical, please move CMakeLists.txt to project/
+ - Verify -fno-strict-aliasing needed for gcc 4.1, 4.2, 4.3 (qset segfault)
  - Set up debian build [Pkg-octave-devel]
    Please keep debian files in config/ and project/debian/
    Branch 'debian' is from http://savannah.nongnu.org/cvs/?group=qhull
-   project/debian needs updating for its new location.  It was at qhull's level.
+   project/debian needs updating for its new location.
 
 To do
  - Review email for doc changes
  - RMP build of Qhull
 
+------------
+gitorious.org/qhull 2010/01/23
+- Reviewed all copy constructors and copy assignments.  Updated comments.
+   Defined Qhull copy constructor and copy assignment [G. Rivet-Sabourin]
+   Disabled UsingQhullLib default constructor, copy construct, and copy assign 
+- Add #error to Qhull.h if qh_QHpointer is not defined
+- Define MSG_QHULL_ERROR in user.h
+- Move MSG_FIXUP to 11000 and updated FIXUP QH11...
+- Add patch for old builds in qh-get.htm
+- Add eg/q_test to libqhull.pro
+  Add note to q_test than R1e-3 may error (qh-code.htm, Enhancements)
+- Added C++ compiling instructions to README.txt
+  Add instructions for fixing the DOS window
+- Updated CMakeLists.txt to compile shared and static libraries and link the 
+   command line utilities to the shared one.  Allows install of 
+   targets, libqhull.h, and html docs.  [M. Moll]
+- Fixed location of qhull.man and rbox.man in src/Makefile.txt [M. Moll]
+- Copy HEADER and OTHERFILES from libqhull.pro to libqhullp.pro
+
 ------------
 qhull 2010.1 2010/01/14
 - Fixed quote for #include in qhull.h [U.Hergenhahn, K.Roland]
@@ -46,7 +65,7 @@ qhull 2010.1 2010/01/09
 Changes to build and distribution
 - Use qh_QHpointer=0 for libqhull.a, qhull, rbox, etc.
   Use -Dqh_QHpointer for libqhullp.a, qhullcpp.dll, etc.
-  qh_QHpointer costs: [2010, gcc] 4% time 4% space, [2003, msvc] 8% time 2% space
+  qh_QHpointer [2010, gcc] 4% time 4% space, [2003, msvc] 8% time 2% space
 - Add config/ and project/debian/ for Autoconf build [R. Laboissiere]
   from debian branch in git and http://savannah.nongnu.org/cvs/?group=qhull
 - Add CMakeLists.txt [kwilliams]
@@ -66,7 +85,7 @@ qhull 2009.1.1 2010/01/09
 - Patch release of 2009.1.
   qh_gethash allowed a negative result, causing overwrite or segfault
   See git:qhull/project/patch/qhull-2003.1/poly.c-qh_gethash.patch
-  Compared results of q_test, q_eg, and q_egtest with patched poly.c, qhull-2003.1
+  Compared results of q_test, q_eg, q_egtest with patched poly.c, qhull-2003.1
 
 ------------
 qhull 2010.1 2010/01/07
@@ -89,8 +108,9 @@ qhull 2010.1 2010/01/06
 ------------
 qhull 2010.0.3 2010/01/05
 Fixed bugs
-- 'QJn' (joggle): Fix qh.STOPcone in qh_build_withrestart().  It was not cleared.
-- qh_initqhull_outputflags [global.c]: warn about Qc only if QHULLfinished, otherwise set if needed
+- 'QJn': Fix qh.STOPcone in qh_build_withrestart().  It was not cleared.
+- qh_initqhull_outputflags [global.c]: warn about Qc only if QHULLfinished
+    otherwise set if needed
 
 qhull 2010.0.2 2010/01/04
 
diff --git a/src/io.c b/src/io.c
index afa89c0..1ebea06 100644
--- a/src/io.c
+++ b/src/io.c
@@ -14,8 +14,8 @@
    This allows the user to avoid loading io.o from qhull.a
 
    copyright (c) 1993-2010 The Geometry Center.
-   $Id: //product/qhull/main/rel/src/io.c#38 $$Change: 1179 $
-   $DateTime: 2010/01/12 19:53:15 $$Author: bbarber $
+   $Id: //product/qhull/main/rel/src/io.c#39 $$Change: 1193 $
+   $DateTime: 2010/01/23 11:31:35 $$Author: bbarber $
 */
 
 #include "qhull_a.h"
@@ -3669,7 +3669,7 @@ int qh_readfeasible(int dim, const char *curline) {
   notes:
     dimension will change in qh_initqhull_globals if qh.PROJECTinput
     uses malloc() since qh_mem not initialized
-    FIXUP QH10012: qh_readpoints needs rewriting, too long
+    FIXUP QH11012: qh_readpoints needs rewriting, too long
 */
 coordT *qh_readpoints(int *numpoints, int *dimension, boolT *ismalloc) {
   coordT *points, *coords, *infinity= NULL;
diff --git a/src/user.h b/src/user.h
index 52608c3..25ec0fe 100644
--- a/src/user.h
+++ b/src/user.h
@@ -50,7 +50,7 @@ Code flags --
   If add new messages, assign these values and increment.
 
   def counters =  [27, 1047, 2059, 3025, 4068, 5003, 
-     6233, 7079, 8143, 9410, 10026]
+     6233, 7079, 8143, 9410, 10000, 11026]
 
   See: qh_ERR* [libqhull.h]
 */
@@ -65,7 +65,8 @@ Code flags --
 #define MSG_WARNING 7000
 #define MSG_STDERR  8000  /* log messages Written to qh.ferr */
 #define MSG_OUTPUT  9000
-#define MSG_FIXUP  10000
+#define MSG_QHULL_ERROR 10000 /* errors thrown by QhullError [QhullError.h] */
+#define MSG_FIXUP  11000  /* FIXUP QH11... */
 #define MSG_MAXLEN  3000 /* qh_printhelp_degenerate() in user.c */
 
 
-- 
GitLab