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

//  /*-------------------------------------------------------------------*\
//  |   Concrete Template : Array_Are_In_Order_At_C
//  \*-------------------------------------------------------------------*/

#ifndef CT_ARRAY_ARE_IN_ORDER_AT_C
#define CT_ARRAY_ARE_IN_ORDER_AT_C 1

///------------------------------------------------------------------------
/// Global Context --------------------------------------------------------
///------------------------------------------------------------------------

/*!
    #include "AT/General/Are_In_Order.h"
    #include "AT/Array/Are_In_Order_At.h"
    #include "AT/Array/Kernel.h"
!*/

///------------------------------------------------------------------------
/// Interface -------------------------------------------------------------
///------------------------------------------------------------------------

concrete_template <
	concrete_instance class Item,
        /*!
        concrete_instance utility_class Item_Are_In_Order,
            implements
                abstract_instance General_Are_In_Order <Item>
        !*/
        concrete_instance class Array_Are_In_Order_At_Base
	/*!
	    implements
		abstract_instance Array_Are_In_Order_At <Item,
		        Item_Are_In_Order>,
	    checks
	        abstract_instance Array_Kernel <Item>
	!*/
    >
class Array_Are_In_Order_At_C :
    checks
	concrete_instance Array_Are_In_Order_At_Base
{
public:
    
    function_body Boolean Are_In_Order_At (
	    preserves Integer i,
	    preserves Integer j
	)
    {
	assert (self.Lower_Bound () <= i,
		"self.lb <= i");
	assert (i <= self.Upper_Bound (),
		"i <= self.ub");
	assert (self.Lower_Bound () <= j,
		"self.lb <= j");
	assert (j <= self.Upper_Bound (),
		"j <= self.ub");
    
	return self.Array_Are_In_Order_At_Base::Are_In_Order_At (i, j);
    }

};

#endif // CT_ARRAY_ARE_IN_ORDER_AT_C

Last modified: Wed Nov 04 19:59:02 EST 2009