Mercurial > hg > octave-image
changeset 907:5e256614c376
Make more use of exceptions and don't set error_state ourselves.
* connectivity.cc, connectivity.h: define new invalid_conversion exception
class so we don't have to set and reset error_state ourselves. This was
causing weird bugs where some errors were printed but could not caught in the
Octave interpreter.
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Thu, 30 Oct 2014 22:10:00 +0000 |
parents | 475a5a2a08cb |
children | f53cc3aaa88e |
files | src/connectivity.cc src/connectivity.h |
diffstat | 2 files changed, 19 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/connectivity.cc +++ b/src/connectivity.cc @@ -26,23 +26,19 @@ connectivity::connectivity (const octave_value& val) { try + {ctor (double_value (val));} + catch (invalid_conversion& e) { - const double conn = double_value (val); - if (error_state) - throw invalid_connectivity ("must be in [4 6 8 18 26]"); - ctor (conn); - } - catch (invalid_connectivity& e) - { - const boolNDArray mask = bool_array_value (val); - if (error_state) - throw invalid_connectivity ("must be logical or in [4 6 8 18 26]"); - ctor (mask); + try + {ctor (bool_array_value (val));} + catch (invalid_connectivity& e) + {throw;} // so it does not get caught by the parent invalid_conversion + catch (invalid_conversion& e) + {throw invalid_connectivity ("must be logical or in [4 6 8 18 26]");} } return; } - connectivity::connectivity (const boolNDArray& mask) { ctor (mask); @@ -217,24 +213,22 @@ double connectivity::double_value (const octave_value& val) { - error_state = 0; const double conn = val.double_value (); // Check is_scalar_type because the warning Octave:array-to-scalar // is off by default and we will get the first element only. if (error_state || ! val.is_scalar_type ()) - error_state = 1; + throw invalid_conversion ("no conversion to double value"); return conn; } boolNDArray connectivity::bool_array_value (const octave_value& val) { - error_state = 0; const boolNDArray mask = val.bool_array_value (); // bool_array_value converts anything other than 0 to true, which will // then validate as conn array, hence any_element_not_one_or_zero() if (val.array_value ().any_element_not_one_or_zero ()) - error_state = 1; + throw invalid_conversion ("no conversion to bool array value"); return mask; }
--- a/src/connectivity.h +++ b/src/connectivity.h @@ -54,11 +54,18 @@ static boolNDArray bool_array_value (const octave_value& val); }; - class invalid_connectivity : public std::invalid_argument + class invalid_conversion : public std::invalid_argument + { + public: + invalid_conversion (const std::string& what_arg) + : std::invalid_argument (what_arg) { } + }; + + class invalid_connectivity : public octave::image::invalid_conversion { public: invalid_connectivity (const std::string& what_arg) - : std::invalid_argument (what_arg) { } + : octave::image::invalid_conversion (what_arg) { } }; } }