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

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

#ifndef CT_LIST_RETREAT_C
#define CT_LIST_RETREAT_C 1

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

/*!
    #include "AT/List/Retreat.h"
!*/

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

concrete_template <
	concrete_instance class Item,
	concrete_instance class List_Retreat_Base
	/*!
	    implements
		abstract_instance List_Retreat <Item>
	!*/
    >
class List_Retreat_C :
    checks
	concrete_instance List_Retreat_Base
{
public:
    
    procedure_body Remove_Right (
	    produces Item& x
	)
    {
	assert (self.Right_Length () > 0,
		"self.right /= empty_string");
	self.List_Retreat_Base::Remove_Right (x);
    }

    function_body Item& operator [] (
	    preserves Accessor_Position& current
	)	
    {
	assert (self.Right_Length () > 0,
		"self.right /= empty_string");
	return self.List_Retreat_Base::operator [] (current);
    }

    procedure_body Advance ()
    {
	assert (self.Right_Length () > 0,
		"self.right /= empty_string");
	self.List_Retreat_Base::Advance ();
    }  

    procedure_body Retreat ()
    {
	assert (self.Left_Length () > 0,
		"self.left /= empty_string");
	self.List_Retreat_Base::Retreat ();
    }  

};

//----------------------------------------------------------------------

#endif // CT_LIST_RETREAT_C

Last modified: Thu Jan 11 17:05:57 EST 2007