]> sigrok.org Git - libsigrok.git/blobdiff - bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
C++: Replace custom deleters with std::default_delete
[libsigrok.git] / bindings / cxx / include / libsigrokcxx / libsigrokcxx.hpp
index c7995b8ccdd3346a1f8895c29aee809b3ef25d66..a74bbfcfa5002ba665e747c17edd4f3235125710 100644 (file)
@@ -203,13 +203,6 @@ protected:
                        throw Error(SR_ERR_BUG);
                return shared;
        }
-
-       /* Deleter needed to allow shared_ptr use with protected destructor. */
-       class Deleter
-       {
-       public:
-               void operator()(Class *object) { delete object; }
-       };
 };
 
 /** Type of log callback */
@@ -300,16 +293,16 @@ public:
        map<string, string> serials(shared_ptr<Driver> driver) const;
 private:
        struct sr_context *_structure;
-       map<string, Driver *> _drivers;
-       map<string, InputFormat *> _input_formats;
-       map<string, OutputFormat *> _output_formats;
+       map<string, unique_ptr<Driver> > _drivers;
+       map<string, unique_ptr<InputFormat> > _input_formats;
+       map<string, unique_ptr<OutputFormat> > _output_formats;
        Session *_session;
        LogCallbackFunction _log_callback;
        Context();
        ~Context();
-       friend class Deleter;
        friend class Session;
        friend class Driver;
+       friend class std::default_delete<Context>;
 };
 
 enum Capability {
@@ -370,6 +363,7 @@ private:
        friend class Context;
        friend class HardwareDevice;
        friend class ChannelGroup;
+       friend class std::default_delete<Driver>;
 };
 
 /** A generic device, either hardware or virtual */
@@ -401,21 +395,16 @@ protected:
        shared_ptr<Channel> get_channel(struct sr_channel *ptr);
 
        struct sr_dev_inst *_structure;
-       map<struct sr_channel *, Channel *> _channels;
+       map<struct sr_channel *, unique_ptr<Channel> > _channels;
 private:
-       map<string, ChannelGroup *> _channel_groups;
-       /** Deleter needed to allow shared_ptr use with protected destructor. */
-       class Deleter
-       {
-       public:
-               void operator()(Device *device) { delete device; }
-       };
-       friend class Deleter;
+       map<string, unique_ptr<ChannelGroup> > _channel_groups;
+
        friend class Session;
        friend class Channel;
        friend class ChannelGroup;
        friend class Output;
        friend class Analog;
+       friend class std::default_delete<Device>;
 };
 
 /** A real hardware device, connected via a driver */
@@ -431,15 +420,10 @@ private:
        ~HardwareDevice();
        shared_ptr<Device> get_shared_from_this();
        shared_ptr<Driver> _driver;
-       /** Deleter needed to allow shared_ptr use with protected destructor. */
-       class Deleter
-       {
-       public:
-               void operator()(HardwareDevice *device) { delete device; }
-       };
-       friend class Deleter;
+
        friend class Driver;
        friend class ChannelGroup;
+       friend class std::default_delete<HardwareDevice>;
 };
 
 /** A virtual device, created by the user */
@@ -454,14 +438,9 @@ private:
        UserDevice(string vendor, string model, string version);
        ~UserDevice();
        shared_ptr<Device> get_shared_from_this();
-       /** Deleter needed to allow shared_ptr use with protected destructor. */
-       class Deleter
-       {
-       public:
-               void operator()(UserDevice *device) { delete device; }
-       };
+
        friend class Context;
-       friend class Deleter;
+       friend class std::default_delete<UserDevice>;
 };
 
 /** A channel on a device */
@@ -494,6 +473,7 @@ private:
        friend class Session;
        friend class TriggerStage;
        friend class Context;
+       friend class std::default_delete<Channel>;
 };
 
 /** A group of channels on a device, which share some configuration */
@@ -507,10 +487,11 @@ public:
        /** List of the channels in this group. */
        vector<shared_ptr<Channel> > channels();
 private:
-       ChannelGroup(Device *device, struct sr_channel_group *structure);
+       ChannelGroup(const Device *device, struct sr_channel_group *structure);
        ~ChannelGroup();
        vector<Channel *> _channels;
        friend class Device;
+       friend class std::default_delete<ChannelGroup>;
 };
 
 /** A trigger configuration */
@@ -528,10 +509,10 @@ private:
        ~Trigger();
        struct sr_trigger *_structure;
        shared_ptr<Context> _context;
-       vector<TriggerStage *> _stages;
-       friend class Deleter;
+       vector<unique_ptr<TriggerStage> > _stages;
        friend class Context;
        friend class Session;
+       friend class std::default_delete<Trigger>;
 };
 
 /** A stage in a trigger configuration */
@@ -554,10 +535,11 @@ public:
        void add_match(shared_ptr<Channel> channel, const TriggerMatchType *type, float value);
 private:
        struct sr_trigger_stage *_structure;
