Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.2KB

  1. //
  2. // detail/null_global.hpp
  3. // ~~~~~~~~~~~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2019 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  6. //
  7. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  8. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. #ifndef ASIO_DETAIL_NULL_GLOBAL_HPP
  11. #define ASIO_DETAIL_NULL_GLOBAL_HPP
  12. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  13. # pragma once
  14. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  15. #include "asio/detail/config.hpp"
  16. #include "asio/detail/push_options.hpp"
  17. namespace asio {
  18. namespace detail {
  19. template <typename T>
  20. struct null_global_impl
  21. {
  22. null_global_impl()
  23. : ptr_(0)
  24. {
  25. }
  26. // Destructor automatically cleans up the global.
  27. ~null_global_impl()
  28. {
  29. delete ptr_;
  30. }
  31. static null_global_impl instance_;
  32. T* ptr_;
  33. };
  34. template <typename T>
  35. null_global_impl<T> null_global_impl<T>::instance_;
  36. template <typename T>
  37. T& null_global()
  38. {
  39. if (null_global_impl<T>::instance_.ptr_ == 0)
  40. null_global_impl<T>::instance_.ptr_ = new T;
  41. return *null_global_impl<T>::instance_.ptr_;
  42. }
  43. } // namespace detail
  44. } // namespace asio
  45. #include "asio/detail/pop_options.hpp"
  46. #endif // ASIO_DETAIL_NULL_GLOBAL_HPP