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