3,6c3,20
< 
< #include "FssimApp.h"
< 
< namespace tsb
---
> 
> #include <map>
> #include <list>
> #include <iostream>
> 
> #include "FssimApp.h"
> #include "AUStruct.h"
> #include "GroupStruct.h"
> #include "TransferStruct.h"
> #include "ZoneStruct.h"
> #include "TimberClassStruct.h"
> 
> #include "DuplicateDataException.h"
> 
> using namespace std;
> 
> 
> namespace tsb
8,10c22,24
<     void revert(int period);
<     void transfer(int period);
< }
---
>     void revert();
>     void transfer();
>     TransferStruct* do_active_transfer(list<GroupStruct*>& groupList, TransferStruct* activeTransfer);
11a26,35
>     inline void revert()
>     {
>         // timber_class type reversions
>         FssimApp* pApp = FssimApp::getApp();
> 
>         typedef vector<ZoneStruct*>::iterator ZI;
> 
> #ifdef _TSB_TRANSFER_DEBUG
>         int zoneCounter = 0;
>         cout << endl << "revert: size of zone list = " << pApp->m_zoneList.size() << endl;
12a37,121
> 
>         for (ZI zoneIter = pApp->m_zoneList.begin(); zoneIter != pApp->m_zoneList.end(); ++zoneIter)
>         {
>             typedef vector<AUStruct*>::iterator AI;
>             vector<AUStruct*>& auList = (*zoneIter)->aulist;
> 
> #ifdef _TSB_TRANSFER_DEBUG
>             int auCounter = 0;
>             cout << endl << "processing zone # " << ++zoneCounter << endl;
>             cout << "revert: size of au list = " << (*zoneIter)->aulist.size() << endl;
> #endif
> 
>             for (AI auIter = auList.begin(); auIter != auList.end(); ++auIter)
>             {
>                 typedef multimap<int, TimberClassStruct*>::iterator CI;
>                 multimap<int, TimberClassStruct*>& timberClassList = (*auIter)->classlist;
> 
> #ifdef _TSB_TRANSFER_DEBUG
>                 int classCounter = 0;
>                 cout << endl << "processing au # " << ++auCounter << endl;
>                 cout << "revert: size of class list = " << timberClassList.size() << endl;
> #endif
> 
>                 for (CI classIter = timberClassList.begin(); classIter != timberClassList.end(); ++classIter)
>                 {
>                     TimberClassStruct* pCurrentTimberClass = classIter->second;
> 
> #ifdef _TSB_TRANSFER_DEBUG
>                     ++classCounter;
>                     cout << "processing class # " << classCounter << endl;
>                     cout << endl << "revert: age: " << pCurrentTimberClass->age << endl;
> #endif
> 
>                     // should be 0.0 for double, but was 0.0f in v4.0.x
>                     //pCurrentTimberClass->MerchArea = 0.0;
>                     pCurrentTimberClass->MerchArea = 0.0f;
> 
> #ifdef _TSB_MERCHAREA_DEBUG
>                     cout << "MerchArea set to zero: " << pCurrentTimberClass->MerchArea << endl;
> #endif
> 
>                     pCurrentTimberClass->transferred = false;
>                     if ((pCurrentTimberClass->class_type == GroupDefStruct::DEFERRED) ||
>                         (pCurrentTimberClass->class_type == GroupDefStruct::NONCONTRIBUTING))
>                     {
>                         if (pCurrentTimberClass->age + pApp->m_periodLength[pApp->m_currentPeriod] >= pCurrentTimberClass->reversion_age)
>                         {
>                             pCurrentTimberClass->class_type = GroupDefStruct::OPERABLE;
>                         }
>                     }
> 
>                 }
> 
>             }
> 
>         }
>     }
> 
>     inline TransferStruct* do_active_transfer(list<GroupStruct*>& groupList, TransferStruct* activeTransfer)
>     {
>         FssimApp* pApp = FssimApp::getApp();
> 
>         typedef list<GroupStruct*>::iterator GI;
>         for (GI groupIter = groupList.begin(); //!groupList.empty() &&
>                 groupIter != groupList.end(); ++groupIter)
>         {
>             vector<TransferStruct*>::iterator transferIter = (*groupIter)->transferlist.begin();
>             while (transferIter != (*groupIter)->transferlist.end())
>             {
>                 if ((pApp->m_currentPeriod >= (*transferIter)->start_period) && (pApp->m_currentPeriod <= (*transferIter)->end_period))
>                 {
>                     if (activeTransfer != 0)
>                     {
>                         throw DuplicateDataException((*groupIter)->label, "Multiple transfer records for elements of group");
>                     }
>                     activeTransfer = (*transferIter);
>                 }
>                 transferIter++;
>             }
>         }
>         return activeTransfer;
>     }
> }
> 
> #endif
