// ННГУ, ВМК, Курс "Методы программирования-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; }