// /*-------------------------------------------------------------------*\
// | Concrete Template : Queue_Kernel_3
// \*-------------------------------------------------------------------*/
#ifndef CT_QUEUE_KERNEL_3
#define CT_QUEUE_KERNEL_3 1
///------------------------------------------------------------------------
/// Global Context --------------------------------------------------------
///------------------------------------------------------------------------
#include "AT/Queue/Kernel.h"
#include "CT/List/Kernel_1a.h"
///---------------------------------------------------------------------
/// Interface ----------------------------------------------------------
///---------------------------------------------------------------------
concrete_template <
concrete_instance class Item,
concrete_instance class List_Of_Item =
List_Kernel_1a <Item>,
concrete_instance class Rep =
Representation <List_Of_Item>
>
class Queue_Kernel_3 :
implements
abstract_instance Queue_Kernel <Item>,
encapsulates
concrete_instance Rep
{
private:
rep_field_name (Rep, 0, List_Of_Item, item_list);
/*!
correspondence
self = self.item_list.left * self.item_list.right
!*/
public:
standard_concrete_operations (Queue_Kernel_2);
procedure_body Enqueue (
consumes Item& x
)
{
self[item_list].Move_To_Finish ();
self[item_list].Add_Right (x);
}
procedure_body Dequeue (
produces Item& x
)
{
self[item_list].Move_To_Start ();
self[item_list].Remove_Right (x);
}
function_body Item& operator [] (
preserves Accessor_Position& current
)
{
self[item_list].Move_To_Start ();
return self[item_list][current];
}
function_body Integer Length ()
{
return self[item_list].Left_Length () +
self[item_list].Right_Length ();
}
};
#endif // CT_QUEUE_KERNEL_3
Last modified: Thu Jan 11 17:05:57 EST 2007