- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
template<typename _Tp>
pair<_Tp*, ptrdiff_t>
get_temporary_buffer(ptrdiff_t __len)
{
const ptrdiff_t __max =
__gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
if (__len > __max)
__len = __max;
while (__len > 0)
{
_Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
std::nothrow));
if (__tmp != 0)
return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
__len /= 2; // !?!?!?!?!?!?!?!?
}
return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
}
template<typename _Tp>
inline void
return_temporary_buffer(_Tp* __p)
{ ::operator delete(__p, std::nothrow); }
TarasB 02.09.2011 08:52 # +2
guest 02.09.2011 11:09 # +1
guest 02.09.2011 11:46 # +7
get_tempoprary_buffer возвращает кусок памяти размером, не превышающим запрошенный. Смысл в том, что вызывающему эту функцию в идеале нужен буфер размера N, но подойдет и буфер поменьше. К примеру, читаем данные из сокета.
return_temporary_buffer этот буфер освобождает.
Не говно. Просто не слишком полезная функциональность.
guest8 09.04.2019 11:26 # −999
3oJloTou_xyeLL 24.08.2021 21:16 # 0