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

//  /*-------------------------------------------------------------------*\
//  |   Concrete Template : Queue_Concatenate_1
//  \*-------------------------------------------------------------------*/

#ifndef CT_QUEUE_CONCATENATE_1
#define CT_QUEUE_CONCATENATE_1 1

///------------------------------------------------------------------------
/// Global Context --------------------------------------------------------
///------------------------------------------------------------------------

#include "AT/Queue/Concatenate.h"
/*!
    #include "AT/Queue/Kernel.h"
!*/

///------------------------------------------------------------------------
/// Interface -------------------------------------------------------------
///------------------------------------------------------------------------

concrete_template <
	concrete_instance class Item,
	concrete_instance class Queue_Base
	/*!
	    implements
		abstract_instance Queue_Kernel <Item>
	!*/
    >
class Queue_Concatenate_1 :
    extends
	concrete_instance Queue_Base,
    implements
	abstract_instance Queue_Concatenate <Item>
{
public:
    
    procedure_body Concatenate (
	    consumes Queue_Concatenate <Item>& q
	)
    {
	while (q.Length () > 0)
	/*!
	    alters self, q
	    maintains
		self * q = #self * #q
	    decreases
	        |q|
	!*/
	{
	    object catalyst Item x;

	    q.Dequeue (x);
	    self.Enqueue (x);
	}
    }

};

#endif // CT_QUEUE_CONCATENATE_1

Last modified: Thu Jan 11 17:05:57 EST 2007