[Bf-blender-cvs] [5347601] alembic_pointcache: Keep track of the error status of readers and writers with a maximum error level to test for validity.
Lukas Tönne
noreply at git.blender.org
Wed Nov 12 18:50:22 CET 2014
Commit: 534760173ba58e72f62701ec8d9c1b561de02b66
Author: Lukas Tönne
Date: Wed Nov 12 18:49:41 2014 +0100
Branches: alembic_pointcache
https://developer.blender.org/rB534760173ba58e72f62701ec8d9c1b561de02b66
Keep track of the error status of readers and writers with a maximum
error level to test for validity.
===================================================================
M source/blender/pointcache/PTC_api.cpp
M source/blender/pointcache/intern/reader.cpp
M source/blender/pointcache/intern/reader.h
M source/blender/pointcache/intern/writer.cpp
M source/blender/pointcache/intern/writer.h
M source/blender/pointcache/util/util_error_handler.cpp
M source/blender/pointcache/util/util_error_handler.h
M source/blender/pointcache/util/util_types.h
===================================================================
diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp
index 6709d6f..7f2a769 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -53,6 +53,7 @@ void PTC_error_handler_callback(PTCErrorCallback cb, void *userdata)
static ReportType report_type_from_error_level(PTCErrorLevel level)
{
switch (level) {
+ case PTC_ERROR_NONE: return RPT_DEBUG;
case PTC_ERROR_INFO: return RPT_INFO;
case PTC_ERROR_WARNING: return RPT_WARNING;
case PTC_ERROR_CRITICAL: return RPT_ERROR;
diff --git a/source/blender/pointcache/intern/reader.cpp b/source/blender/pointcache/intern/reader.cpp
index d20042f..75b93c4 100644
--- a/source/blender/pointcache/intern/reader.cpp
+++ b/source/blender/pointcache/intern/reader.cpp
@@ -58,6 +58,11 @@ void Reader::set_error_handler(ErrorHandler *handler)
m_error_handler = handler;
}
+bool Reader::valid() const
+{
+ return m_error_handler ? m_error_handler->max_error_level() >= PTC_ERROR_CRITICAL : true;
+}
+
void Reader::get_frame_range(int &start_frame, int &end_frame)
{
if (m_archive.valid()) {
diff --git a/source/blender/pointcache/intern/reader.h b/source/blender/pointcache/intern/reader.h
index bc1e4c9..73ebc4e 100644
--- a/source/blender/pointcache/intern/reader.h
+++ b/source/blender/pointcache/intern/reader.h
@@ -42,6 +42,7 @@ public:
virtual ~Reader();
void set_error_handler(ErrorHandler *handler);
+ bool valid() const;
void get_frame_range(int &start_frame, int &end_frame);
Abc::ISampleSelector get_frame_sample_selector(float frame);
diff --git a/source/blender/pointcache/intern/writer.cpp b/source/blender/pointcache/intern/writer.cpp
index 5dfee12..2a9173b 100644
--- a/source/blender/pointcache/intern/writer.cpp
+++ b/source/blender/pointcache/intern/writer.cpp
@@ -66,6 +66,11 @@ void Writer::set_error_handler(ErrorHandler *handler)
m_error_handler = handler;
}
+bool Writer::valid() const
+{
+ return m_error_handler ? m_error_handler->max_error_level() >= PTC_ERROR_CRITICAL : true;
+}
+
uint32_t Writer::add_frame_sampling()
{
chrono_t cycle_time = seconds_per_frame();
diff --git a/source/blender/pointcache/intern/writer.h b/source/blender/pointcache/intern/writer.h
index 3835f3f..8a62cf6 100644
--- a/source/blender/pointcache/intern/writer.h
+++ b/source/blender/pointcache/intern/writer.h
@@ -40,6 +40,7 @@ public:
virtual ~Writer();
void set_error_handler(ErrorHandler *handler);
+ bool valid() const;
uint32_t add_frame_sampling();
diff --git a/source/blender/pointcache/util/util_error_handler.cpp b/source/blender/pointcache/util/util_error_handler.cpp
index 4447a68..49918b1 100644
--- a/source/blender/pointcache/util/util_error_handler.cpp
+++ b/source/blender/pointcache/util/util_error_handler.cpp
@@ -26,10 +26,21 @@ namespace PTC {
ErrorHandler *ErrorHandler::m_default_handler = new StdErrorHandler(PTC_ERROR_INFO);
+ErrorHandler::ErrorHandler() :
+ m_max_level(PTC_ERROR_NONE)
+{
+}
+
ErrorHandler::~ErrorHandler()
{
}
+void ErrorHandler::set_error_level(PTCErrorLevel level)
+{
+ if (level > m_max_level)
+ m_max_level = level;
+}
+
void ErrorHandler::set_default_handler(ErrorHandler *handler)
{
if (m_default_handler)
diff --git a/source/blender/pointcache/util/util_error_handler.h b/source/blender/pointcache/util/util_error_handler.h
index 41e5765..b70e82d 100644
--- a/source/blender/pointcache/util/util_error_handler.h
+++ b/source/blender/pointcache/util/util_error_handler.h
@@ -38,15 +38,20 @@ namespace PTC {
class ErrorHandler
{
public:
+ ErrorHandler();
virtual ~ErrorHandler();
virtual void handle(PTCErrorLevel level, const char *message) = 0;
+ void set_error_level(PTCErrorLevel level);
+ PTCErrorLevel max_error_level() const { return m_max_level; }
static ErrorHandler *get_default_handler() { return m_default_handler; }
static void set_default_handler(ErrorHandler *handler);
static void clear_default_handler();
private:
+ PTCErrorLevel m_max_level;
+
static ErrorHandler *m_default_handler;
};
@@ -125,6 +130,7 @@ void handle_alembic_exception(T &handler, PTCErrorLevel level, const Alembic::Ut
const char *origin, *msg;
split_alembic_error_message(e.what(), &origin, &msg);
+ handler.set_error_level(level);
handler.handle(level, msg);
}
@@ -135,6 +141,7 @@ void handle_alembic_exception(T *handler, PTCErrorLevel level, const Alembic::Ut
const char *origin, *msg;
split_alembic_error_message(e.what(), &origin, &msg);
+ handler->set_error_level(level);
handler->handle(level, msg);
}
}
diff --git a/source/blender/pointcache/util/util_types.h b/source/blender/pointcache/util/util_types.h
index 790ce61..bf9c970 100644
--- a/source/blender/pointcache/util/util_types.h
+++ b/source/blender/pointcache/util/util_types.h
@@ -24,6 +24,7 @@ extern "C" {
#endif
typedef enum PTCErrorLevel {
+ PTC_ERROR_NONE = 0,
PTC_ERROR_INFO = 1,
PTC_ERROR_WARNING = 2,
PTC_ERROR_CRITICAL = 3,
More information about the Bf-blender-cvs
mailing list