[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