// /*-------------------------------------------------------------------*\
// | Concrete Template : Natural_Arithmetic_Plus_C
// \*-------------------------------------------------------------------*/
#ifndef CT_NATURAL_ARITHMETIC_PLUS_C
#define CT_NATURAL_ARITHMETIC_PLUS_C 1
///------------------------------------------------------------------------
/// Global Context --------------------------------------------------------
///------------------------------------------------------------------------
/*!
#include "AI/Natural/Arithmetic.h"
!*/
///------------------------------------------------------------------------
/// Interface -------------------------------------------------------------
///------------------------------------------------------------------------
concrete_template <
concrete_instance class Natural_Arithmetic_Base
/*!
implements
abstract_instance Natural_Arithmetic <Natural_Kernel>
!*/
>
class Natural_Arithmetic_Plus_C :
checks
concrete_instance Natural_Arithmetic_Base
{
public:
procedure_body Convert_From_Integer (
preserves Integer i
)
{
assert (i >= 0,
"i >= 0");
self.Natural_Arithmetic_Base::Convert_From_Integer (i);
}
procedure_body Decrement ()
{
assert (self.Discrete_Log () > 0,
"self > 0");
self.Natural_Arithmetic_Base::Decrement ();
}
procedure_body Subtract (
preserves Natural_Arithmetic_Plus_C& n
)
{
assert (self.Compare (n) >= 0,
"self >= n");
self.Natural_Arithmetic_Base::Subtract (n);
}
procedure_body Divide (
preserves Natural_Arithmetic_Plus_C& n,
produces Natural_Arithmetic_Plus_C& rem
)
{
assert (n.Discrete_Log () > 0,
"n > 0");
self.Natural_Arithmetic_Base::Divide (n, rem);
}
};
#endif // CT_NATURAL_ARITHMETIC_PLUS_C
Last modified: Thu Jan 11 17:05:57 EST 2007