// /*-------------------------------------------------------------------*\
// | Concrete Template : Queue_Kernel_2
// \*-------------------------------------------------------------------*/
#ifndef CT_QUEUE_KERNEL_2
#define CT_QUEUE_KERNEL_2 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_2 :
implements
abstract_instance Queue_Kernel <Item>,
encapsulates
concrete_instance Rep
{
private:
rep_field_name (Rep, 0, List_Of_Item, item_list);
/*!
convention
self.item_list.left = empty_string
correspondence
self = 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);
self[item_list].Move_To_Start ();
}
procedure_body Dequeue (
produces Item& x
)
{
self[item_list].Remove_Right (x);
}
function_body Item& operator [] (
preserves Accessor_Position& current
)
{
return self[item_list][current];
}
function_body Integer Length ()
{
return self[item_list].Right_Length ();
}
};
#endif // CT_QUEUE_KERNEL_2
Last modified: Thu Jan 11 17:05:57 EST 2007