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

//  /*-------------------------------------------------------------------*\
//  |   Concrete Instance : Sequence_Is_Equal_To_1
//  \*-------------------------------------------------------------------*/

#ifndef CT_SEQUENCE_IS_EQUAL_TO_1
#define CT_SEQUENCE_IS_EQUAL_TO_1 1

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

#include "AT/General/Is_Equal_To.h"
/*!
    #include "AT/Sequence/Kernel.h"
!*/

///------------------------------------------------------------------------
/// Interface -------------------------------------------------------------
///------------------------------------------------------------------------
    
concrete_template <
	concrete_instance class Item,
	/*!
	    implements
		abstract_instance Is_Equal_To <Item>
        !*/
	concrete_instance class Sequence_Base
	/*!
	    implements
		abstract_instance Sequence_Kernel <Item>
        !*/
    >
class Sequence_Is_Equal_To_1 :
    implements
	abstract_instance General_Is_Equal_To <Sequence_Base>,
    extends
	concrete_instance Sequence_Base
{
public:

    function_body Boolean Is_Equal_To (
	    preserves General_Is_Equal_To <Sequence_Base>& s
	)
    /*!
        decreases
	    |self|
    !*/
    {
	if (self.Length () != s.Length ())
	{
	    return false;
	}
	else if (self.Length () == 0)
	{
	    return true;
	}
	else if (not self[0].Is_Equal_To (s[0]))
	{
	    return false;
	}
	else
	{
	    object Item x1, x2;
	    self.Remove (0, x1);
	    s.Remove (0, x2);
	    object Boolean rest_are_equal = self.Is_Equal_To (s);
	    self.Add (0, x1);
	    s.Add (0, x2);
	    return rest_are_equal;
	}
    }
    
};

#endif // CT_SEQUENCE_IS_EQUAL_TO_1

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