X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Finclude%2Flibsigrokcxx%2Flibsigrokcxx.hpp;h=d8cf3bdc3f62b449e18bf58ad25968ea8f096ffa;hb=014512254abcc74d203376f2e038053b94cf1116;hp=f8e0bf4b935eb42987df52e5ff9c90d6b27c8f48;hpb=b6ab954d67b584af662323ae79ae6da0fbd3a588;p=libsigrok.git diff --git a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp index f8e0bf4b..d8cf3bdc 100644 --- a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp +++ b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp @@ -71,7 +71,12 @@ raised, which provides access to the error code and description. #define LIBSIGROKCXX_HPP #include + +/* Suppress warnings due to glibmm's use of std::auto_ptr<> in a public + * header file. To be removed once glibmm is fixed. */ +G_GNUC_BEGIN_IGNORE_DEPRECATIONS #include +G_GNUC_END_IGNORE_DEPRECATIONS #include #include @@ -127,7 +132,7 @@ public: }; /* Base template for classes whose resources are owned by a parent object. */ -template +template class SR_API ParentOwned { private: @@ -157,12 +162,7 @@ protected: references to both the parent and all its children are gone. */ shared_ptr _parent; - Struct *_structure; - - explicit ParentOwned(Struct *structure) : - _structure(structure) - { - } + ParentOwned() {} /* Note, this implementation will create a new smart_ptr if none exists. */ shared_ptr shared_from_this() @@ -195,16 +195,11 @@ public: }; /* Base template for classes whose resources are owned by the user. */ -template +template class SR_API UserOwned : public enable_shared_from_this { protected: - Struct *_structure; - - explicit UserOwned(Struct *structure) : - _structure(structure) - { - } + UserOwned() {} shared_ptr shared_from_this() { @@ -213,13 +208,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 */ @@ -249,7 +237,7 @@ private: }; /** The global libsigrok context */ -class SR_API Context : public UserOwned +class SR_API Context : public UserOwned { public: /** Create new context */ @@ -286,15 +274,15 @@ public: shared_ptr create_header_packet(Glib::TimeVal start_time); /** Create a meta packet. */ shared_ptr create_meta_packet( - const map &config); + map config); /** Create a logic packet. */ shared_ptr create_logic_packet( void *data_pointer, size_t data_length, unsigned int unit_size); /** Create an analog packet. */ shared_ptr create_analog_packet( - const vector > &channels, + vector > channels, float *data_pointer, unsigned int num_samples, const Quantity *mq, - const Unit *unit, const vector &mqflags); + const Unit *unit, vector mqflags); /** Load a saved session. * @param filename File name string. */ shared_ptr load_session(string filename); @@ -309,16 +297,17 @@ public: shared_ptr open_stream(string header); map serials(shared_ptr driver) const; private: - map _drivers; - map _input_formats; - map _output_formats; + struct sr_context *_structure; + map > _drivers; + map > _input_formats; + map > _output_formats; Session *_session; LogCallbackFunction _log_callback; Context(); ~Context(); - friend class Deleter; friend class Session; friend class Driver; + friend struct std::default_delete; }; enum Capability { @@ -342,7 +331,7 @@ public: * @param key ConfigKey to enumerate values for. */ Glib::VariantContainerBase config_list(const ConfigKey *key) const; /** Enumerate available keys, according to a given index key. */ - map > config_keys(const ConfigKey *key); + map > config_keys(const ConfigKey *key); /** Check for a key in the list from a given index key. */ bool config_check(const ConfigKey *key, const ConfigKey *index_key) const; protected: @@ -358,7 +347,7 @@ protected: /** A hardware driver provided by the library */ class SR_API Driver : - public ParentOwned, + public ParentOwned, public Configurable { public: @@ -368,9 +357,10 @@ public: string long_name() const; /** Scan for devices and return a list of devices found. * @param options Mapping of (ConfigKey, value) pairs. */ - vector > scan( - const map &options = {}); + vector > scan(map + options = map()); private: + struct sr_dev_driver *_structure; bool _initialized; vector _devices; explicit Driver(struct sr_dev_driver *structure); @@ -378,6 +368,7 @@ private: friend class Context; friend class HardwareDevice; friend class ChannelGroup; + friend struct std::default_delete; }; /** A generic device, either hardware or virtual */ @@ -409,26 +400,21 @@ protected: shared_ptr get_channel(struct sr_channel *ptr); struct sr_dev_inst *_structure; - map _channels; + map > _channels; private: - map _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 > _channel_groups; + friend class Session; friend class Channel; friend class ChannelGroup; friend class Output; friend class Analog; + friend struct std::default_delete; }; /** A real hardware device, connected via a driver */ class SR_API HardwareDevice : - public UserOwned, + public UserOwned, public Device { public: @@ -439,20 +425,15 @@ private: ~HardwareDevice(); shared_ptr get_shared_from_this(); shared_ptr _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 struct std::default_delete; }; /** A virtual device, created by the user */ class SR_API UserDevice : - public UserOwned, + public UserOwned, public Device { public: @@ -462,19 +443,14 @@ private: UserDevice(string vendor, string model, string version); ~UserDevice(); shared_ptr 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 struct std::default_delete; }; /** A channel on a device */ class SR_API Channel : - public ParentOwned + public ParentOwned { public: /** Current name of this channel. */ @@ -494,6 +470,7 @@ public: private: explicit Channel(struct sr_channel *structure); ~Channel(); + struct sr_channel *_structure; const ChannelType * const _type; friend class Device; friend class UserDevice; @@ -501,11 +478,12 @@ private: friend class Session; friend class TriggerStage; friend class Context; + friend struct std::default_delete; }; /** A group of channels on a device, which share some configuration */ class SR_API ChannelGroup : - public ParentOwned, + public ParentOwned, public Configurable { public: @@ -514,14 +492,15 @@ public: /** List of the channels in this group. */ vector > channels(); private: - ChannelGroup(Device *device, struct sr_channel_group *structure); + ChannelGroup(const Device *device, struct sr_channel_group *structure); ~ChannelGroup(); vector _channels; friend class Device; + friend struct std::default_delete; }; /** A trigger configuration */ -class SR_API Trigger : public UserOwned +class SR_API Trigger : public UserOwned { public: /** Name of this trigger configuration. */ @@ -533,16 +512,17 @@ public: private: Trigger(shared_ptr context, string name); ~Trigger(); + struct sr_trigger *_structure; shared_ptr _context; - vector _stages; - friend class Deleter; + vector > _stages; friend class Context; friend class Session; + friend struct std::default_delete; }; /** A stage in a trigger configuration */ class SR_API TriggerStage : - public ParentOwned + public ParentOwned { public: /** Index number of this stage. */ @@ -559,15 +539,17 @@ public: * @param value Threshold value. */ void add_match(shared_ptr channel, const TriggerMatchType *type, float value); private: - vector _matches; + struct sr_trigger_stage *_structure; + vector > _matches; explicit TriggerStage(struct sr_trigger_stage *structure); ~TriggerStage(); friend class Trigger; + friend struct std::default_delete; }; /** A match condition in a trigger configuration */ class SR_API TriggerMatch : - public ParentOwned + public ParentOwned { public: /** Channel this condition matches on. */ @@ -579,8 +561,10 @@ public: private: TriggerMatch(struct sr_trigger_match *structure, shared_ptr channel); ~TriggerMatch(); + struct sr_trigger_match *_structure; shared_ptr _channel; friend class TriggerStage; + friend struct std::default_delete; }; /** Type of session stopped callback */ @@ -606,25 +590,20 @@ private: /** A virtual device associated with a stored session */ class SR_API SessionDevice : - public ParentOwned, + public ParentOwned, public Device { private: explicit SessionDevice(struct sr_dev_inst *sdi); ~SessionDevice(); shared_ptr 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 struct std::default_delete; }; /** A sigrok session */ -class SR_API Session : public UserOwned +class SR_API Session : public UserOwned { public: /** Add a device to this session. @@ -663,21 +642,23 @@ private: Session(shared_ptr context, string filename); ~Session(); shared_ptr get_device(const struct sr_dev_inst *sdi); + struct sr_session *_structure; const shared_ptr _context; - map _owned_devices; + map > _owned_devices; map > _other_devices; - vector _datafeed_callbacks; + vector > _datafeed_callbacks; SessionStoppedCallback _stopped_callback; string _filename; shared_ptr _trigger; - friend class Deleter; + friend class Context; friend class DatafeedCallbackData; friend class SessionDevice; + friend struct std::default_delete; }; /** A packet on the session datafeed */ -class SR_API Packet : public UserOwned +class SR_API Packet : public UserOwned { public: /** Type of this packet. */ @@ -688,9 +669,10 @@ private: Packet(shared_ptr device, const struct sr_datafeed_packet *structure); ~Packet(); + const struct sr_datafeed_packet *_structure; shared_ptr _device; - PacketPayload *_payload; - friend class Deleter; + unique_ptr _payload; + friend class Session; friend class Output; friend class DatafeedCallbackData; @@ -699,6 +681,7 @@ private: friend class Logic; friend class Analog; friend class Context; + friend struct std::default_delete; }; /** Abstract base class for datafeed packet payloads */ @@ -710,20 +693,14 @@ protected: private: virtual shared_ptr share_owned_by(shared_ptr 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 struct std::default_delete; }; /** Payload of a datafeed header packet */ class SR_API Header : - public ParentOwned, + public ParentOwned, public PacketPayload { public: @@ -735,12 +712,15 @@ private: explicit Header(const struct sr_datafeed_header *structure); ~Header(); shared_ptr share_owned_by(shared_ptr parent); + + const struct sr_datafeed_header *_structure; + friend class Packet; }; /** Payload of a datafeed metadata packet */ class SR_API Meta : - public ParentOwned, + public ParentOwned, public PacketPayload { public: @@ -750,13 +730,16 @@ private: explicit Meta(const struct sr_datafeed_meta *structure); ~Meta(); shared_ptr share_owned_by(shared_ptr parent); + + const struct sr_datafeed_meta *_structure; map _config; + friend class Packet; }; /** Payload of a datafeed packet with logic data */ class SR_API Logic : - public ParentOwned, + public ParentOwned, public PacketPayload { public: @@ -770,12 +753,15 @@ private: explicit Logic(const struct sr_datafeed_logic *structure); ~Logic(); shared_ptr share_owned_by(shared_ptr parent); + + const struct sr_datafeed_logic *_structure; + friend class Packet; }; /** Payload of a datafeed packet with analog data */ class SR_API Analog : - public ParentOwned, + public ParentOwned, public PacketPayload { public: @@ -795,12 +781,15 @@ private: explicit Analog(const struct sr_datafeed_analog *structure); ~Analog(); shared_ptr share_owned_by(shared_ptr parent); + + const struct sr_datafeed_analog *_structure; + friend class Packet; }; /** An input format supported by the library */ class SR_API InputFormat : - public ParentOwned + public ParentOwned { public: /** Name of this input format. */ @@ -814,16 +803,21 @@ public: map > options(); /** Create an input using this input format. * @param options Mapping of (option name, value) pairs. */ - shared_ptr create_input(const map &options = {}); + shared_ptr create_input(map + options = map()); private: explicit InputFormat(const struct sr_input_module *structure); ~InputFormat(); + + const struct sr_input_module *_structure; + friend class Context; friend class InputDevice; + friend struct std::default_delete; }; /** An input instance (an input format applied to a file or stream) */ -class SR_API Input : public UserOwned +class SR_API Input : public UserOwned { public: /** Virtual device associated with this input. */ @@ -837,16 +831,18 @@ public: private: Input(shared_ptr context, const struct sr_input *structure); ~Input(); + const struct sr_input *_structure; shared_ptr _context; - InputDevice *_device; - friend class Deleter; + unique_ptr _device; + friend class Context; friend class InputFormat; + friend struct std::default_delete; }; /** A virtual device associated with an input */ class SR_API InputDevice : - public ParentOwned, + public ParentOwned, public Device { private: @@ -855,10 +851,11 @@ private: shared_ptr get_shared_from_this(); shared_ptr _input; friend class Input; + friend struct std::default_delete; }; /** An option used by an output format */ -class SR_API Option : public UserOwned +class SR_API Option : public UserOwned