File indexing completed on 2024-05-12 05:29:23

0001 /*
0002  *   SPDX-FileCopyrightText: 2012-2016 Ivan Cukic <ivan.cukic@kde.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #pragma once
0008 
0009 #include <memory>
0010 
0011 namespace kamd
0012 {
0013 namespace utils
0014 {
0015 template<typename T>
0016 class d_ptr
0017 {
0018 private:
0019     std::unique_ptr<T> d;
0020 
0021 public:
0022     d_ptr();
0023 
0024     template<typename... Args>
0025     d_ptr(Args &&...);
0026 
0027     ~d_ptr();
0028 
0029     T *operator->() const;
0030 };
0031 
0032 #define D_PTR                                                                                                                                                  \
0033     class Private;                                                                                                                                             \
0034     friend class Private;                                                                                                                                      \
0035     const ::kamd::utils::d_ptr<Private> d
0036 
0037 } // namespace utils
0038 } // namespace kamd