-       vector<TriggerMatch *> _matches;
+       vector<unique_ptr<TriggerMatch> > _matches;
        explicit TriggerStage(struct sr_trigger_stage *structure);
        ~TriggerStage();
        friend class Trigger;
+       friend class std::default_delete<TriggerStage>;
 };
 
 /** A match condition in a trigger configuration  */
@@ -577,6 +559,7 @@ private:
        struct sr_trigger_match *_structure;
        shared_ptr<Channel> _channel;
        friend class TriggerStage;
+       friend class std::default_delete<TriggerMatch>;
 };
 
 /** Type of session stopped callback */
@@ -609,14 +592,9 @@ private:
        explicit SessionDevice(struct sr_dev_inst *sdi);
        ~SessionDevice();
        shared_ptr<Device> get_shared_from_this();
-       /** Deleter needed to allow shared_ptr use with protected destructor. */
-       class Deleter
-       {
-       public:
-               void operator()(SessionDevice *device) { delete device; }
-       };
-       friend class Deleter;
+
        friend class Session;
+       friend class std::default_delete<SessionDevice>;
 };
 
 /** A sigrok session */
@@ -661,16 +639,17 @@ private:
        shared_ptr<Device> get_device(const struct sr_dev_inst *sdi);
        struct sr_session *_structure;
        const shared_ptr<Context> _context;
-       map<const struct sr_dev_inst *, SessionDevice *> _owned_devices;
+       map<const struct sr_dev_inst *, unique_ptr<SessionDevice> > _owned_devices;
        map<const struct sr_dev_inst *, shared_ptr<Device> > _other_devices;
-       vector<DatafeedCallbackData *> _datafeed_callbacks;
+       vector<unique_ptr<DatafeedCallbackData> > _datafeed_callbacks;
        SessionStoppedCallback _stopped_callback;
        string _filename;
        shared_ptr<Trigger> _trigger;
-       friend class Deleter;
+
        friend class Context;
        friend class DatafeedCallbackData;
        friend class SessionDevice;
+       friend class std::default_delete<Session>;
 };
 
 /** A packet on the session datafeed */
@@ -687,8 +666,8 @@ private:
        ~Packet();
        const struct sr_datafeed_packet *_structure;
        shared_ptr<Device> _device;
-       PacketPayload *_payload;
-       friend class Deleter;
+       unique_ptr<PacketPayload> _payload;
+
        friend class Session;
        friend class Output;
        friend class DatafeedCallbackData;
@@ -697,6 +676,7 @@ private:
        friend class Logic;
        friend class Analog;
        friend class Context;
+       friend class std::default_delete<Packet>;
 };
 
 /** Abstract base class for datafeed packet payloads */
@@ -708,15 +688,9 @@ protected:
 private:
        virtual shared_ptr<PacketPayload> share_owned_by(shared_ptr<Packet> parent) = 0;
 
-       /** Deleter needed to allow shared_ptr use with protected destructor. */
-       class Deleter
-       {
-       public:
-               void operator()(PacketPayload *payload) { delete payload; }
-       };
-       friend class Deleter;
        friend class Packet;
        friend class Output;
+       friend class std::default_delete<PacketPayload>;
 };
 
 /** Payload of a datafeed header packet */
@@ -833,6 +807,7 @@ private:
 
        friend class Context;
        friend class InputDevice;
+       friend class std::default_delete<InputFormat>;
 };
 
 /** An input instance (an input format applied to a file or stream) */
@@ -852,10 +827,11 @@ private:
        ~Input();
        const struct sr_input *_structure;
        shared_ptr<Context> _context;
-       InputDevice *_device;
-       friend class Deleter;
+       unique_ptr<InputDevice> _device;
+
        friend class Context;
        friend class InputFormat;
+       friend class std::default_delete<Input>;
 };
 
 /** A virtual device associated with an input */
@@ -869,6 +845,7 @@ private:
        shared_ptr<Device> get_shared_from_this();
        shared_ptr<Input> _input;
        friend class Input;
+       friend class std::default_delete<InputDevice>;
 };
 
 /** An option used by an output format */
@@ -891,9 +868,10 @@ private:
        ~Option();
        const struct sr_option *_structure;
        shared_ptr<const struct sr_option *> _structure_array;
-       friend class Deleter;
+
        friend class InputFormat;
        friend class OutputFormat;
+       friend class std::default_delete<Option>;
 };
 
 /** An output format supported by the library */
@@ -938,6 +916,7 @@ private:
 
        friend class Context;
        friend class Output;
+       friend class std::default_delete<OutputFormat>;
 };
 
 /** An output instance (an output format applied to a device) */
@@ -960,8 +939,8 @@ private:
        const shared_ptr<Device> _device;
        const map<string, Glib::VariantBase> _options;
 
-       friend class Deleter;
        friend class OutputFormat;
+       friend class std::default_delete<Output>;
 };
 
 /** Base class for objects which wrap an enumeration value from libsigrok */