ImagingTools Core SDK
Public Types | Public Member Functions | Protected Member Functions | List of all members
imtdev::CCompositeDeviceInstanceBase

Base implementation class for composite device instances. More...

#include <CCompositeDeviceInstanceBase.h>

Inheritance diagram for imtdev::CCompositeDeviceInstanceBase:
imtdev::CDeviceInstanceBase imtdev::IEditableCompositeDeviceInstance imtdev::IEditableDeviceInstance imtdev::ICompositeDeviceInstance imtdev::IDeviceInstance imtdev::IDeviceInstance

Public Types

typedef CDeviceInstanceBase BaseClass
 Base class type alias.
 
- Public Types inherited from imtdev::IDeviceInstance
enum  IdentifierTypes { IT_SERIAL }
 Types of device identifiers. More...
 
enum  VersionIds {
  VI_FIRMWARE_VERSION_MAJOR = iser::IVersionInfo::UserVersionId , VI_FIRMWARE_VERSION_MINOR , VI_FIRMWARE_VERSION_PATCH , VI_HARDWARE_VERSION_MAJOR ,
  VI_HARDWARE_VERSION_MINOR , VI_HARDWARE_VERSION_PATCH
}
 Version information identifiers. More...
 

Public Member Functions

 CCompositeDeviceInstanceBase ()
 Constructor.
 
 ~CCompositeDeviceInstanceBase ()
 Destructor.
 
virtual QByteArray AddSubDevice (const QByteArray &deviceTypeId, const QString &name, const QString &description=QString(), const istd::IChangeable *defaultValuePtr=nullptr, const QByteArray &proposedId=QByteArray()) override
 Add new sub-device.
 
virtual bool RemoveSubDevice (const QByteArray &id) override
 Remove sub-device.
 
virtual const ICompositeDeviceSpecificationGetCompositeDeviceSpecification () const override
 Get composite device specification.
 
virtual QSet< QByteArray > GetSupportedSubDeviceTypeIds () const override
 Get supported sub-device type IDs.
 
virtual const imtbase::ICollectionInfoGetSubDeviceList () const override
 Get sub-device list.
 
virtual const IDeviceInstanceGetSubDeviceInstance (const QByteArray &subDeviceId) const override
 Get specific sub-device instance.
 
virtual int GetSupportedOperations () const override
 Get supported operations.
 
virtual bool CopyFrom (const IChangeable &object, CompatibilityMode mode=CM_WITHOUT_REFS) override
 Copy from another composite device.
 
virtual bool ResetData (CompatibilityMode mode=CM_WITHOUT_REFS) override
 Reset composite device data.
 
- Public Member Functions inherited from imtdev::CDeviceInstanceBase
 CDeviceInstanceBase ()
 Constructor.
 
 ~CDeviceInstanceBase ()
 Destructor.
 
virtual bool SetIdentifier (IdentifierTypes idType, const QByteArray &id) override
 Set device identifier.
 
virtual bool SetVersion (int versionId, quint32 version, const QString &description) override
 Set version information component.
 
virtual iattr::IAttributesManager * GetAttributesManager () override
 Get attributes manager for modification.
 
virtual QByteArray GetIdentifier (int idType) const override
 Get device identifier.
 
virtual const iser::IVersionInfo & GetVersion () const override
 Get version information.
 
virtual const iattr::IAttributesProvider * GetAttributes () const override
 Get attributes provider (read-only)
 
- Public Member Functions inherited from imtdev::IDeviceInstance
virtual const IDeviceSpecificationGetDeviceSpecification () const =0
 Get device static info associated with device instance.
 

Protected Member Functions

virtual IDeviceInstanceCreateDeviceInstance (const QByteArray &deviceTypeId) const
 Create device instance (factory method)
 
- Protected Member Functions inherited from imtdev::CDeviceInstanceBase
virtual bool EnsureAttributesCreated () const
 Ensure attributes provider is created.
 

Additional Inherited Members

- Protected Attributes inherited from imtdev::CDeviceInstanceBase
imod::CModelUpdateBridge m_updateBridge
 Bridge for change notifications (mutable for change tracking in const methods)
 
std::unique_ptr< iattr::IAttributesProvider > m_attributesPtr
 Lazy-created attributes (mutable to allow creation in const GetAttributes())
 

Detailed Description

Base implementation class for composite device instances.

CCompositeDeviceInstanceBase extends CDeviceInstanceBase to support hierarchical device structures with sub-devices. It provides complete implementation of IEditableCompositeDeviceInstance, enabling dynamic creation and management of device trees.

