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

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

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

#include "AI/Random/Kernel.h"

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

concrete_template <
	concrete_instance class Rep =
            Representation <Integer>
    >
class Random_Kernel_1 :
    implements
	abstract_instance Random_Kernel,
    encapsulates
	concrete_instance Rep
{
private:

    rep_field_name (Rep, 0, Integer, value);

    /*!
	math definition LIMIT: integer is
	    10000

	math definition NEXT (
		n: RANDOM_MODEL
	    ): RANDOM_MODEL is
	    (101 * n + 2113) mod LIMIT

	convention
	    0 <= self[value] < LIMIT
	correspondence
	    self = self[value]
    !*/

    enumeration
    {
	limit = 10000,
	multiplier = 101,
	addend = 2113
    };

public:

    standard_concrete_operations (Random_Kernel_1);

    procedure_body Set_Value (
	    preserves Integer n
	)
    {
	self[value] = n mod limit;
    }

    function_body Integer Value ()
    {
	return self[value];
    }

    procedure_body Generate_Next ()
    {
	self[value] = (multiplier * self[value] + addend) mod limit;
    }  

    function_body Integer Limit ()
    {
	return limit;
    }

};

#endif // CT_RANDOM_KERNEL_1

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