make_shared_array.hpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. Copyright 2012-2019 Glen Joseph Fernandes
  3. (glenjofe@gmail.com)
  4. Distributed under the Boost Software License, Version 1.0.
  5. (http://www.boost.org/LICENSE_1_0.txt)
  6. */
  7. #ifndef BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP
  8. #define BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP
  9. #include <boost/smart_ptr/allocate_shared_array.hpp>
  10. namespace boost {
  11. template<class T>
  12. inline typename enable_if_<is_bounded_array<T>::value, shared_ptr<T> >::type
  13. make_shared()
  14. {
  15. return boost::allocate_shared<T>(std::allocator<typename
  16. detail::sp_array_scalar<T>::type>());
  17. }
  18. template<class T>
  19. inline typename enable_if_<is_bounded_array<T>::value, shared_ptr<T> >::type
  20. make_shared(const typename remove_extent<T>::type& value)
  21. {
  22. return boost::allocate_shared<T>(std::allocator<typename
  23. detail::sp_array_scalar<T>::type>(), value);
  24. }
  25. template<class T>
  26. inline typename enable_if_<is_unbounded_array<T>::value, shared_ptr<T> >::type
  27. make_shared(std::size_t size)
  28. {
  29. return boost::allocate_shared<T>(std::allocator<typename
  30. detail::sp_array_scalar<T>::type>(), size);
  31. }
  32. template<class T>
  33. inline typename enable_if_<is_unbounded_array<T>::value, shared_ptr<T> >::type
  34. make_shared(std::size_t size, const typename remove_extent<T>::type& value)
  35. {
  36. return boost::allocate_shared<T>(std::allocator<typename
  37. detail::sp_array_scalar<T>::type>(), size, value);
  38. }
  39. template<class T>
  40. inline typename enable_if_<is_bounded_array<T>::value, shared_ptr<T> >::type
  41. make_shared_noinit()
  42. {
  43. return boost::allocate_shared_noinit<T>(std::allocator<typename
  44. detail::sp_array_scalar<T>::type>());
  45. }
  46. template<class T>
  47. inline typename enable_if_<is_unbounded_array<T>::value, shared_ptr<T> >::type
  48. make_shared_noinit(std::size_t size)
  49. {
  50. return boost::allocate_shared_noinit<T>(std::allocator<typename
  51. detail::sp_array_scalar<T>::type>(), size);
  52. }
  53. } /* boost */
  54. #endif