This class implements the Composite Pattern, allowing devices to contain other devices in a parent-child relationship. Sub-devices can themselves be composite, enabling multi-level hierarchies.

Key Features:
  • Sub-Device Management: Add and remove sub-devices dynamically
  • Factory Pattern: Virtual CreateDeviceInstance() for custom sub-device creation
  • Collection Support: ICollectionInfo interface for sub-device list access
  • Change Tracking: Automatic notifications when sub-devices are added/removed
  • Serialization: Copy and reset operations including sub-device tree
Design:
The class uses:
  • QMap for sub-device storage (indexed by device ID)
  • TModelWrap for collection info (automatic change tracking)
  • Virtual factory method for extensible device instance creation
  • Nested SubDeviceCollectionInfo for ICollectionInfo implementation
Usage Example:
// Create composite device instance
// Set parent device information
compositeDevice.SetIdentifier(IDeviceInstance::IT_SERIAL, "COMPOSITE_001");
// Add sub-devices
QByteArray cameraId = compositeDevice.AddSubDevice(
"StandardCamera", // Device type ID
"Camera 1", // Name
"Front-facing camera" // Description
);
QByteArray sensorId = compositeDevice.AddSubDevice(
"TemperatureSensor",
"Temp Sensor",
"Environmental sensor"
);
// Access sub-device list
const imtbase::ICollectionInfo& subDevices = compositeDevice.GetSubDeviceList();
int count = subDevices.GetElementsCount();
// Get specific sub-device
const IDeviceInstance* pCamera = compositeDevice.GetSubDeviceInstance(cameraId);
if (pCamera)
{
// Work with sub-device
const IDeviceSpecification& spec = pCamera->GetDeviceSpecification();
}
// Remove sub-device
compositeDevice.RemoveSubDevice(sensorId);
// Copy entire device tree
clonedDevice.CopyFrom(compositeDevice);
virtual int GetElementsCount(const iprm::IParamsSet *selectionParamsPtr=nullptr, ilog::IMessageConsumer *logPtr=nullptr) const =0
Base implementation class for composite device instances.
virtual QByteArray AddSubDevice(const QByteArray &deviceTypeId, const QString &name, const QString &description=QString(), const istd::IChangeable *defaultValuePtr=nullptr, const QByteArray &proposedId=QByteArray()) override
Add new sub-device.
virtual const imtbase::ICollectionInfo & GetSubDeviceList() const override
Get sub-device list.
virtual const IDeviceInstance * GetSubDeviceInstance(const QByteArray &subDeviceId) const override
Get specific sub-device instance.
virtual bool RemoveSubDevice(const QByteArray &id) override
Remove sub-device.
virtual bool CopyFrom(const IChangeable &object, CompatibilityMode mode=CM_WITHOUT_REFS) override
Copy from another composite device.
virtual bool SetVersion(int versionId, quint32 version, const QString &description) override
Set version information component.
virtual bool SetIdentifier(IdentifierTypes idType, const QByteArray &id) override
Set device identifier.
Interface for describing runtime information about a device instance.
@ IT_SERIAL
Serial number identifier.
virtual const IDeviceSpecification & GetDeviceSpecification() const =0
Get device static info associated with device instance.
@ VI_FIRMWARE_VERSION_MAJOR
Major firmware version number.
Interface for describing static information about a device type/class.
Extension:
Derived classes should override CreateDeviceInstance() to provide custom sub-device instance creation based on device type ID. The base implementation returns nullptr.
Thread Safety:
Operations that modify the sub-device structure trigger change notifications. Ensure proper synchronization if accessing from multiple threads.
See also
CDeviceInstanceBase
IEditableCompositeDeviceInstance
ICompositeDeviceInstance

Definition at line 102 of file CCompositeDeviceInstanceBase.h.

Constructor & Destructor Documentation

◆ CCompositeDeviceInstanceBase()

imtdev::CCompositeDeviceInstanceBase::CCompositeDeviceInstanceBase ( )

Constructor.

Initializes the composite device instance with empty sub-device list. Inherits base device instance initialization from CDeviceInstanceBase.

◆ ~CCompositeDeviceInstanceBase()

imtdev::CCompositeDeviceInstanceBase::~CCompositeDeviceInstanceBase ( )

Destructor.

Cleans up all sub-devices and releases resources.

Member Function Documentation

◆ AddSubDevice()

virtual QByteArray imtdev::CCompositeDeviceInstanceBase::AddSubDevice ( const QByteArray &  deviceTypeId,
const QString &  name,
const QString &  description = QString(),
const istd::IChangeable *  defaultValuePtr = nullptr,
const QByteArray &  proposedId = QByteArray() 
)
overridevirtual

