// /*-----------------------------------------------------------------*\
// | Concrete Template : Bag_Kernel_1
// \*-----------------------------------------------------------------*/
#ifndef CT_BAG_KERNEL_1
#define CT_BAG_KERNEL_1 1
///---------------------------------------------------------------------
/// Global Context -----------------------------------------------------
///---------------------------------------------------------------------
#include "AT/Bag/Kernel.h"
#include "CT/Queue/Kernel_1a.h"
///---------------------------------------------------------------------
/// Interface ----------------------------------------------------------
///---------------------------------------------------------------------
concrete_template <
concrete_instance class Item,
concrete_instance class Queue_Of_Item =
Queue_Kernel_1a <Item>,
concrete_instance class Rep =
Representation < Queue_Of_Item>
>
class Bag_Kernel_1 :
implements
abstract_instance Bag_Kernel <Item>,
encapsulates
concrete_instance Rep
{
private:
rep_field_name (Rep, 0, Queue_Of_Item, items);
/*!
correspondence
for all x: Item
(occurs_count (self, x) = occurs_count (self.items, x))
!*/
public:
standard_concrete_operations (Bag_Kernel_1);
procedure_body Add (
consumes Item& x
)
{
self[items].Enqueue (x);
}
procedure_body Remove_Any (
produces Item& x
)
{
self[items].Dequeue (x);
}
function_body Integer Size ()
{
return self[items].Length ();
}
};
//----------------------------------------------------------------------
#endif // CT_BAG_KERNEL_1
Last modified: Thu Jan 11 17:05:57 EST 2007