Resolve/C++ Catalog
CT/Natural/Arithmetic_Plus_C.h
Copyright © 2010, Reusable Software Research Group, The Ohio State University

//  /*-------------------------------------------------------------------*\
//  |   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