1 /* 2 * 3 * 4 * Copyright (c) 1994 5 * Hewlett-Packard Company 6 * 7 * Copyright (c) 1996,1997 8 * Silicon Graphics Computer Systems, Inc. 9 * 10 * Copyright (c) 1997 11 * Moscow Center for SPARC Technology 12 * 13 * Copyright (c) 1999 14 * Boris Fomitchev 15 * 16 * This material is provided "as is", with absolutely no warranty expressed 17 * or implied. Any use is at your own risk. 18 * 19 * Permission to use or copy this software for any purpose is hereby granted 20 * without fee, provided the above notices are retained on all copies. 21 * Permission to modify the code and to distribute modified code is granted, 22 * provided the above notices are retained, and a notice that the code was 23 * modified is included with the above copyright notice. 24 * 25 */ 26 #ifndef _STLP_TEMPBUF_C 27 #define _STLP_TEMPBUF_C 28 29 #ifndef _STLP_INTERNAL_TEMPBUF_H 30 # include <stl/_tempbuf.h> 31 #endif 32 33 _STLP_BEGIN_NAMESPACE 34 35 template <class _Tp> 36 pair<_Tp*, ptrdiff_t> _STLP_CALL 37 __get_temporary_buffer(ptrdiff_t __len, _Tp*) 38 { 39 if (__len > ptrdiff_t(INT_MAX / sizeof(_Tp))) 40 __len = INT_MAX / sizeof(_Tp); 41 42 while (__len > 0) { 43 _Tp* __tmp = (_Tp*) malloc((size_t)__len * sizeof(_Tp)); 44 if (__tmp != 0) 45 return pair<_Tp*, ptrdiff_t>(__tmp, __len); 46 __len /= 2; 47 } 48 49 return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0); 50 } 51 _STLP_END_NAMESPACE 52 53 #endif /* _STLP_TEMPBUF_C */ 54 55 // Local Variables: 56 // mode:C++ 57 // End: 58