Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#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); }
|