home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / stlpt453.zip / STLport-4.5.3 / stlport / stl / _tempbuf.c < prev    next >
C/C++ Source or Header  |  2002-02-02  |  1KB  |  58 lines

  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.