|  | @@ -0,0 +1,84 @@
 | 
	
		
			
				|  |  | +#ifndef __SAFE_LIST__
 | 
	
		
			
				|  |  | +#define __SAFE_LIST__
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#include <list>
 | 
	
		
			
				|  |  | +#include <locale.h>
 | 
	
		
			
				|  |  | +#include "CritSection.h"
 | 
	
		
			
				|  |  | +class CDatabase;
 | 
	
		
			
				|  |  | +using namespace std;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +template <class _Ty,class _Ax = allocator<_Ty>>
 | 
	
		
			
				|  |  | +class SafeList: public std::list<_Ty, _Ax>
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +public:
 | 
	
		
			
				|  |  | +	ThreadSection _critSection;
 | 
	
		
			
				|  |  | +	void _push_back(const _Ty& _Val)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		push_back(_Val);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	void _push_front(const _Ty& _Val)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		push_front(_Val);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	void _pop_front()
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		pop_front();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CDatabase* _pop_front_()
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		CDatabase* it = front();
 | 
	
		
			
				|  |  | +		pop_front();
 | 
	
		
			
				|  |  | +		return it;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	void _pop_back()
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		pop_back();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	void _remove(const _Ty& _Val_arg)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		remove(_Val_arg);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	reference _front()
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		return (*begin());
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	const_reference _front() const
 | 
	
		
			
				|  |  | +	{	
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		return (*begin());
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	reference _back()
 | 
	
		
			
				|  |  | +	{	
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		return (*(--end()));
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	const_reference _back() const
 | 
	
		
			
				|  |  | +	{	
 | 
	
		
			
				|  |  | +		AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		return (*(--end()));
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	size_type _size()
 | 
	
		
			
				|  |  | +	{	
 | 
	
		
			
				|  |  | +		//AutoThreadSection aSection(&_critSection);
 | 
	
		
			
				|  |  | +		return size();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#endif // __SAFE_LIST__
 |