// /*-------------------------------------------------------------------*\
// | Concrete Template : Set_Unite_1
// \*-------------------------------------------------------------------*/
#ifndef CT_SET_UNITE_1
#define CT_SET_UNITE_1 1
///------------------------------------------------------------------------
/// Global Context --------------------------------------------------------
///------------------------------------------------------------------------
#include "AT/Set/Unite.h"
///------------------------------------------------------------------------
/// Interface -------------------------------------------------------------
///------------------------------------------------------------------------
concrete_template <
concrete_instance class Item,
concrete_instance class Set_Base
/*!
implements
abstract_instance Set_Kernel <Item>
!*/
>
class Set_Unite_1 :
implements
abstract_instance Set_Unite <Item>,
extends
concrete_instance Set_Base
{
public:
procedure_body Unite (
consumes Set_Unite <Item>& s
)
{
if (self.Size () < s.Size ())
{
self &= s;
}
while (s.Size () > 0)
/*!
alters self, s
maintains
self union s = #self union #s
decreases
|s|
!*/
{
object Item x;
s.Remove_Any (x);
if (not self.Is_Member (x))
{
self.Add (x);
}
}
}
};
#endif // CT_SET_UNITE_1
Last modified: Mon Apr 09 15:34:36 EDT 2007