Electroneum
expect.h File Reference
#include <cassert>
#include <system_error>
#include <type_traits>
#include <utility>
#include "common/error.h"
Include dependency graph for expect.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  expect< T >
 
struct  detail::expect
 
class  expect< T >
 
class  expect< void >
 

Namespaces

 detail
 declaration and default definition for the functions used the API
 

Macros

#define ELECTRONEUM_PRECOND(...)
 If precondition fails, return ::error::kInvalidArgument in current scope. More...
 
#define ELECTRONEUM_CHECK(...)
 Check expect<void> and return errors in current scope. More...
 
#define ELECTRONEUM_UNWRAP(...)   ::detail::expect::unwrap( __VA_ARGS__ , nullptr, __FILE__ , __LINE__ )
 
#define ELECTRONEUM_THROW(code, msg)   ::detail::expect::throw_( code , msg , __FILE__ , __LINE__ )
 

Typedefs

template<bool C>
using detail::enable_if = typename std::enable_if< C >::type
 

Functions

expect< void > success () noexcept
 
template<typename T , typename U >
bool operator== (expect< T > const &lhs, expect< U > const &rhs) noexcept(noexcept(lhs.equal(rhs)))
 
template<typename T , typename U >
bool operator== (expect< T > const &lhs, U const &rhs) noexcept(noexcept(lhs.equal(rhs)))
 
template<typename T , typename U >
bool operator== (T const &lhs, expect< U > const &rhs) noexcept(noexcept(rhs.equal(lhs)))
 
template<typename T , typename U >
bool operator!= (expect< T > const &lhs, expect< U > const &rhs) noexcept(noexcept(lhs.equal(rhs)))
 
template<typename T , typename U >
bool operator!= (expect< T > const &lhs, U const &rhs) noexcept(noexcept(lhs.equal(rhs)))
 
template<typename T , typename U >
bool operator!= (T const &lhs, expect< U > const &rhs) noexcept(noexcept(rhs.equal(lhs)))
 

Macro Definition Documentation

◆ ELECTRONEUM_CHECK

#define ELECTRONEUM_CHECK (   ...)
Value:
do \
{ \
const ::expect<void> result = __VA_ARGS__ ; \
if (!result) \
return result.error(); \
} while (0)

Check expect<void> and return errors in current scope.

Definition at line 47 of file expect.h.

◆ ELECTRONEUM_PRECOND

#define ELECTRONEUM_PRECOND (   ...)
Value:
do \
{ \
if (!( __VA_ARGS__ )) \
return {::common_error::kInvalidArgument}; \
} while (0)

If precondition fails, return ::error::kInvalidArgument in current scope.

Definition at line 39 of file expect.h.

◆ ELECTRONEUM_THROW

#define ELECTRONEUM_THROW (   code,
  msg 
)    ::detail::expect::throw_( code , msg , __FILE__ , __LINE__ )

Definition at line 66 of file expect.h.

◆ ELECTRONEUM_UNWRAP

#define ELECTRONEUM_UNWRAP (   ...)    ::detail::expect::unwrap( __VA_ARGS__ , nullptr, __FILE__ , __LINE__ )

Get T from expect<T> by std::move as-if by function call. expect<void> returns nothing.

Exceptions
std::system_errorwith expect<T>error(), filename and line number when expect<T>::has_error() == true.

Definition at line 60 of file expect.h.

Function Documentation

◆ operator!=() [1/3]

template<typename T , typename U >
bool operator!= ( expect< T > const &  lhs,
expect< U > const &  rhs 
)
inlinenoexcept

Definition at line 422 of file expect.h.

423 {
424  return !lhs.equal(rhs);
425 }
bool equal(expect< U > const &rhs) const noexcept(noexcept(*std::declval< expect< T >>()== *rhs))
Definition: expect.h:314

◆ operator!=() [2/3]

template<typename T , typename U >
bool operator!= ( expect< T > const &  lhs,
U const &  rhs 
)
inlinenoexcept

Definition at line 429 of file expect.h.

430 {
431  return !lhs.equal(rhs);
432 }
bool equal(expect< U > const &rhs) const noexcept(noexcept(*std::declval< expect< T >>()== *rhs))
Definition: expect.h:314

◆ operator!=() [3/3]

template<typename T , typename U >
bool operator!= ( T const &  lhs,
expect< U > const &  rhs 
)
inlinenoexcept

Definition at line 436 of file expect.h.

437 {
438  return !rhs.equal(lhs);
439 }
bool equal(expect< U > const &rhs) const noexcept(noexcept(*std::declval< expect< T >>()== *rhs))
Definition: expect.h:314

◆ operator==() [1/3]

template<typename T , typename U >
bool operator== ( expect< T > const &  lhs,
expect< U > const &  rhs 
)
inlinenoexcept

Definition at line 401 of file expect.h.

402 {
403  return lhs.equal(rhs);
404 }
bool equal(expect< U > const &rhs) const noexcept(noexcept(*std::declval< expect< T >>()== *rhs))
Definition: expect.h:314

◆ operator==() [2/3]

template<typename T , typename U >
bool operator== ( expect< T > const &  lhs,
U const &  rhs 
)
inlinenoexcept

Definition at line 408 of file expect.h.

409 {
410  return lhs.equal(rhs);
411 }
bool equal(expect< U > const &rhs) const noexcept(noexcept(*std::declval< expect< T >>()== *rhs))
Definition: expect.h:314

◆ operator==() [3/3]

template<typename T , typename U >
bool operator== ( T const &  lhs,
expect< U > const &  rhs 
)
inlinenoexcept

Definition at line 415 of file expect.h.

416 {
417  return rhs.equal(lhs);
418 }
bool equal(expect< U > const &rhs) const noexcept(noexcept(*std::declval< expect< T >>()== *rhs))
Definition: expect.h:314

◆ success()

expect<void> success ( )
inlinenoexcept
Returns
An expect<void> object with !has_error().

Definition at line 397 of file expect.h.

397 { return expect<void>{}; }
Here is the caller graph for this function: