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,

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to