annotate Applications/ApplicationToolbox.cpp @ 87:3d83d34cd4db

sync, optimizations
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 16 Dec 2016 16:44:14 +0100
parents 7a3853d51c45
children 14146ecd1688
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 *
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 * This program is free software: you can redistribute it and/or
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * modify it under the terms of the GNU Affero General Public License
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * as published by the Free Software Foundation, either version 3 of
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * the License, or (at your option) any later version.
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 *
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful, but
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * Affero General Public License for more details.
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 *
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * You should have received a copy of the GNU Affero General Public License
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 **/
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 #include "ApplicationToolbox.h"
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 #include "../Framework/Inputs/OpenSlideLibrary.h"
59
7a3853d51c45 Move "Framework/Orthanc/" as "Resources/Orthanc/"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
24 #include "../Resources/Orthanc/Core/HttpClient.h"
7a3853d51c45 Move "Framework/Orthanc/" as "Resources/Orthanc/"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
25 #include "../Resources/Orthanc/Core/Logging.h"
7a3853d51c45 Move "Framework/Orthanc/" as "Resources/Orthanc/"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
26 #include "../Resources/Orthanc/Core/MultiThreading/BagOfTasksProcessor.h"
7a3853d51c45 Move "Framework/Orthanc/" as "Resources/Orthanc/"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 51
diff changeset
27 #include "../Resources/Orthanc/OrthancServer/FromDcmtkBridge.h"
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 #include <boost/lexical_cast.hpp>
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include <boost/regex.hpp>
87
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
31 #include <cassert>
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
32
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
33
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
34 static bool DisplayPerformanceWarning()
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
35 {
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
36 (void) DisplayPerformanceWarning; // Disable warning about unused function
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
37 LOG(WARNING) << "Performance warning in whole-slide imaging: "
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
38 << "Non-release build, runtime debug assertions are turned on";
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
39 return true;
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
40 }
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
41
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 namespace OrthancWSI
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 namespace ApplicationToolbox
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 void GlobalInitialize()
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 Orthanc::Logging::Initialize();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 Orthanc::HttpClient::InitializeOpenSsl();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 Orthanc::HttpClient::GlobalInitialize();
51
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 31
diff changeset
52 Orthanc::FromDcmtkBridge::InitializeDictionary(false /* don't load private dictionary */);
87
3d83d34cd4db sync, optimizations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 59
diff changeset
53 assert(DisplayPerformanceWarning());
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 void GlobalFinalize()
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 OrthancWSI::OpenSlideLibrary::Finalize();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 Orthanc::HttpClient::GlobalFinalize();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61 Orthanc::HttpClient::FinalizeOpenSsl();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 static void PrintProgress(Orthanc::BagOfTasksProcessor::Handle* handle,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 bool* done)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68 unsigned int previous = 0;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 while (!*done)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 unsigned int progress = static_cast<unsigned int>(100.0f * handle->GetProgress());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 if (previous != progress)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75 LOG(WARNING) << "Progress: " << progress << "%";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76 previous = progress;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 boost::this_thread::sleep(boost::posix_time::milliseconds(100));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 void Execute(Orthanc::BagOfTasks& tasks,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 unsigned int threadsCount)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87 if (threadsCount > 1)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 {
7
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
89 // Submit the tasks to a newly-created processor
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 LOG(WARNING) << "Running " << tasks.GetSize() << " tasks";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 LOG(WARNING) << "Using " << threadsCount << " threads for the computation";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 Orthanc::BagOfTasksProcessor processor(threadsCount);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 std::auto_ptr<Orthanc::BagOfTasksProcessor::Handle> handle(processor.Submit(tasks));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94
7
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
95 // Start a thread to display the progress
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 bool done = false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 boost::thread progress(PrintProgress, handle.get(), &done);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98
7
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
99 // Wait for the completion of the tasks
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
100 bool success = handle->Join();
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
101
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
102 // Stop the progress-printing thread
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
103 done = true;
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
104
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
105 if (progress.joinable())
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 {
7
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
107 progress.join();
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
108 }
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
109
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
110 if (success)
bc3ca410b765 Fix freeze if the target Orthanc is not accepting images
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 0
diff changeset
111 {
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 LOG(WARNING) << "All tasks have finished";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 LOG(ERROR) << "Error has occurred, aborting";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 LOG(WARNING) << "Running " << tasks.GetSize() << " tasks without multithreading";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 unsigned int previous = 0;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125 unsigned int size = tasks.GetSize();
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127 // No multithreading
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128 while (!tasks.IsEmpty())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 std::auto_ptr<Orthanc::ICommand> task(tasks.Pop());
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 if (task->Execute())
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 unsigned int progress = static_cast<unsigned int>(100.0f *
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 static_cast<float>((size - tasks.GetSize())) /
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 static_cast<float>(size));
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136 if (progress != previous)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 LOG(WARNING) << "Progress: " << progress << "%";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 previous = progress;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142 else
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144 LOG(ERROR) << "Error has occurred, aborting";
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
148 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152 void ParseColor(uint8_t& red,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 uint8_t& green,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 uint8_t& blue,
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 const std::string& color)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157 boost::regex pattern("([0-9]*),([0-9]*),([0-9]*)");
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 bool ok = false;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 boost::cmatch what;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 try
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 if (regex_match(color.c_str(), what, pattern))
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 int r = boost::lexical_cast<int>(what[1]);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 int g = boost::lexical_cast<int>(what[2]);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 int b = boost::lexical_cast<int>(what[3]);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 if (r >= 0 && r <= 255 &&
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 g >= 0 && g <= 255 &&
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 b >= 0 && b <= 255)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 red = static_cast<uint8_t>(r);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175 green = static_cast<uint8_t>(g);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 blue = static_cast<uint8_t>(b);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177 ok = true;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 catch (boost::bad_lexical_cast&)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 if (!ok)
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 {
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 LOG(ERROR) << "Bad color specification: " << color;
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190 }
8
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
191
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
192
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
193 void PrintVersion(const char* path)
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
194 {
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
195 std::cout
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
196 << path << " " << ORTHANC_WSI_VERSION << std::endl
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
197 << "Copyright (C) 2012-2016 Sebastien Jodogne, "
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
198 << "Medical Physics Department, University Hospital of Liege (Belgium)" << std::endl
31
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 8
diff changeset
199 << "Licensing AGPL: GNU AGPL version 3 or later <http://gnu.org/licenses/agpl.html>." << std::endl
8
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
200 << "This is free software: you are free to change and redistribute it." << std::endl
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
201 << "There is NO WARRANTY, to the extent permitted by law." << std::endl
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
202 << std::endl
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
203 << "Written by Sebastien Jodogne <s.jodogne@gmail.com>" << std::endl;
62adabb8c122 Provide "--version" in command-line tools
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 7
diff changeset
204 }
0
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 }
4a7a53257c7d initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206 }