00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "fennel/common/CommonPreamble.h"
00025
00026 #include <ctype.h>
00027 #include <algorithm>
00028
00029 #include <boost/io/ios_state.hpp>
00030 #include <boost/format.hpp>
00031
00032 #ifdef __MSVC__
00033 # include <windows.h>
00034 # include "fennel/common/AtomicCounter.h"
00035 # include "fennel/common/IntrusiveDList.h"
00036 # include "fennel/common/CompoundId.h"
00037 # include "fennel/common/AbortExcn.h"
00038 # include "fennel/common/VoidPtrHash.h"
00039 #else
00040 # include <pthread.h>
00041 #endif
00042
00043
00044
00045
00046 #ifdef __MSVC__
00047 void *operator new [](unsigned sz) throw (std::bad_alloc)
00048 {
00049 void *p = malloc(sz ? sz : 1);
00050 if (!p) {
00051 throw std::bad_alloc();
00052 }
00053 return p;
00054 }
00055
00056 void operator delete [](void *p) throw ()
00057 {
00058 free(p);
00059 }
00060 #endif
00061
00062 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/common/Memory.cpp#12 $");
00063
00064 std::logic_error constructAssertion(
00065 char const *pFilename,int lineNum,char const *condExpr)
00066 {
00067 boost::format fmt("Assertion `%1%' failed at line %2% in file %3%");
00068 return std::logic_error(
00069 (fmt % condExpr % lineNum % pFilename).str());
00070 }
00071
00072 int getCurrentThreadId()
00073 {
00074 #ifdef __MSVC__
00075 return static_cast<int>(GetCurrentThreadId());
00076 #else
00077 return static_cast<int>(pthread_self());
00078 #endif
00079 }
00080
00081 void hexDump(std::ostream &o,void const *v,uint cb,uint cbDone)
00082 {
00083 boost::io::ios_all_saver streamStateSaver(o);
00084
00085 PConstBuffer b = (PConstBuffer) v;
00086 uint cbLine = 16,cbThis;
00087 o.fill('0');
00088 for (; cb; cb -= cbThis, cbDone += cbThis) {
00089 cbThis = std::min(cbLine,cb);
00090 o << std::hex;
00091 o.width(4);
00092 o << cbDone << ": ";
00093 uint i;
00094 for (i = 0; i < cbThis; i++, b++) {
00095 o.width(2);
00096 o << (uint) *b << " ";
00097 }
00098 for (i = cbThis; i < cbLine; i++) {
00099 o << " ";
00100 }
00101 o << "| ";
00102 for (i = 0, b -= cbThis; i < cbThis; i++, b++) {
00103 if (isprint(*b)) {
00104 o << *b;
00105 } else {
00106 o << " ";
00107 }
00108 }
00109 o << std::endl;
00110 }
00111 }
00112
00113
00114
00115
00116 #ifdef __MSVC__
00117 class UnreferencedCommonStructs
00118 {
00119 AtomicCounter atomicCounter;
00120 IntrusiveDListNode dlistNode;
00121 CompoundId compoundId;
00122 AbortExcn abortExcn;
00123 VoidPtrHash voidPtrHash;
00124 };
00125 #endif
00126
00127 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/common/Memory.cpp#12 $");
00128
00129