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

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