00001 // BufferfstreamManager.cpp 00002 ////////////////////////////////////////////////////////////////////// 00003 // (c) Copyright 2002 Brown Deer Technology, LLC. 00004 // All rights reserved. 00005 ////////////////////////////////////////////////////////////////////// 00006 00007 #ifdef USE_STD 00008 #include <iostream> 00009 using namespace std; 00010 #else 00011 #include <iostream.h> 00012 #endif 00013 00014 #include "utility.h" 00015 #include "BufferfstreamManager.h" 00016 00017 BufferfstreamManager* BufferfstreamManager::_ptinstance = 0; 00018 00019 bool* BufferfstreamManager::_freetable=new bool[BUFFERFSTREAMMANAGER_SIZEMAX]; 00020 00021 int BufferfstreamManager::_begin = 1; 00022 00023 BufferfstreamManager* BufferfstreamManager::Instance() 00024 { 00025 if ( _ptinstance == 0 ) _ptinstance = new BufferfstreamManager; 00026 return _ptinstance; 00027 } 00028 00029 void BufferfstreamManager::clear() 00030 { 00031 _begin = 1; 00032 _freetable[0] = false; 00033 for(int i = 1; i < BUFFERFSTREAMMANAGER_SIZEMAX; ++i) _freetable[i] = true; 00034 } 00035 00036 int BufferfstreamManager::get_handle() 00037 { 00038 int handle = _begin; 00039 while ( ( !_freetable[handle] ) 00040 && ( handle++ < BUFFERFSTREAMMANAGER_SIZEMAX ) ) {} 00041 _freetable[handle] = false; 00042 _begin = handle; 00043 return handle; 00044 } 00045 00046 void BufferfstreamManager::free_handle( int handle ) 00047 { 00048 _freetable[handle] = true; 00049 if ( handle < _begin ) _begin = handle; 00050 } 00051 00052 BufferfstreamManager::BufferfstreamManager() 00053 { 00054 _freetable[0] = false; 00055 for(int i = 1; i < BUFFERFSTREAMMANAGER_SIZEMAX; ++i) _freetable[i] = true; 00056 } 00057 00058 BufferfstreamManager::BufferfstreamManager( const BufferfstreamManager& rhs ) 00059 { 00060 _begin = rhs._begin; 00061 for(int i = 0; i < BUFFERFSTREAMMANAGER_SIZEMAX; ++i) { 00062 _freetable[i] = rhs._freetable[i]; 00063 } 00064 } 00065 00066 BufferfstreamManager::~BufferfstreamManager() 00067 { 00068 if ( _freetable != 0 ) { delete [] _freetable; _freetable = 0; } 00069 if ( _ptinstance != 0 ) { delete _ptinstance; _ptinstance = 0; } 00070 } 00071 00072 BufferfstreamManager& BufferfstreamManager::operator = ( 00073 const BufferfstreamManager& rhs 00074 ) 00075 { 00076 _begin = rhs._begin; 00077 for(int i = 0; i < BUFFERFSTREAMMANAGER_SIZEMAX; ++i) { 00078 _freetable[i] = rhs._freetable[i]; 00079 } 00080 return *this; 00081 } 00082
1.3.6