diff --git a/tpie/array_view.h b/tpie/array_view.h index 43b3d2410..56834b52d 100644 --- a/tpie/array_view.h +++ b/tpie/array_view.h @@ -17,6 +17,9 @@ // You should have received a copy of the GNU Lesser General Public License // along with TPIE. If not, see +#ifndef __ARRAY_VIEW_H__ +#define __ARRAY_VIEW_H__ + #include #include #include @@ -81,7 +84,7 @@ class array_view_base { ///////////////////////////////////////////////////////// inline bool empty() const {return m_end == m_start;} - inline bool size() const {return m_end - m_start;} + inline size_t size() const {return m_end - m_start;} ///////////////////////////////////////////////////////// /// \brief Return a referense to an array entry @@ -148,12 +151,12 @@ class array_view: public array_view_base { public: inline array_view(const array_view & o): array_view_base(o) {} - + inline array_view(std::vector & v): - array_view_base(&*v.begin(), &*v.end()) {} + array_view_base(&*(v.begin()), &(*v.end())) {} inline array_view(tpie::array & v): - array_view_base(&*v.begin(), &*v.end()) {} + array_view_base(&*(v.begin()), &(*v.end())) {} inline array_view(std::vector & v, size_t start, size_t end): array_view_base(&v[start], &v[end]) {} @@ -163,11 +166,11 @@ class array_view: public array_view_base { inline array_view(typename std::vector::iterator start, typename std::vector::iterator end): array_view_base(&*start, &*end) {} - + inline array_view(typename array::iterator start, typename array::iterator end): array_view_base(&*start, &*end) {} - - inline array_view(T * start, T * end): + + inline array_view(T * start, T * end): array_view_base(start, end) {} inline array_view(T * start, size_t size): @@ -178,13 +181,13 @@ template class array_view: public array_view_base { public: inline array_view(array_view o): - array_view_base(&*o.begin(), &*o.end()) {} + array_view_base(&*(o.begin()), &*(o.end())) {} inline array_view(const std::vector & v): - array_view_base(&*v.const_begin(), &*v.const_end()) {} + array_view_base(&*(v.begin()), &*(v.end())) {} inline array_view(const tpie::array & v): - array_view_base(&*v.begin(), &*v.end()) {} + array_view_base(&*(v.begin()), &*(v.end())) {} inline array_view(const std::vector & v, size_t start, size_t end): array_view_base(&v[start], &v[end]) {} @@ -206,3 +209,5 @@ class array_view: public array_view_base { }; } //namespace tpie + +#endif // __ARRAY_VIEW_H__ diff --git a/tpie/fractional_progress.cpp b/tpie/fractional_progress.cpp index f1e848441..4ea556ed7 100644 --- a/tpie/fractional_progress.cpp +++ b/tpie/fractional_progress.cpp @@ -187,6 +187,10 @@ inline std::string fname(const char * file, const char * function, const char * } + +fractional_subindicator::fractional_subindicator( + fractional_progress & fp): m_fp(fp) {} + fractional_subindicator::fractional_subindicator( fractional_progress & fp, const char * id, @@ -195,23 +199,37 @@ fractional_subindicator::fractional_subindicator( TPIE_OS_OFFSET n, const char * crumb, description_importance importance, - bool enabled): - progress_indicator_subindicator(fp.m_pi, 42, crumb, importance), + bool enabled): m_fp(fp) { + setup(id, file, function, n, crumb, importance, enabled); +} + +void fractional_subindicator::setup( + const char * id, + const char * file, + const char * function, + TPIE_OS_OFFSET n, + const char * crumb, + description_importance importance, + bool enabled) { + progress_indicator_subindicator::setup(m_fp.m_pi, 42, crumb, importance); #ifndef TPIE_NDEBUG - m_init_called(false), m_done_called(false), + m_init_called = false; + m_done_called = false; #endif - m_fraction(enabled?fdb->getFraction(fname(file, function, id)):0.0), m_estimate(-1), m_n(enabled?n:0), m_fp(fp), m_predict(fp.m_id() + ";" + id) + m_fraction = enabled?fdb->getFraction(fname(file, function, id)):0.0; + m_estimate = -1; + m_n = enabled?n:0; + m_predict = m_fp.m_id() + ";" + id; #ifdef TPIE_FRACTION_STATS - ,m_stat(fname(file, function, id)) + m_stat = fname(file, function, id); #endif -{ if (enabled) m_estimate = m_predict.estimate_execution_time(n, m_confidence); else { m_estimate = 0; m_confidence = 1; } - fp.add_sub_indicator(*this); + m_fp.add_sub_indicator(*this); }; void fractional_subindicator::init(TPIE_OS_OFFSET range) { diff --git a/tpie/fractional_progress.h b/tpie/fractional_progress.h index 5c51d1784..4e4fc0fb0 100644 --- a/tpie/fractional_progress.h +++ b/tpie/fractional_progress.h @@ -34,6 +34,8 @@ class fractional_progress; class fractional_subindicator: public progress_indicator_subindicator { public: + fractional_subindicator(fractional_progress & fp); + fractional_subindicator(fractional_progress & fp, const char * id, const char * file, @@ -43,6 +45,14 @@ class fractional_subindicator: public progress_indicator_subindicator { description_importance importance=IMPORTANCE_MAJOR, bool enabled=true); + void setup(const char * id, + const char * file, + const char * function, + TPIE_OS_OFFSET n, + const char * crumb=0, + description_importance importance=IMPORTANCE_MAJOR, + bool enabled=true); + ~fractional_subindicator(); virtual void init(TPIE_OS_OFFSET range); virtual void done(); diff --git a/tpie/progress_indicator_subindicator.cpp b/tpie/progress_indicator_subindicator.cpp index 32c0775ee..5567dc9ec 100644 --- a/tpie/progress_indicator_subindicator.cpp +++ b/tpie/progress_indicator_subindicator.cpp @@ -42,12 +42,26 @@ progress_indicator_subindicator::progress_indicator_subindicator(progress_indica TPIE_OS_OFFSET outerRange, const char * crumb, description_importance importance): - progress_indicator_base(0), m_parent(parent), m_outerRange(outerRange), - m_oldValue(0), m_importance(importance) + progress_indicator_base(0) { + setup(parent, outerRange, crumb, importance); +} + + +progress_indicator_subindicator::progress_indicator_subindicator(): + progress_indicator_base(0) {} + +void progress_indicator_subindicator::setup(progress_indicator_base * parent, + TPIE_OS_OFFSET outerRange, + const char * crumb, + description_importance importance) { + m_parent = parent; + m_outerRange = outerRange; + m_importance = importance; + m_oldValue = 0; #ifndef TPIE_NDEBUG - ,m_init_called(false), m_done_called(false) + m_init_called = false; + m_done_called = false; #endif -{ if (crumb == 0) m_crumb[0] = 0; else { @@ -56,6 +70,7 @@ progress_indicator_subindicator::progress_indicator_subindicator(progress_indica } } + #ifndef TPIE_NDEBUG progress_indicator_subindicator::~progress_indicator_subindicator() { if (m_init_called && !m_done_called && !std::uncaught_exception()) { diff --git a/tpie/progress_indicator_subindicator.h b/tpie/progress_indicator_subindicator.h index 876083519..5067460f8 100644 --- a/tpie/progress_indicator_subindicator.h +++ b/tpie/progress_indicator_subindicator.h @@ -31,6 +31,14 @@ class progress_indicator_subindicator: public progress_indicator_base { virtual void pop_breadcrumb(); virtual void init(TPIE_OS_OFFSET range); virtual void done(); + + void setup(progress_indicator_base * parent, + TPIE_OS_OFFSET outerRange, + const char * crumb=0, + description_importance importance=IMPORTANCE_MAJOR); + + progress_indicator_subindicator(); + progress_indicator_subindicator(progress_indicator_base * parent, TPIE_OS_OFFSET outerRange, const char * crumb=0,