// /*-------------------------------------------------------------------*\
// | Concrete Template : Queue_Sort_3
// \*-------------------------------------------------------------------*/
#ifndef CT_QUEUE_SORT_3
#define CT_QUEUE_SORT_3 1
///------------------------------------------------------------------------
/// Global Context --------------------------------------------------------
///------------------------------------------------------------------------
#include "AT/Queue/Sort.h"
/*!
#include "AT/General/Are_In_Order.h"
#include "AT/Queue/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 Queue_Base
/*!
implements
abstract_instance Queue_Kernel <Item>
!*/
>
class Queue_Sort_3 :
implements
abstract_instance Queue_Sort <Item>,
extends
concrete_instance Queue_Base
{
private:
local_procedure_body Partition (
consumes Queue_Sort_3& q,
preserves Item& p,
alters Queue_Sort_3& q1,
alters Queue_Sort_3& q2
)
/*!
requires
q1 = empty_string and
q2 = empty_string
ensures
(q1 * q2) is permutation of #q and
for all x: Item
where (x is in elements (q1))
(ARE_IN_ORDER (x, p)) and
for all x: Item
where (x is in elements (q2))
(not ARE_IN_ORDER (x, p))
!*/
{
//-------- for students to fill in --------
}
local_procedure_body Combine (
alters Queue_Sort_3& q,
consumes Item& p,
consumes Queue_Sort_3& q1,
consumes Queue_Sort_3& q2
)
/*!
requires
q = empty_string
ensures
q = #q1 * <#p> * #q2
!*/
{
//-------- for students to fill in --------
}
public:
procedure_body Sort ()
{
//-------- for students to fill in --------
}
};
#endif // CT_QUEUE_SORT_3
Last modified: Thu Jan 11 17:05:57 EST 2007