#include "precomp.h" #include "fsdiag.h" DEBUG_FILEZONE(ZONE_T120_MCSNC); /* * randchnl.cpp * * Copyright (c) 1995 by DataBeam Corporation, Lexington, KY * * Abstract: * This is the implementation file for the RandomChannelGenerator class, * which inherits from the RandomNumberGenerator class. On instantiation, * instances of this class will internally generate a random number which * falls within the allowable range of dynamic channels values. Channel * assignments are then generated by incrementing this value each time a * new assignment is requested. Once the maximum allowable value has been * assigned, the next value to be generated "wraps around" to the minimum * allowable value. * * Obviously, this class does not generate completely random channel * values for each request. With a completely random generator, it is * possible to delete a channel in MCS, and then have the random number * generator assign the same value as the deleted channel before all * components of the system even know that the channel was deleted to * start with, thus causing erratic behavior in the system. In this * class, no channel can be reassigned until all other possible channels * have been assigned. * * This class can be modifed in the future to incorporate additional * "randomness" into the algorithm and still not reassign any channel * numbers before all other possible values are used. This, however, * would be at the expense of performance and/or memory resources. * * Caveats: * None. * * Author: * Alan D. May */ #include "randchnl.h" /* * These macros define the mimimum and maximum allowable dynamic channel * values. */ #define MINIMUM_DYNAMIC_CHANNEL 1001 #define MAXIMUM_DYNAMIC_CHANNEL 65535 /* * RandomChannelGenerator () * * Public * * Functional Description: * This version of the constructor is used to create a random channel * generator object that has been automatically seeded with the current * time. */ RandomChannelGenerator::RandomChannelGenerator() { Current_Channel = (GetTickCount() % (MAXIMUM_DYNAMIC_CHANNEL + 1 - MINIMUM_DYNAMIC_CHANNEL)) + MINIMUM_DYNAMIC_CHANNEL; } /* * ~RandomChannelGenerator () * * Public * * Functional Description: * This is the destructor for the RandomChannelGenerator class. */ RandomChannelGenerator::~RandomChannelGenerator () { } /* * GetRandomChannel () * * Public * * Functional Description: * This method returns a valid dynamic channel number. */ RandomValue RandomChannelGenerator::GetRandomChannel (Void) { /* * Increment the current channel value. */ ++Current_Channel; /* * Determine if the current channel value needs to wrap around. */ if (Current_Channel > MAXIMUM_DYNAMIC_CHANNEL) { Current_Channel = MINIMUM_DYNAMIC_CHANNEL; } /* * Return the current channel value. */ return (Current_Channel); }