cpp_class_diagram.puml - moduleus/urx GitHub Wiki

@startuml

/' Objects '/

namespace urx { abstract class IRawData { +getDataType() : DataType {query} +getSamplingType() : SamplingType {query} }

abstract class RawData {
	+{abstract} getDataType() : DataType {query}
	+{abstract} getSamplingType() : SamplingType {query}
	+{abstract} getSize() : size_t {query}
	+{abstract} getBuffer() : void* {query}
	+{abstract} getBuffer() : void*
}

class RawDataNoInit  {
	+RawDataNoInit(size_t size)
	-_size : size_t
	+getSize() : size_t {query}
	-_buffer : std::unique_ptr<DataType [ ]>
	+getBuffer() : void* {query}
	+getBuffer() : void*
}

class RawDataVector  {
	+RawDataVector(std::vector<DataType>&& vector)
	+getSize() : size_t {query}
	-_vector : std::vector<DataType>
	+getBuffer() : void* {query}
	+getBuffer() : void*
}

class RawDataWeak  {
	+RawDataWeak(void* buffer, size_t size)
	-_size : size_t
	+getSize() : size_t {query}
	-_buffer : void*
	+getBuffer() : void* {query}
	+getBuffer() : void*
}

enum DataType {
	DOUBLE
	FLOAT
	INT16
	INT32
	UNDEFINED
}

enum ProbeType {
	CURVILINEAR
	LINEAR
	MATRIX
	RCA
	SPARSE
	UNDEFINED
}

enum SamplingType {
	IQ
	RF
	UNDEFINED
}

enum WaveType {
	CONVERGING_WAVE
	CYLINDRICAL_WAVE
	DIVERGING_WAVE
	PLANE_WAVE
	UNDEFINED
}

class Element {
	+transform : Transform
	+element_geometry : std::weak_ptr<ElementGeometry>
	+impulse_response : std::weak_ptr<ImpulseResponse>
}

class ElementGeometry {
	+perimeter : std::vector<Vector3D>
}

class Excitation {
	+sampling_frequency : DoubleNan
	+transmit_frequency : DoubleNan
	+pulse_shape : std::string
	+waveform : std::vector<double>
}

class GroupData {
	+group_timestamp : DoubleNan
	+raw_data : std::shared_ptr<RawData>
	+sequence_timestamps : std::vector<double>
	+event_timestamps : std::vector<std::vector<double>>
	+group : std::weak_ptr<Group>
}

class ImpulseResponse {
	+sampling_frequency : DoubleNan
	+time_offset : DoubleNan
	+units : std::string
	+data : std::vector<double>
}




class Probe {
	+type : ProbeType
	+transform : Transform
	+description : std::string
	+elements : std::vector<Element>
	+element_geometries : std::vector<std::shared_ptr<ElementGeometry>>
	+impulse_responses : std::vector<std::shared_ptr<ImpulseResponse>>
}

class ReceiveSetup {
	+modulation_frequency : DoubleNan
	+sampling_frequency : DoubleNan
	+tgc_sampling_frequency : DoubleNan
	+time_offset : DoubleNan
	+probe_transform : Transform
	+tgc_profile : std::vector<double>
	+active_elements : std::vector<std::vector<uint32_t>>
	+probe : std::weak_ptr<Probe>
	+number_samples : uint32_t
}

class Transform {
	+rotation : Vector3D
	+translation : Vector3D
}

class Vector2D  {
	+x : double
	+y : double
}

class Vector3D  {
	+x : double
	+y : double
	+z : double
}

class Version {
	+major : uint16_t
	+minor : uint16_t
	+patch : uint16_t
}

class Wave {
	+time_zero : DoubleNan
	+time_zero_reference_point : Vector3D
	+type : WaveType
	+parameters : std::vector<double>
}


	class Acquisition  {
		+groups_data : std::vector<GroupData>
	}

	class AcquisitionBase  {
		+timestamp : DoubleNan
		+authors : std::string
		+country_code : std::string
		+description : std::string
		+local_time : std::string
		+system : std::string
		+excitations : std::vector<std::shared_ptr<Excitation>>
		+groups : std::vector<std::shared_ptr<Group>>
		+probes : std::vector<std::shared_ptr<Probe>>
	}

	class Dataset  {
		+acquisition : Acquisition
		+version : Version
	}

	class Event  {
		+receive_setup : ReceiveSetup
		+transmit_setup : TransmitSetup
	}

	class Group  {
		+data_type : DataType
		+sound_speed : DoubleNan
		+sampling_type : SamplingType
		+description : std::string
		+sequence : std::vector<Event>
	}

	class TransmitSetup  {
		+time_offset : DoubleNan
		+probe_transform : Transform
		+wave : Wave
		+delays : std::vector<double>
		+active_elements : std::vector<std::vector<uint32_t>>
		+excitations : std::vector<std::weak_ptr<Excitation>>
		+probe : std::weak_ptr<Probe>
}

}

/' Inheritance relationships '/

urx.AcquisitionBase <|-- urx.Acquisition

urx.IRawData <|-- urx.RawDataNoInit

urx.IRawData <|-- urx.RawDataVector

urx.IRawData <|-- urx.RawDataWeak

urx.RawData <|-- urx.IRawData

/' Aggregation relationships '/

urx.Acquisition *-- urx.GroupData

urx.AcquisitionBase *-- urx.Excitation

urx.AcquisitionBase *-- urx.Group

urx.AcquisitionBase *-- urx.Probe

urx.Dataset *-- urx.Acquisition

urx.Dataset *-- urx.Version

urx.Event *-- urx.ReceiveSetup

urx.Event *-- urx.TransmitSetup

urx.Group *-- urx.DataType

urx.Group *-- urx.Event

urx.Group *-- urx.SamplingType

urx.GroupData *-- urx.RawData

urx.Probe *-- urx.Element

urx.Probe *-- urx.ElementGeometry

urx.Probe *-- urx.ImpulseResponse

urx.Probe *-- urx.ProbeType

urx.TransmitSetup *-- urx.Wave

urx.Wave *-- urx.WaveType

/' Nested objects '/

@enduml

⚠️ **GitHub.com Fallback** ⚠️