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 */
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 {
friend class Context;
friend class HardwareDevice;
friend class ChannelGroup;
+ friend class std::default_delete<Driver>;
};
/** A generic device, either hardware or virtual */
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 */
~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 */
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 */
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 */
/** 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 */
~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 */
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 */
struct sr_trigger_match *_structure;
shared_ptr<Channel> _channel;
friend class TriggerStage;
+ friend class std::default_delete<TriggerMatch>;
};
/** Type of session stopped callback */
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 */
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 */
~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;
friend class Logic;
friend class Analog;
friend class Context;
+ friend class std::default_delete<Packet>;
};
/** Abstract base class for datafeed packet payloads */
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 */
friend class Context;
friend class InputDevice;
+ friend class std::default_delete<InputFormat>;
};
/** An input instance (an input format applied to a file or stream) */
~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 */
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 */
~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 */
friend class Context;
friend class Output;
+ friend class std::default_delete<OutputFormat>;
};
/** An output instance (an output format applied to a device) */
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 */