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

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

#ifndef CT_STATIC_ARRAY_KERNEL_1
#define CT_STATIC_ARRAY_KERNEL_1 1
   
///------------------------------------------------------------------------
/// Global Context --------------------------------------------------------
///------------------------------------------------------------------------

#include "AT/Static_Array/Kernel.h"

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

concrete_template <
        concrete_instance class Item,
        Integer_constant lower,
        Integer_constant upper,
        /*!
            satisfies restriction
                lower <= upper
	!*/
	concrete_instance class Rep =
            Representation <Item*>
    >
class Static_Array_Kernel_1 :
    implements
	abstract_instance Static_Array_Kernel <Item, lower, upper>,
    encapsulates
	concrete_instance Rep
{
private:

    rep_field_name (Rep, 0, Item*, items);
    
    /*!
	convention
	    [self.items is a C++ array of Items which is
		 upper - lower + 1 long]
		 
	correspondence
	    self =
		{i: integer where (lower <= i <= upper)
		 ((i, self.items[i - lower]))}
    !*/

    local_procedure_body Initialize ()
    {
	self[items] = new Item[upper - lower + 1];
    }

    local_procedure_body Finalize ()
    {
	delete [] self[items];
    }

public:

    standard_concrete_operations (Static_Array_Kernel_1);

    function_body Item& operator [] (
	    preserves Integer i
	)
    {
	return (self[items])[To_int (i - lower)];
    }

    function_body Integer Lower_Bound ()
    {
	return lower;
    }

    function_body Integer Upper_Bound ()
    {
	return upper;
    }

};

#endif // CT_STATIC_ARRAY_KERNEL_1

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