Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #//! QhullQh -- Qhull's global data structure, qhT, as a C++ class
00010
00011
00012
00013 #include "QhullError.h"
00014 #include "QhullQh.h"
00015 #include "QhullStat.h"
00016
00017 #include <sstream>
00018 #include <iostream>
00019
00020 using std::cerr;
00021 using std::string;
00022 using std::vector;
00023 using std::ostream;
00024
00025 #ifdef _MSC_VER // Microsoft Visual C++ -- warning level 4
00026 #pragma warning( disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable
00027 #pragma warning( disable : 4996) // function was declared deprecated(strcpy, localtime, etc.)
00028 #endif
00029
00030 namespace orgQhull {
00031
00032 #//Global variables
00033
00034 #//Constructor, destructor, etc.
00035
00039 QhullQh::
00040 QhullQh()
00041 {
00042 static boolT firstcall = True;
00043
00044 if(firstcall){
00045 if(qhmem.BUFinit!=0){
00046 throw QhullError(10017, "Qhull error: qhmem already initialized by another class.");
00047 }
00048 qh_meminit(NULL);
00049 firstcall= False;
00050 }
00051
00052 #if qh_QHpointer
00053 if(qh_qh){
00054 if(qh old_qhstat){
00055 throw QhullError(10041, "Qhull internal error: qh_qh.old_qhstat defined (%x) but qh_qh is active. qh_qh not restored correctly.", 0, 0, 0.0, qh old_qhstat);
00056 }
00057 qh old_qhstat= qh_qhstat;
00058 qh old_tempstack= qhmem.tempstack;
00059 qh_qhstat= 0;
00060 qhmem.tempstack= 0;
00061 }
00062 qh_qh= static_cast<qhT*>(this);
00063 #else
00064 if(strncmp(qh qhull, "qhull", 5) == 0){
00065 throw QhullError(10022, "Qhull error: Qhull already initialized as run %d", qh run_id);
00066 }
00067 #endif
00068
00069 qh_initstatistics();
00070
00071 qh_initqhull_start2(NULL, NULL, qh_FILEstderr);
00072 }
00073
00075 QhullQh::
00076 ~QhullQh()
00077 {
00078 #if qh_QHpointer
00079 if(!qh_qh){
00080 QhullError e(10042, "Qhull internal error: qh_qh undefined. Was ~QhullQh() invoked independent of UsingLibQhull?", qh run_id, 0, 0, qh_qh);
00081 e.logError();
00082 }else if(!qh_qhstat){
00083 QhullError e(10043, "Qhull internal error: qh_qhstat null. Is another thread running?");
00084 e.logError();
00085 }else if(qh_qh!=this){
00086 QhullError e(10044, "Qhull error: ~QhullQh() invoked independent of UsingLibQhull. qh_qh %x (runId %d) vs. QhullQh.runId %d.", qh run_id, run_id, 0.0, qh_qh);
00087 e.logError();
00088 }else{
00089 qh_freeqhull2(qh_ALL);
00090 }
00091 #else
00092 if(&qh_qh!=this){
00093 QhullError e(10045, "Qhull error: ~QhullQh() invoked independent of UsingLibQhull. qh_qh %x (runId %d) vs. QhullQh.runId %d.", qh run_id, run_id, 0.0, qh_qh);
00094 e.logError();
00095 }else{
00096 qh_freeqhull2(qh_ALL);
00097 }
00098 #endif
00099 }
00100
00101 #//Parallel Access
00102
00103 }
00104