Definition of ::DBC1<..>::operator()(..).

Supporting Design by Contract in C++
by David Maley and Ivor Spence
Listing 3. Definition of ::DBC1<..>::operator()(..).


template <typename Object, typename ReturnType,
     typename Formal1>
ReturnType DBC1<Object, ReturnType, Formal1>::operator()(const Formal1& t1)
  {
    if (!_object->invariant())
      throw Object(*_object);
    if (!pre(t1))
      preFailure();
    _old = new Object(*_object);
    ReturnType result=(_mutableObject->*_body)(t1);
    if (!post(result, t1))
      postFailure();
    if (!_object->invariant())
      throw Object(*_object);
    return result;
  }

About the Authors

David Maley is with St. Mary's University College, Belfast. He can be contacted at [email protected].

Ivor Spence is with Queen's University of Belfast. He can be contacted at [email protected].