
#ifndef DKUTIL_SCOPED_ARRAY_EX_HPP
#define DKUTIL_SCOPED_ARRAY_EX_HPP

#include <dkutil/macro.hpp>
#include <dkutil/boost/scoped_array.hpp>


namespace dkutil{

/**
boost::scoped_arrayにbyte単位のサイズとTの個数を記録できるできるようにしたクラスです
*/
template<class T>
class scoped_array_ex : public boost::scoped_array<T>{
public:
	typedef scoped_array_ex<T> self_type;
	typedef boost::scoped_array<T> base_type;
	typedef T element_type;
private:
	size_t msize;
	size_t mnum;
public:
	scoped_array_ex(){
		msize = 0;
		mnum = 0;
	}
	scoped_array_ex(size_t num){
		msize = 0;
		mnum = 0;
		reset(num);
	}
	///Tをnum個確保します。
	void reset(size_t num){
		base_type::reset(new T[num]);
		msize = sizeof(T) * num;
		mnum = num;
	}
	///保持しているメモリを開放します。
	void clear(){
		base_type::reset();
		msize = 0;
		mnum = 0;
	}
	///保持しているメモリのbyte単位のサイズを返します。
	size_t size()const{
		return msize;
	}
	///Tの個数を返します。
	size_t num()const{
		return mnum;
	}
};

}//end of dkutil namespace



#endif