Add new sub-device.

Creates and adds a new sub-device instance with the specified type and properties. The device type must be supported by the composite device specification. Calls virtual CreateDeviceInstance() to create the instance, then stores it.

Parameters
deviceTypeIdType identifier of the sub-device to create
nameHuman-readable name for the sub-device
descriptionOptional description
defaultValuePtrOptional default configuration (unused in base implementation)
proposedIdOptional proposed ID; if empty, auto-generated
Returns
Unique identifier of the newly created sub-device, or empty on failure

Implements imtdev::IEditableCompositeDeviceInstance.

◆ CopyFrom()

virtual bool imtdev::CCompositeDeviceInstanceBase::CopyFrom ( const IChangeable &  object,
CompatibilityMode  mode = CM_WITHOUT_REFS 
)
overridevirtual

Copy from another composite device.

Copies all data including sub-devices from another composite device instance. Performs deep copy of the entire device tree.

Parameters
objectSource object to copy from
modeCompatibility mode for copying
Returns
true if copy succeeded

Reimplemented from imtdev::CDeviceInstanceBase.

◆ CreateDeviceInstance()

virtual IDeviceInstance * imtdev::CCompositeDeviceInstanceBase::CreateDeviceInstance ( const QByteArray &  deviceTypeId) const
protectedvirtual

Create device instance (factory method)

Virtual factory method for creating sub-device instances based on device type ID. Derived classes must override this to provide actual device instance creation.

Parameters
deviceTypeIdType identifier of the device to create
Returns
Pointer to newly created device instance, or nullptr if type not supported
Note
Base implementation returns nullptr

◆ GetCompositeDeviceSpecification()

virtual const ICompositeDeviceSpecification * imtdev::CCompositeDeviceInstanceBase::GetCompositeDeviceSpecification ( ) const
overridevirtual

Get composite device specification.

Base implementation returns nullptr. Derived classes should override to provide actual composite device specification.

Returns
Pointer to composite specification, or nullptr in base implementation

Implements imtdev::ICompositeDeviceInstance.

◆ GetSubDeviceInstance()

virtual const IDeviceInstance * imtdev::CCompositeDeviceInstanceBase::GetSubDeviceInstance ( const QByteArray &  subDeviceId) const
overridevirtual

Get specific sub-device instance.

Retrieves the device instance for a sub-device with the given ID.

Parameters
subDeviceIdUnique identifier of the sub-device
Returns
Pointer to sub-device instance, or nullptr if not found

Implements imtdev::ICompositeDeviceInstance.

◆ GetSubDeviceList()

virtual const imtbase::ICollectionInfo & imtdev::CCompositeDeviceInstanceBase::GetSubDeviceList ( ) const
overridevirtual

Get sub-device list.

Returns the collection containing all sub-devices in this composite.

Returns
Reference to sub-device collection info

Implements imtdev::ICompositeDeviceInstance.

◆ GetSupportedOperations()

virtual int imtdev::CCompositeDeviceInstanceBase::GetSupportedOperations ( ) const
overridevirtual

Get supported operations.

Returns flags indicating supported operations (copy, reset, etc.). Includes base class operations plus composite-specific operations.

Returns
Operation flags

Reimplemented from imtdev::CDeviceInstanceBase.

◆ GetSupportedSubDeviceTypeIds()

virtual QSet< QByteArray > imtdev::CCompositeDeviceInstanceBase::GetSupportedSubDeviceTypeIds ( ) const
overridevirtual

Get supported sub-device type IDs.

Returns the set of device type IDs that can be added as sub-devices. Base implementation queries the composite device specification.

Returns
Set of supported type IDs

Implements imtdev::ICompositeDeviceInstance.

◆ RemoveSubDevice()

virtual bool imtdev::CCompositeDeviceInstanceBase::RemoveSubDevice ( const QByteArray &  id)
overridevirtual

Remove sub-device.

Removes an existing sub-device from the composite. Triggers change notification.

Parameters
idUnique identifier of the sub-device to remove
Returns
true if sub-device was removed successfully, false if not found

Implements imtdev::IEditableCompositeDeviceInstance.

◆ ResetData()

virtual bool imtdev::CCompositeDeviceInstanceBase::ResetData ( CompatibilityMode  mode = CM_WITHOUT_REFS)
overridevirtual

Reset composite device data.

Clears all data including removing all sub-devices.

Parameters
modeCompatibility mode for reset
Returns
true if reset succeeded

Reimplemented from imtdev::CDeviceInstanceBase.