Skip to content

Commit

Permalink
Improve fractional progress and fix a bug in array_view
Browse files Browse the repository at this point in the history
  • Loading branch information
antialize committed Jan 24, 2012
1 parent 4f0ac6d commit c1f68a1
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 21 deletions.
25 changes: 15 additions & 10 deletions tpie/array_view.h
Expand Up @@ -17,6 +17,9 @@
// You should have received a copy of the GNU Lesser General Public License
// along with TPIE. If not, see <http://www.gnu.org/licenses/>

#ifndef __ARRAY_VIEW_H__
#define __ARRAY_VIEW_H__

#include <boost/iterator/iterator_facade.hpp>
#include <vector>
#include <tpie/array.h>
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -148,12 +151,12 @@ class array_view: public array_view_base<T> {
public:
inline array_view(const array_view & o):
array_view_base<T>(o) {}

inline array_view(std::vector<T> & v):
array_view_base<T>(&*v.begin(), &*v.end()) {}
array_view_base<T>(&*(v.begin()), &(*v.end())) {}

inline array_view(tpie::array<T> & v):
array_view_base<T>(&*v.begin(), &*v.end()) {}
array_view_base<T>(&*(v.begin()), &(*v.end())) {}

inline array_view(std::vector<T> & v, size_t start, size_t end):
array_view_base<T>(&v[start], &v[end]) {}
Expand All @@ -163,11 +166,11 @@ class array_view: public array_view_base<T> {

inline array_view(typename std::vector<T>::iterator start, typename std::vector<T>::iterator end):
array_view_base<T>(&*start, &*end) {}

inline array_view(typename array<T>::iterator start, typename array<T>::iterator end):
array_view_base<T>(&*start, &*end) {}

inline array_view(T * start, T * end):
inline array_view(T * start, T * end):
array_view_base<T>(start, end) {}

inline array_view(T * start, size_t size):
Expand All @@ -178,13 +181,13 @@ template <typename T>
class array_view<const T>: public array_view_base<const T> {
public:
inline array_view(array_view<T> o):
array_view_base<const T>(&*o.begin(), &*o.end()) {}
array_view_base<const T>(&*(o.begin()), &*(o.end())) {}

inline array_view(const std::vector<T> & v):
array_view_base<const T>(&*v.const_begin(), &*v.const_end()) {}
array_view_base<const T>(&*(v.begin()), &*(v.end())) {}

inline array_view(const tpie::array<T> & v):
array_view_base<const T>(&*v.begin(), &*v.end()) {}
array_view_base<const T>(&*(v.begin()), &*(v.end())) {}

inline array_view(const std::vector<T> & v, size_t start, size_t end):
array_view_base<const T>(&v[start], &v[end]) {}
Expand All @@ -206,3 +209,5 @@ class array_view<const T>: public array_view_base<const T> {
};

} //namespace tpie

#endif // __ARRAY_VIEW_H__
32 changes: 25 additions & 7 deletions tpie/fractional_progress.cpp
Expand Up @@ -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,
Expand All @@ -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) {
Expand Down
10 changes: 10 additions & 0 deletions tpie/fractional_progress.h
Expand Up @@ -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,
Expand All @@ -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();
Expand Down
23 changes: 19 additions & 4 deletions tpie/progress_indicator_subindicator.cpp
Expand Up @@ -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 {
Expand All @@ -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()) {
Expand Down
8 changes: 8 additions & 0 deletions tpie/progress_indicator_subindicator.h
Expand Up @@ -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,
Expand Down

0 comments on commit c1f68a1

Please sign in to comment.