10#include <unordered_map>
11#include <unordered_set>
17#define DEFAULT_STR_SIZE 256
18#define DEFAULT_ARRAY_SIZE 1
102 std::vector<uint8_t>,
103 std::vector<uint16_t>,
104 std::vector<uint32_t>,
105 std::vector<uint64_t>,
107 std::vector<int16_t>,
108 std::vector<int32_t>,
109 std::vector<int64_t>,
112 std::vector<std::string>>;
124 if (typeIndex ==
typeid(uint8_t)) {
126 }
else if (typeIndex ==
typeid(uint16_t)) {
128 }
else if (typeIndex ==
typeid(uint32_t)) {
130 }
else if (typeIndex ==
typeid(uint64_t)) {
132 }
else if (typeIndex ==
typeid(int8_t)) {
134 }
else if (typeIndex ==
typeid(int16_t)) {
136 }
else if (typeIndex ==
typeid(int32_t)) {
138 }
else if (typeIndex ==
typeid(int64_t)) {
140 }
else if (typeIndex ==
typeid(
float)) {
142 }
else if (typeIndex ==
typeid(
double)) {
145 throw std::runtime_error(
"Unsupported data type");
150class DataBlockGeneric;
216 virtual bool isLink()
const {
return false; }
307 return Status::Success;
351 inline bool isLink()
const override {
return true; }
428 const std::vector<BaseDataType>& allowedTypes = {},
429 const std::vector<SizeType>& allowedDimensionalities = {},
430 const std::vector<std::string>& requiredAttributes = {})
const;
452 return Status::Failure;
458 }
catch (
const std::runtime_error&) {
459 return Status::Failure;
461 return Status::Success;
484 BaseIO(
const std::string& filename);
577 virtual std::vector<std::pair<std::string, StorageObjectType>>
580 StorageObjectType::Undefined)
const = 0;
607 virtual std::unordered_map<std::string, std::string>
findTypes(
608 const std::string& starting_path,
609 const std::unordered_set<std::string>& types,
611 bool exclude_starting_path =
false)
const;
674 const std::string& dataPath)
const = 0;
687 const std::string& path,
688 const std::string& name,
700 const std::string& path,
701 const std::string& name,
702 const bool overwrite =
false) = 0;
715 const std::string& path,
716 const std::string& name,
717 const bool overwrite =
false) = 0;
727 const std::string& path,
728 const std::string& name) = 0;
747 const std::string& reference) = 0;
756 const std::string& value) = 0;
765 const std::string& path,
const std::vector<std::string>& values) = 0;
775 const std::string& path,
const std::vector<std::string>& references) = 0;
815 const std::string& path) = 0;
843 const std::string& path)
const = 0;
853 const std::string& objectNamespace,
854 const std::string& neurodataType =
"");
959 const void* data) = 0;
974 const std::vector<std::string>& data) = 0;
AQNWB::Types::StorageObjectType StorageObjectType
Definition BaseIO.hpp:20
AQNWB::Types::Status Status
Definition BaseIO.hpp:21
AQNWB::Types::SizeArray SizeArray
Definition BaseIO.hpp:22
AQNWB::Types::SizeType SizeType
Definition Channel.hpp:8
virtual ~ArrayDataSetConfig() override=default
Virtual destructor to ensure proper cleanup in derived classes.
SizeArray m_chunking
Definition BaseIO.hpp:316
SizeArray m_shape
Definition BaseIO.hpp:314
BaseDataType m_type
Definition BaseIO.hpp:312
const SizeArray & getShape() const
Returns the shape of the dataset.
Definition BaseIO.hpp:277
const SizeArray & getChunking() const
Returns the chunking of the dataset.
Definition BaseIO.hpp:283
Status getProperties(const BaseIO *io, SizeArray &shape, SizeArray &chunking, BaseDataType &dataType) const override
Gets the shape, chunking, and data type from the configuration.
Definition BaseIO.hpp:298
ArrayDataSetConfig(const BaseDataType &type, const SizeArray &shape, const SizeArray &chunking)
Constructs an ArrayDataSetConfig object with the specified type, shape, and chunking.
Definition BaseIO.cpp:35
BaseDataType getType() const
Returns the data type of the dataset.
Definition BaseIO.hpp:271
Base class for array dataset configuration.
Definition BaseIO.hpp:205
virtual ~BaseArrayDataSetConfig()=default
Virtual destructor to ensure proper cleanup in derived classes.
virtual Status getProperties(const BaseIO *io, SizeArray &shape, SizeArray &chunking, BaseDataType &dataType) const =0
Gets the shape, chunking, and data type from the configuration.
virtual bool isLink() const
Checks if this configuration represents a link.
Definition BaseIO.hpp:216
Represents a base data type.
Definition BaseIO.hpp:47
static const BaseDataType F32
Accessor for 32-bit floating point.
Definition BaseIO.hpp:88
static const BaseDataType I64
Accessor for signed 64-bit integer.
Definition BaseIO.hpp:87
static BaseDataType STR(SizeType size)
Accessor for string with specified size.
Definition BaseIO.cpp:17
static const BaseDataType U32
Accessor for unsigned 32-bit integer.
Definition BaseIO.hpp:82
static const BaseDataType DSTR
Accessor for dynamic string.
Definition BaseIO.hpp:90
Type
Enumeration of different data types.
Definition BaseIO.hpp:53
@ V_STR
Variable length string.
Definition BaseIO.hpp:65
@ T_I32
Signed 32-bit integer.
Definition BaseIO.hpp:60
@ T_I64
Signed 64-bit integer.
Definition BaseIO.hpp:61
@ T_I8
Signed 8-bit integer.
Definition BaseIO.hpp:58
@ T_U32
Unsigned 32-bit integer.
Definition BaseIO.hpp:56
@ T_U64
Unsigned 64-bit integer.
Definition BaseIO.hpp:57
@ T_U8
Unsigned 8-bit integer.
Definition BaseIO.hpp:54
@ T_F32
32-bit floating point
Definition BaseIO.hpp:62
@ T_STR
String.
Definition BaseIO.hpp:64
@ T_F64
64-bit floating point
Definition BaseIO.hpp:63
@ T_U16
Unsigned 16-bit integer.
Definition BaseIO.hpp:55
@ T_I16
Signed 16-bit integer.
Definition BaseIO.hpp:59
static const BaseDataType U64
Accessor for unsigned 64-bit integer.
Definition BaseIO.hpp:83
static const BaseDataType U16
Accessor for unsigned 16-bit integer.
Definition BaseIO.hpp:81
static const BaseDataType F64
Accessor for 64-bit floating point.
Definition BaseIO.hpp:89
static const BaseDataType U8
Accessor for unsigned 8-bit integer.
Definition BaseIO.hpp:80
static const BaseDataType I32
Accessor for signed 32-bit integer.
Definition BaseIO.hpp:86
static const BaseDataType I16
Accessor for signed 16-bit integer.
Definition BaseIO.hpp:85
BaseDataType(Type t=T_I32, SizeType s=1)
Constructs a BaseDataType object with the specified type and size.
Definition BaseIO.cpp:11
Type type
The data type.
Definition BaseIO.hpp:76
SizeType typeSize
The size of the data type.
Definition BaseIO.hpp:77
std::variant< std::monostate, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< uint64_t >, std::vector< int8_t >, std::vector< int16_t >, std::vector< int32_t >, std::vector< int64_t >, std::vector< float >, std::vector< double >, std::vector< std::string > > BaseDataVectorVariant
Definition BaseIO.hpp:101
static BaseDataType fromTypeId(const std::type_index &typeIndex)
Get the BaseDataType from a std::type_index.
Definition BaseIO.hpp:122
bool operator==(const BaseDataType &other) const
Definition BaseIO.hpp:95
static const BaseDataType I8
Accessor for signed 8-bit integer.
Definition BaseIO.hpp:84
The BaseIO class is an abstract base class that defines the interface for input/output (IO) operation...
Definition BaseIO.hpp:479
virtual bool objectExists(const std::string &path) const =0
Checks whether a Dataset, Group, or Link already exists at the location in the file.
virtual StorageObjectType getStorageObjectType(std::string path) const =0
Get the storage type (Group, Dataset, Attribute) of the object at path.
virtual bool attributeExists(const std::string &path) const =0
Checks whether an Attribute exists at the location in the file.
std::string getFullTypeName(const std::string &path) const
Get the full name of the type from the attribute in the file.
Definition BaseIO.cpp:170
BaseIO & operator=(const BaseIO &)=delete
Assignment operator is deleted to prevent copying.
virtual Status createReferenceAttribute(const std::string &referencePath, const std::string &path, const std::string &name)=0
Sets an object reference attribute for a given location in the file.
virtual Status createStringDataSet(const std::string &path, const std::string &value)=0
Creates a non-modifiable dataset with a string value.
virtual Status close()=0
Closes the file.
Definition BaseIO.cpp:342
virtual std::unique_ptr< BaseRecordingData > createArrayDataSet(const BaseArrayDataSetConfig &config, const std::string &path)=0
Creates an extendable dataset with the given configuration and path.
BaseIO(const std::string &filename)
Constructor for the BaseIO class.
Definition BaseIO.cpp:149
bool isOpen() const
Returns true if the file is open.
Definition BaseIO.hpp:860
virtual Status stopRecording()
Stops the recording process.
Definition BaseIO.cpp:318
virtual Status createAttribute(const BaseDataType &type, const void *data, const std::string &path, const std::string &name, const SizeType &size=1)=0
Creates an attribute at a given location in the file.
virtual Status createAttribute(const std::string &data, const std::string &path, const std::string &name, const bool overwrite=false)=0
Creates a string attribute at a given location in the file.
virtual SizeArray getStorageObjectChunking(const std::string &path) const =0
Gets the chunking configuration of a dataset.
virtual ~BaseIO()
Destructor the BaseIO class.
Definition BaseIO.cpp:157
virtual std::unordered_map< std::string, std::string > findTypes(const std::string &starting_path, const std::unordered_set< std::string > &types, SearchMode search_mode, bool exclude_starting_path=false) const
Finds all datasets and groups of the given types in the HDF5 file.
Definition BaseIO.cpp:200
virtual Status createGroup(const std::string &path)=0
Creates a new group in the file.
Status createCommonNWBAttributes(const std::string &path, const std::string &objectNamespace, const std::string &neurodataType="")
Convenience function for creating NWB related attributes.
Definition BaseIO.cpp:159
virtual Status createLink(const std::string &path, const std::string &reference)=0
Creates a soft link to another location in the file.
const std::string m_filename
The name of the file.
Definition BaseIO.hpp:881
bool m_readyToOpen
Whether the file is ready to be opened.
Definition BaseIO.hpp:893
virtual Status flush()=0
Flush data to disk.
std::shared_ptr< RecordingObjects > getRecordingObjects() const
Returns the recording objects container for this IO object.
Definition BaseIO.hpp:872
bool isReadyToOpen() const
Returns true if the file is able to be opened.
Definition BaseIO.hpp:866
virtual std::vector< std::pair< std::string, StorageObjectType > > getStorageObjects(const std::string &path, const StorageObjectType &objectType=StorageObjectType::Undefined) const =0
Gets the list of storage objects (groups, datasets, attributes) inside a group.
virtual BaseDataType getStorageObjectDataType(const std::string &path) const =0
Gets the BaseDataType of a dataset or attribute.
virtual Status createAttribute(const std::vector< std::string > &data, const std::string &path, const std::string &name, const bool overwrite=false)=0
Creates an array of variable length strings attribute at a given location in the file.
virtual Status createGroupIfDoesNotExist(const std::string &path)=0
Creates a new group if it does not already exist.
virtual DataBlockGeneric readAttribute(const std::string &dataPath) const =0
Reads a attribute and determines the data type.
virtual std::string getFileName() const
Returns the full path to the file.
Definition BaseIO.hpp:505
virtual Status startRecording()
Starts the recording process.
Definition BaseIO.cpp:306
virtual std::shared_ptr< BaseRecordingData > getDataSet(const std::string &path)=0
Returns a pointer to a dataset at a given path.
virtual std::string readReferenceAttribute(const std::string &dataPath) const =0
Reads a reference attribute and returns the path to the referenced object.
virtual DataBlockGeneric readDataset(const std::string &dataPath, const SizeArray &start={}, const SizeArray &count={}, const SizeArray &stride={}, const SizeArray &block={})=0
Reads a dataset and determines the data type.
virtual bool canModifyObjects()
Returns true if the file is in a mode where objects can be added or deleted. Note,...
Definition BaseIO.hpp:796
BaseIO(const BaseIO &)=delete
Copy constructor is deleted to prevent construction-copying.
virtual Status open(FileMode mode)=0
Opens an existing file or creates a new file for writing.
virtual SizeArray getStorageObjectShape(const std::string &path) const =0
Returns the size of the dataset or attribute for each dimension.
virtual Status open()=0
Opens the file for writing.
virtual Status createReferenceDataSet(const std::string &path, const std::vector< std::string > &references)=0
Creates a dataset that holds an array of references to groups within the file.
virtual Status createStringDataSet(const std::string &path, const std::vector< std::string > &values)=0
Creates a dataset that holds an array of string values.
std::shared_ptr< RecordingObjects > m_recording_objects
The recording objects for tracking all RegisteredType objects used for recording associated with this...
Definition BaseIO.hpp:904
bool m_opened
Whether the file is currently open.
Definition BaseIO.hpp:898
The base class to represent recording data that can be extended.
Definition BaseIO.hpp:913
SizeType getNumDimensions() const
Get the number of dimensions in the dataset.
Definition BaseIO.hpp:980
virtual Status writeDataBlock(const SizeArray &dataShape, const SizeArray &positionOffset, const BaseDataType &type, const std::vector< std::string > &data)=0
Writes a block of string data (any number of dimensions).
Status writeDataBlock(const SizeArray &dataShape, const BaseDataType &type, const void *data)
Writes a block of data using the stored position information. This is not intended to be overwritten ...
Definition BaseIO.cpp:353
BaseRecordingData()
Default constructor.
Definition BaseIO.cpp:302
SizeArray m_position
The current position in the dataset.
Definition BaseIO.hpp:1003
virtual Status writeDataBlock(const SizeArray &dataShape, const SizeArray &positionOffset, const BaseDataType &type, const void *data)=0
Writes a block of data (any number of dimensions).
const SizeArray & getPosition() const
Get the current position in the dataset.
Definition BaseIO.hpp:992
SizeArray m_shape
The size of the dataset in each dimension.
Definition BaseIO.hpp:998
BaseRecordingData(const BaseRecordingData &)=delete
Deleted copy constructor to prevent construction-copying.
BaseRecordingData & operator=(const BaseRecordingData &)=delete
Deleted copy assignment operator to prevent copying.
virtual ~BaseRecordingData()
Destructor.
Definition BaseIO.cpp:304
const SizeArray & getShape() const
Get the size of the dataset.
Definition BaseIO.hpp:986
Generic structure to hold type-erased data and shape.
Definition ReadIO.hpp:34
Status validateTarget(const BaseIO &io, const std::vector< BaseDataType > &allowedTypes={}, const std::vector< SizeType > &allowedDimensionalities={}, const std::vector< std::string > &requiredAttributes={}) const
Validates the target dataset against expected requirements.
Definition BaseIO.cpp:70
Status getProperties(const BaseIO *io, SizeArray &shape, SizeArray &chunking, BaseDataType &dataType) const override
Gets the shape, chunking, and data type from the linked target dataset.
Definition BaseIO.hpp:446
SizeArray getTargetShape(const BaseIO &io) const
Queries and returns the shape of the linked target dataset.
Definition BaseIO.cpp:55
const std::string & getTargetPath() const
Returns the path to the target dataset.
Definition BaseIO.hpp:345
bool isLink() const override
Checks if this configuration represents a link.
Definition BaseIO.hpp:351
bool targetExists(const BaseIO &io) const
Checks if the target path exists in the file. This is a convenience method to check if the link targe...
Definition BaseIO.cpp:50
SizeArray getTargetChunking(const BaseIO &io) const
Gets the actual chunking configuration of the target dataset.
Definition BaseIO.cpp:60
BaseDataType getTargetDataType(const BaseIO &io) const
Gets the BaseDataType of the target dataset.
Definition BaseIO.cpp:65
LinkArrayDataSetConfig(const std::string &targetPath)
Constructs a LinkArrayDataSetConfig object with the target path.
Definition BaseIO.cpp:45
virtual ~LinkArrayDataSetConfig() override=default
Virtual destructor.
std::string m_targetPath
Definition BaseIO.hpp:466
The RecordingObjects class provides an interface for managing and holding groups of RegisteredType ob...
Definition RecordingObjects.hpp:27
StorageObjectType
Types of object used in the NWB schema.
Definition Types.hpp:56
Status
Represents the status of an operation.
Definition Types.hpp:25
std::vector< SizeType > SizeArray
Alias for an array of size types used in the project.
Definition Types.hpp:111
size_t SizeType
Alias for the size type used in the project.
Definition Types.hpp:100
The namespace for IO components of AqNWB.
FileMode
The access mode for the file.
Definition BaseIO.hpp:173
@ ReadOnly
Opens the file in read only mode.
Definition BaseIO.hpp:193
@ ReadWrite
Opens the file with both read and write access.
Definition BaseIO.hpp:185
@ Overwrite
Opens the file and overwrites any existing file.
Definition BaseIO.hpp:177
SearchMode
Enum class for specifying the search mode for findTypes.
Definition BaseIO.hpp:157
@ STOP_ON_TYPE
Stop searching inside an object once a matching type is found.
Definition BaseIO.hpp:161
@ CONTINUE_ON_TYPE
Continue searching inside an object even after a matching type is found.
Definition BaseIO.hpp:166