// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// Copyright (c) Гергель В.П. 01.08.2000
//
// Динамические структуры данных - система N стеков
// наследование - распределение памяти по гипотезе
//   "сохранение локальных тенденций роста"

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "multist1.h"

TSuperMultiStack :: TSuperMultiStack () {
  for ( int i=0; i < StackNum; i++ )
    PrevCount[i] = 0;
}
		/*---------------------------------------------*/

void TSuperMultiStack :: SetStackRate ( double StackRate[] ) {
// оценка показателей роста стеков
  double SumRate = 0.0;
  for ( int i=0; i < StackNum; i++ ) {
    if ( pStack[i]->DataCount < PrevCount[i] ) StackRate[i] = 0;
    else StackRate[i] = pStack[i]->DataCount - PrevCount[i];
    SumRate += StackRate[i];
  }
  if ( SumRate > 0 )
    for ( int i=0; i < StackNum; i++ ) StackRate[i] /= SumRate;
}
		/*---------------------------------------------*/

void TSuperMultiStack :: SetStackLocation ( TElem *pStackMem[] ) {
// оценка новых значений для базовых адресов памяти стеков
// стратегия "сохранение локальных тенденций роста"
  SetStackRate(StackRate);
  pStackMem[0] = &Mem[0];
  for ( int i=1; i < StackNum; i++ )
    pStackMem[i] = pStackMem[i-1] + pStack[i-1]->DataCount
				  + int(StackRate[i-1]*FreeMemSize);
  pStackMem[StackNum] = pStack[StackNum]->pMem;
  for ( int i=0; i < StackNum; i++ )
    PrevCount[i] = pStack[i]->DataCount;
}
Хостинг от uCoz