diff --git a/src/Add-ons/CMakeLists.txt b/src/Add-ons/CMakeLists.txt index d0f29cbd4..c31a67881 100644 --- a/src/Add-ons/CMakeLists.txt +++ b/src/Add-ons/CMakeLists.txt @@ -11,6 +11,7 @@ set(HEADERS addon_fwd.hxx AddonManager.hxx AddonVersion.hxx exceptions.hxx + pointer_traits.hxx ) flightgear_component(AddonManagement "${SOURCES}" "${HEADERS}") diff --git a/src/Add-ons/pointer_traits.hxx b/src/Add-ons/pointer_traits.hxx new file mode 100644 index 000000000..38f6b0e4b --- /dev/null +++ b/src/Add-ons/pointer_traits.hxx @@ -0,0 +1,67 @@ +// -*- coding: utf-8 -*- +// +// pointer_traits.hxx --- Pointer traits classes +// Copyright (C) 2018 Florent Rougon +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +#ifndef FG_ADDON_POINTER_TRAITS_HXX +#define FG_ADDON_POINTER_TRAITS_HXX + +#include +#include + +#include + +namespace flightgear +{ + +namespace addons +{ + +template +struct shared_ptr_traits; + +template +struct shared_ptr_traits> +{ + using element_type = T; + using strong_ref = SGSharedPtr; + + template + static strong_ref makeStrongRef(Args&& ...args) + { + return strong_ref(new T(std::forward(args)...)); + } +}; + +template +struct shared_ptr_traits> +{ + using element_type = T; + using strong_ref = std::shared_ptr; + + template + static strong_ref makeStrongRef(Args&& ...args) + { + return std::make_shared(std::forward(args)...); + } +}; + +} // of namespace addons + +} // of namespace flightgear + +#endif // of FG_ADDON_POINTER_TRAITS_HXX