iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ParameterExceptions.H
Go to the documentation of this file.
1 /*! @file
2  @author Laurent Itti
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 
36 #ifndef INCLUDE_NRT_CORE_MODEL_PARAMETEREXCEPTIONS_H
37 #define INCLUDE_NRT_CORE_MODEL_PARAMETEREXCEPTIONS_H
38 
40 
41 namespace nrt
42 {
43  class ParameterBase;
44 
45  namespace exception
46  {
47  // ######################################################################
48  //! Exception that Parameter callbacks should throw if they reject the candidate new value
49  /*! \ingroup parameter */
50  class BadParameter : public Exception
51  {
52  public:
53  //! Constructor
54  /*! Provide here an explanation of why your callback is rejecting the candidate new parameter value. No need to
55  explain which value, what callback, which parameter, etc as all this will be added automatically by a
56  wrapper around your callback, which will rethrow your BadParameter as a more verbose ParameterException for
57  end users to catch. */
58  BadParameter(std::string const & explanation_) throw();
59 
60  //! Destructor
61  virtual ~BadParameter() throw();
62 
63  private:
64  std::string const explanation;
65  };
66 
67  // ######################################################################
68  //! Exception that people should catch when they try to set a Parameter value
69  /*! Setting a value may fail for three basic reasons: (1) the value is syntactically malformed (e.g., when trying to
70  set it from a string that contains garbage), (2) a Parameter callback has examined the value and did not like it
71  for whichever reason. Instead of requiring one to catch any of these errors when attempting to set a Parameter
72  value, we expose them all through ParameterException. If a value is syntactically malformed or a parameter
73  callback throws BadParameter, this will be automatically be wrapped into a ParameterException.
74 
75  \ingroup parameter */
77  {
78  public:
79  //! Type of error
80  enum ErrorType { MalformedValue, ValueRejectedByCallback, BadValueType, InvalidValue, InvalidDefaultValue,
81  MalformedName, NameNotFound, NotInitialized, NoOnlineChanges, MultipleMatches };
82 
83  //! Constructor
84  ParameterException(ErrorType errt, ParameterBase const * param, std::string const & explanation) throw();
85 
86  //! Destructor
87  virtual ~ParameterException() throw();
88 
89  ErrorType error_type;
90 
91  public:
92  ParameterException(); // default constructor used only by serialization
93 
94  //! Serialization
95  template <class Archive> void serialize(Archive & ar)
96  { ar(cereal::base_class<SerializableException>(this), error_type); }
97  };
98 
99  } // namespace exception
100 } // namespace nrt
101 
102 #endif // INCLUDE_NRT_CORE_MODEL_PARAMETEREXCEPTIONS_H
103