OpenVPN 3 Core Library
Loading...
Searching...
No Matches
make_rc.hpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2024- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11
12
13#pragma once
14
15#include <openvpn/common/rc.hpp>
16
17namespace openvpn {
18
27template <typename TypeT, typename RcT = RC<thread_unsafe_refcount>>
28class RcEnable : public TypeT, public RcT
29{
30 public:
32
42 template <typename... ArgsT>
43 [[nodiscard]] static Ptr Create(ArgsT &&...args)
44 {
45 return Ptr(new RcEnable(std::forward<ArgsT>(args)...));
46 }
47
48 private:
60 template <typename... ArgsT>
61 RcEnable(ArgsT &&...args)
62 : TypeT(std::forward<ArgsT>(args)...),
63 RcT(){};
64};
65
76template <typename TypeT, typename RcT = RC<thread_unsafe_refcount>, typename... ArgsT>
77auto make_rc(ArgsT &&...args)
78{
79 return RcEnable<TypeT, RcT>::Create(std::forward<ArgsT>(args)...);
80}
81
82} // namespace openvpn
The smart pointer class.
Definition rc.hpp:119
A class template that enables reference counting for a given type.
Definition make_rc.hpp:29
RcEnable(ArgsT &&...args)
Private constructor for RcEnable.
Definition make_rc.hpp:61
RCPtr< RcEnable > Ptr
Alias for the pointer type used by the reference counting class.
Definition make_rc.hpp:31
static Ptr Create(ArgsT &&...args)
Creates a new instance of RcEnable with the given arguments.
Definition make_rc.hpp:43
Support deferred server-side state creation when client connects.
Definition ovpncli.cpp:95
auto make_rc(ArgsT &&...args)
Helper function to create a reference-counted object with the default thread-unsafe reference countin...
Definition make_rc.hpp:77