New C++ API: Add documentation/guidelines for API guards. (#3178)
authorAina Niemetz <aina.niemetz@gmail.com>
Sun, 11 Aug 2019 21:08:30 +0000 (14:08 -0700)
committerGitHub <noreply@github.com>
Sun, 11 Aug 2019 21:08:30 +0000 (14:08 -0700)
src/api/cvc4cpp.cpp

index 942235e9c0c921b4a7d52a1a1630b3218b614130..1538d35589f585c57c36f9b299c39849bb41c665 100644 (file)
  ** \brief The CVC4 C++ API.
  **
  ** The CVC4 C++ API.
+ **
+ ** A brief note on how to guard API functions:
+ **
+ ** In general, we think of API guards as a fence -- they are supposed to make
+ ** sure that no invalid arguments get passed into internal realms of CVC4.
+ ** Thus we always want to catch such cases on the API level (and can then
+ ** assert internally that no invalid argument is passed in).
+ **
+ ** The only special case is when we use 3rd party back-ends we have no control
+ ** over, and which throw (invalid_argument) exceptions anyways. In this case,
+ ** we do not replicate argument checks but delegate them to the back-end,
+ ** catch thrown exceptions, and raise a CVC4ApiException.
+ **
+ ** Our Integer implementation, e.g., is such a special case since we support
+ ** two different back end implementations (GMP, CLN). Be aware that they do
+ ** not fully agree on what is (in)valid input, which requires extra checks for
+ ** consistent behavior (see Solver::mkRealFromStrHelper for an example).
  **/
 
 #include "api/cvc4cpp.h"