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

//  /*-------------------------------------------------------------------*\
//  |   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