Skip to content

Commit 5d94ace

Browse files
committed
[delaunay-psm] Update to 1.6.6
1 parent e926a99 commit 5d94ace

File tree

4 files changed

+74
-32
lines changed

4 files changed

+74
-32
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.1.3)
22

3-
project(delaunay-psm LANGUAGES C CXX VERSION 1.6.5)
3+
project(delaunay-psm LANGUAGES C CXX VERSION 1.6.6)
44

55
set(CMAKE_CXX_STANDARD 11)
66

delaunay-psm/Delaunay_psm.cpp

Lines changed: 70 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1712,6 +1712,8 @@ namespace GEO {
17121712

17131713

17141714
std::string GEOGRAM_API home_directory();
1715+
1716+
std::string GEOGRAM_API documents_directory();
17151717
}
17161718
}
17171719

@@ -4007,7 +4009,7 @@ namespace GEO {
40074009
}
40084010

40094011
void LoggerStream::notify(const std::string& str) {
4010-
logger_->notify(this, str);
4012+
logger_->notify(this, str);
40114013
}
40124014

40134015

@@ -4257,6 +4259,7 @@ namespace GEO {
42574259
pretty_ = flag;
42584260
}
42594261

4262+
42604263
Logger::Logger() :
42614264
out_(this),
42624265
warn_(this),
@@ -4266,7 +4269,8 @@ namespace GEO {
42664269
current_feature_changed_(false),
42674270
quiet_(true),
42684271
pretty_(true),
4269-
minimal_(false)
4272+
minimal_(false),
4273+
notifying_error_(false)
42704274
{
42714275
// Add a default client printing stuff to std::cout
42724276
register_client(new ConsoleLogger());
@@ -4279,7 +4283,8 @@ namespace GEO {
42794283
}
42804284

42814285
Logger* Logger::instance() {
4282-
// Do not use geo_assert here: if the instance is nullptr, geo_assert will
4286+
// Do not use geo_assert here:
4287+
// if the instance is nullptr, geo_assert will
42834288
// call the Logger to print the assertion failure, thus ending in a
42844289
// infinite loop.
42854290
if(instance_ == nullptr) {
@@ -4292,33 +4297,42 @@ namespace GEO {
42924297
}
42934298

42944299
std::ostream& Logger::div(const std::string& title) {
4295-
return is_initialized() ?
4300+
std::ostream& result = is_initialized() ?
42964301
instance()->div_stream(title) :
42974302
(std::cerr << "=====" << title << std::endl);
4303+
return result;
42984304
}
42994305

43004306
std::ostream& Logger::out(const std::string& feature) {
4301-
return is_initialized() ?
4307+
std::ostream& result =
4308+
(is_initialized() && !Process::is_running_threads()) ?
43024309
instance()->out_stream(feature) :
43034310
(std::cerr << " [" << feature << "] ");
4311+
return result;
43044312
}
43054313

43064314
std::ostream& Logger::err(const std::string& feature) {
4307-
return is_initialized() ?
4315+
std::ostream& result =
4316+
(is_initialized() && !Process::is_running_threads()) ?
43084317
instance()->err_stream(feature) :
43094318
(std::cerr << "(E)-[" << feature << "] ");
4319+
return result;
43104320
}
43114321

43124322
std::ostream& Logger::warn(const std::string& feature) {
4313-
return is_initialized() ?
4323+
std::ostream& result =
4324+
(is_initialized() && !Process::is_running_threads()) ?
43144325
instance()->warn_stream(feature) :
43154326
(std::cerr << "(W)-[" << feature << "] ");
4327+
return result;
43164328
}
43174329

43184330
std::ostream& Logger::status() {
4319-
return is_initialized() ?
4331+
std::ostream& result =
4332+
(is_initialized() && !Process::is_running_threads()) ?
43204333
instance()->status_stream() :
43214334
(std::cerr << "[status] ");
4335+
return result;
43224336
}
43234337

43244338
std::ostream& Logger::div_stream(const std::string& title) {
@@ -4399,10 +4413,17 @@ namespace GEO {
43994413
CmdLine::ui_feature(current_feature_, current_feature_changed_)
44004414
+ msg;
44014415

4402-
for(auto it : clients_) {
4403-
it->err(feat_msg);
4404-
it->status(msg);
4405-
}
4416+
if(notifying_error_) {
4417+
std::cerr << "Error while displaying error (!):"
4418+
<< feat_msg << std::endl;
4419+
} else {
4420+
notifying_error_ = true;
4421+
for(auto it : clients_) {
4422+
it->err(feat_msg);
4423+
it->status(msg);
4424+
}
4425+
notifying_error_ = false;
4426+
}
44064427

44074428
current_feature_changed_ = false;
44084429
}
@@ -5100,7 +5121,7 @@ namespace GEO {
51005121
std::string home;
51015122
#if defined GEO_OS_WINDOWS
51025123
wchar_t folder[MAX_PATH+1];
5103-
HRESULT hr = SHGetFolderPathW(0, CSIDL_MYDOCUMENTS, 0, 0, folder);
5124+
HRESULT hr = SHGetFolderPathW(0, CSIDL_PROFILE, 0, 0, folder);
51045125
if (SUCCEEDED(hr)) {
51055126
char result[MAX_PATH+1];
51065127
wcstombs(result, folder, MAX_PATH);
@@ -5118,6 +5139,27 @@ namespace GEO {
51185139
return home;
51195140
}
51205141

5142+
std::string documents_directory() {
5143+
std::string home;
5144+
#if defined GEO_OS_WINDOWS
5145+
wchar_t folder[MAX_PATH+1];
5146+
HRESULT hr = SHGetFolderPathW(0, CSIDL_MYDOCUMENTS, 0, 0, folder);
5147+
if (SUCCEEDED(hr)) {
5148+
char result[MAX_PATH+1];
5149+
wcstombs(result, folder, MAX_PATH);
5150+
home=std::string(result);
5151+
flip_slashes(home);
5152+
}
5153+
#elif defined GEO_OS_EMSCRIPTEN
5154+
home="/";
5155+
#else
5156+
char* result = getenv("HOME");
5157+
if(result != nullptr) {
5158+
home=result;
5159+
}
5160+
#endif
5161+
return home;
5162+
}
51215163

51225164
}
51235165

@@ -5888,7 +5930,14 @@ namespace GEO {
58885930
}
58895931

58905932
bool is_running_threads() {
5933+
#ifdef GEO_OPENMP
5934+
return (
5935+
omp_in_parallel() ||
5936+
(running_threads_invocations_ > 0)
5937+
);
5938+
#else
58915939
return running_threads_invocations_ > 0;
5940+
#endif
58925941
}
58935942

58945943
bool multithreading_enabled() {
@@ -17665,12 +17714,6 @@ namespace {
1766517714

1766617715
#ifdef __AVX2__
1766717716

17668-
inline int avx_permute_mask(int a0, int a1, int a2, int a3) {
17669-
return a0 | (a1 << 2) | (a2 << 4) | (a3 << 6);
17670-
}
17671-
17672-
// To be replaced with _MM_SHUFFLE(a3,a2,a1,a0) (note: reverse arg order !)
17673-
1767417717
inline __m256d avx2_vecdet(__m256d A, __m256d B, __m256d C, __m256d D) {
1767517718
__m256d AD = _mm256_mul_pd(A,D);
1767617719
__m256d BC = _mm256_mul_pd(B,C);
@@ -17686,16 +17729,16 @@ namespace {
1768617729
// We develop w.r.t. the first column and
1768717730
// compute the 4 minors simultaneously.
1768817731

17689-
__m256d C41 = _mm256_permute4x64_pd(C11, avx_permute_mask(3,0,1,2));
17732+
__m256d C41 = _mm256_permute4x64_pd(C11, _MM_SHUFFLE(2,1,0,3));
1769017733

17691-
__m256d C22 = _mm256_permute4x64_pd(C12, avx_permute_mask(1,2,3,0));
17692-
__m256d C32 = _mm256_permute4x64_pd(C12, avx_permute_mask(2,3,0,1));
17734+
__m256d C22 = _mm256_permute4x64_pd(C12, _MM_SHUFFLE(0,3,2,1));
17735+
__m256d C32 = _mm256_permute4x64_pd(C12, _MM_SHUFFLE(1,0,3,2));
1769317736

17694-
__m256d C23 = _mm256_permute4x64_pd(C13, avx_permute_mask(1,2,3,0));
17695-
__m256d C33 = _mm256_permute4x64_pd(C13, avx_permute_mask(2,3,0,1));
17737+
__m256d C23 = _mm256_permute4x64_pd(C13, _MM_SHUFFLE(0,3,2,1));
17738+
__m256d C33 = _mm256_permute4x64_pd(C13, _MM_SHUFFLE(1,0,3,2));
1769617739

17697-
__m256d C24 = _mm256_permute4x64_pd(C14, avx_permute_mask(1,2,3,0));
17698-
__m256d C34 = _mm256_permute4x64_pd(C14, avx_permute_mask(2,3,0,1));
17740+
__m256d C24 = _mm256_permute4x64_pd(C14, _MM_SHUFFLE(0,3,2,1));
17741+
__m256d C34 = _mm256_permute4x64_pd(C14, _MM_SHUFFLE(1,0,3,2));
1769917742

1770017743
__m256d M1 = _mm256_mul_pd(C12,avx2_vecdet(C23,C24,C33,C34));
1770117744
__m256d M2 = _mm256_mul_pd(C22,avx2_vecdet(C13,C14,C33,C34));
@@ -17710,7 +17753,7 @@ namespace {
1771017753
M = _mm256_mul_pd(M, C41);
1771117754

1771217755
// Compute -m0 +m1 -m2 +m3
17713-
M = _mm256_permute4x64_pd(M, avx_permute_mask(1,3,0,2));
17756+
M = _mm256_permute4x64_pd(M, _MM_SHUFFLE(2,0,3,1));
1771417757
__m128d M_a = _mm256_extractf128_pd(M, 0);
1771517758
__m128d M_b = _mm256_extractf128_pd(M, 1);
1771617759
__m128d Mab = _mm_sub_pd(M_a,M_b);
@@ -25881,9 +25924,6 @@ namespace GEO {
2588125924
delete W;
2588225925

2588325926
if(debug_mode_) {
25884-
// Delaunay3dThread* thread0 =
25885-
// static_cast<Delaunay3dThread*>(threads_[0].get());
25886-
2588725927
for(index_t i=0; i<threads_.size(); ++i) {
2588825928
std::cerr << i << " : " <<
2588925929
static_cast<Delaunay3dThread*>(threads_[i].get())

delaunay-psm/Delaunay_psm.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1361,7 +1361,7 @@ namespace GEO {
13611361
class NO_GEOGRAM_API LoggerStreamBuf : public std::stringbuf {
13621362
public:
13631363
LoggerStreamBuf(LoggerStream* loggerStream) :
1364-
loggerStream_(loggerStream) {
1364+
loggerStream_(loggerStream) {
13651365
}
13661366

13671367
private:
@@ -1571,8 +1571,10 @@ namespace GEO {
15711571
bool quiet_;
15721572
bool pretty_;
15731573
bool minimal_;
1574+
bool notifying_error_;
15741575

15751576
friend class LoggerStream;
1577+
friend class LoggerStreamBuf;
15761578
};
15771579

15781580

26.6 MB
Binary file not shown.

0 commit comments

Comments
 (0)