dev #2
17 changed files with 241 additions and 99 deletions
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
This file contains the declaration of all library types
|
This file contains the declaration of all library types
|
||||||
|
|
||||||
Copyright (c) 2022 Christian Zimmermann. All rights reserved.
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
Mail: chizeta@f3l.de
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
@ -28,9 +28,9 @@
|
||||||
|
|
||||||
namespace CNORXZ
|
namespace CNORXZ
|
||||||
{
|
{
|
||||||
/**********************
|
/*====================+
|
||||||
* standard types *
|
| standard types |
|
||||||
**********************/
|
=====================*/
|
||||||
|
|
||||||
typedef std::intptr_t PtrId;
|
typedef std::intptr_t PtrId;
|
||||||
typedef int32_t Int;
|
typedef int32_t Int;
|
||||||
|
@ -80,9 +80,9 @@ namespace CNORXZ
|
||||||
template <SizeT N>
|
template <SizeT N>
|
||||||
using CSizeT = std::integral_constant<SizeT,N>;
|
using CSizeT = std::integral_constant<SizeT,N>;
|
||||||
|
|
||||||
/*********************
|
/*===================+
|
||||||
* library types *
|
| library types |
|
||||||
*********************/
|
+===================*/
|
||||||
|
|
||||||
/***
|
/***
|
||||||
Naming Prefixes:
|
Naming Prefixes:
|
||||||
|
@ -302,9 +302,9 @@ namespace CNORXZ
|
||||||
template <class CXpr>
|
template <class CXpr>
|
||||||
class Contraction;
|
class Contraction;
|
||||||
|
|
||||||
/*********************
|
/*===================+
|
||||||
* derived types *
|
| derived types |
|
||||||
*********************/
|
+===================*/
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
using Vector = std::vector<T,Allocator<T>>;
|
using Vector = std::vector<T,Allocator<T>>;
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/h5_content_base.cc.h
|
||||||
|
@brief Implementation of template member functions of ContentBase
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_h5_content_base_cc_h__
|
#ifndef __cxz_h5_content_base_cc_h__
|
||||||
#define __cxz_h5_content_base_cc_h__
|
#define __cxz_h5_content_base_cc_h__
|
||||||
|
|
|
@ -81,6 +81,11 @@ namespace CNORXZ
|
||||||
*/
|
*/
|
||||||
virtual String filename() const = 0;
|
virtual String filename() const = 0;
|
||||||
|
|
||||||
|
/** Check if group exists in the parent object.
|
||||||
|
@return True if object exists, else false.
|
||||||
|
*/
|
||||||
|
virtual bool exists() const = 0;
|
||||||
|
|
||||||
/** Get object name.
|
/** Get object name.
|
||||||
@return The name of this object.
|
@return The name of this object.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/h5_dataset.cc.h
|
||||||
|
@brief Implementation of template member functions of Dataset and SDataset.
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_h5_dataset_cc_h__
|
#ifndef __cxz_h5_dataset_cc_h__
|
||||||
#define __cxz_h5_dataset_cc_h__
|
#define __cxz_h5_dataset_cc_h__
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/h5_dataset.h
|
||||||
|
@brief Dataset declaration.
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_h5_dataset_h__
|
#ifndef __cxz_h5_dataset_h__
|
||||||
#define __cxz_h5_dataset_h__
|
#define __cxz_h5_dataset_h__
|
||||||
|
@ -9,11 +19,21 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
namespace hdf5
|
namespace hdf5
|
||||||
{
|
{
|
||||||
|
/** ****
|
||||||
|
Class to handle hdf5 datasets.
|
||||||
|
*/
|
||||||
class Dataset : public ContentBase
|
class Dataset : public ContentBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DEFAULT_MEMBERS(Dataset);
|
DEFAULT_MEMBERS(Dataset); /**< Default constructors and assignments. */
|
||||||
|
|
||||||
|
/** Construct the class.
|
||||||
|
@param _name Dataset name.
|
||||||
|
@param _parent Parent content object.
|
||||||
|
*/
|
||||||
Dataset(const String& name, const ContentBase* _parent);
|
Dataset(const String& name, const ContentBase* _parent);
|
||||||
|
|
||||||
|
/** Destructor. Release all involved hdf5 ids. */
|
||||||
~Dataset();
|
~Dataset();
|
||||||
|
|
||||||
virtual ContentType type() const override final;
|
virtual ContentType type() const override final;
|
||||||
|
@ -22,32 +42,59 @@ namespace CNORXZ
|
||||||
virtual Dataset& close() override final;
|
virtual Dataset& close() override final;
|
||||||
virtual String path() const override final;
|
virtual String path() const override final;
|
||||||
virtual String filename() const override final;
|
virtual String filename() const override final;
|
||||||
|
virtual bool exists() const override final;
|
||||||
|
|
||||||
bool exists() const;
|
/** Initalize the dataset.
|
||||||
|
@param dataRange A potentially multi-dimensional range characterizing the dataset.
|
||||||
|
@param type Data type id.
|
||||||
|
*/
|
||||||
Dataset& init(const RangePtr& dataRange, hid_t type);
|
Dataset& init(const RangePtr& dataRange, hid_t type);
|
||||||
|
|
||||||
|
/** Initalize the dataset.
|
||||||
|
@param data Array containing the dataset.
|
||||||
|
*/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
Dataset& init(const ArrayBase<T>& data);
|
Dataset& init(const ArrayBase<T>& data);
|
||||||
|
|
||||||
|
/** Get the data range.
|
||||||
|
@return Pointer to the range.
|
||||||
|
*/
|
||||||
const RangePtr& dataRange() const;
|
const RangePtr& dataRange() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RangePtr mDataRange;
|
RangePtr mDataRange; /**< The data range. */
|
||||||
hid_t mType;
|
hid_t mType; /**< The data type identifier. */
|
||||||
hid_t mFilespace;
|
hid_t mFilespace; /**< The hdf5 file space identifier. */
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** ****
|
||||||
|
Class to handle hdf5 datasets, the value type is known at compile time.
|
||||||
|
@tparam T Dataset value type.
|
||||||
|
*/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class SDataset : public Dataset
|
class SDataset : public Dataset
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DEFAULT_MEMBERS(SDataset);
|
DEFAULT_MEMBERS(SDataset); /**< Default constructors and assignments. */
|
||||||
|
|
||||||
|
/** Construct the class.
|
||||||
|
@param _name Dataset name.
|
||||||
|
@param _parent Parent content object.
|
||||||
|
*/
|
||||||
SDataset(const String& name, const ContentBase* _parent);
|
SDataset(const String& name, const ContentBase* _parent);
|
||||||
|
|
||||||
|
/** Read the dataset.
|
||||||
|
@return Array containing the dataset values.
|
||||||
|
*/
|
||||||
MArray<T> read() const;
|
MArray<T> read() const;
|
||||||
|
|
||||||
|
/** Read a given subset of the dataset.
|
||||||
|
The subset needs to be hypercubic.
|
||||||
|
@param beg Index indicating the begin edge of the hypercube.
|
||||||
|
@param end Index indicating the end edge of the hypercube (inclusive).
|
||||||
|
@return Array containing the dataset values.
|
||||||
|
*/
|
||||||
template <class I, typename M>
|
template <class I, typename M>
|
||||||
MArray<T> read(const IndexInterface<I,M>& beg, const IndexInterface<I,M>& end) const;
|
MArray<T> read(const IndexInterface<I,M>& beg, const IndexInterface<I,M>& end) const;
|
||||||
|
|
||||||
|
|
|
@ -47,8 +47,12 @@ namespace CNORXZ
|
||||||
virtual File& close() override final;
|
virtual File& close() override final;
|
||||||
virtual String path() const override final;
|
virtual String path() const override final;
|
||||||
virtual String filename() const override final;
|
virtual String filename() const override final;
|
||||||
|
virtual bool exists() const override final;
|
||||||
|
|
||||||
virtual Int exists() const override final;
|
/** Check if handled file is in hdf5 format.
|
||||||
|
@return True if file is in hdf5 format, else false.
|
||||||
|
*/
|
||||||
|
bool ishdf5() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool mRo = true;
|
bool mRo = true;
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/h5_group.cc.h
|
||||||
|
@brief Implementation of template member functions of Group.
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_h5_group_cc_h__
|
#ifndef __cxz_h5_group_cc_h__
|
||||||
#define __cxz_h5_group_cc_h__
|
#define __cxz_h5_group_cc_h__
|
||||||
|
@ -9,6 +19,26 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
namespace hdf5
|
namespace hdf5
|
||||||
{
|
{
|
||||||
|
template <SizeT I, typename... Ts>
|
||||||
|
constexpr const auto& tget(const Tuple<Ts...>& t)
|
||||||
|
{
|
||||||
|
return std::get<sizeof...(Ts)-I-1>(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <SizeT I, typename... Ts>
|
||||||
|
constexpr auto& tget(Tuple<Ts...>& t)
|
||||||
|
{
|
||||||
|
return std::get<sizeof...(Ts)-I-1>(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <SizeT N, typename... Ts>
|
||||||
|
SizeT getTupleOffset(const Tuple<Ts...>& t, CSizeT<N> i)
|
||||||
|
{
|
||||||
|
const PtrId beg = reinterpret_cast<PtrId>(&t);
|
||||||
|
const PtrId pos = reinterpret_cast<PtrId>(&tget<i>(t));
|
||||||
|
return pos - beg;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
Sptr<STable<Ts...>> Group::getTable(const String& name, Tuple<Ts...> proto)
|
Sptr<STable<Ts...>> Group::getTable(const String& name, Tuple<Ts...> proto)
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,11 +42,7 @@ namespace CNORXZ
|
||||||
virtual Group& close() override;
|
virtual Group& close() override;
|
||||||
virtual String path() const override;
|
virtual String path() const override;
|
||||||
virtual String filename() const override;
|
virtual String filename() const override;
|
||||||
|
virtual bool exists() const override;
|
||||||
/** Check if group exists in the parent object.
|
|
||||||
@return 1 if group exists, 0 if not, -1 if an error occured.
|
|
||||||
*/
|
|
||||||
virtual Int exists() const; // TODO: virtual function of base class
|
|
||||||
|
|
||||||
/** Get object contained by this group.
|
/** Get object contained by this group.
|
||||||
@param name Object name.
|
@param name Object name.
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/h5_table.cc.h
|
||||||
|
@brief Implementation of template member functions of Table and STable.
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_h5_table_cc_h__
|
#ifndef __cxz_h5_table_cc_h__
|
||||||
#define __cxz_h5_table_cc_h__
|
#define __cxz_h5_table_cc_h__
|
||||||
|
|
|
@ -44,6 +44,7 @@ namespace CNORXZ
|
||||||
virtual Table& close() override final;
|
virtual Table& close() override final;
|
||||||
virtual String path() const override final;
|
virtual String path() const override final;
|
||||||
virtual String filename() const override final;
|
virtual String filename() const override final;
|
||||||
|
virtual bool exists() const override final;
|
||||||
|
|
||||||
/** Ininitialize table field names.
|
/** Ininitialize table field names.
|
||||||
@param fnames Table field names.
|
@param fnames Table field names.
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/h5_type_id.h
|
||||||
|
@brief TypeId template implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_h5_type_id_cc_h__
|
#ifndef __cxz_h5_type_id_cc_h__
|
||||||
#define __cxz_h5_type_id_cc_h__
|
#define __cxz_h5_type_id_cc_h__
|
||||||
|
@ -8,37 +18,9 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
namespace hdf5
|
namespace hdf5
|
||||||
{
|
{
|
||||||
template <typename... Ts>
|
/*============+
|
||||||
decltype(auto) reverseTuple(const Tuple<Ts...>& t)
|
| TypeId |
|
||||||
{
|
+============*/
|
||||||
return iter<0,sizeof...(Ts)>
|
|
||||||
( [&](auto i) { return tget<i>(t); },
|
|
||||||
[](const auto&... e) { return std::make_tuple(e...); } );
|
|
||||||
}
|
|
||||||
|
|
||||||
template <SizeT I, typename... Ts>
|
|
||||||
constexpr const auto& tget(const Tuple<Ts...>& t)
|
|
||||||
{
|
|
||||||
return std::get<sizeof...(Ts)-I-1>(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <SizeT I, typename... Ts>
|
|
||||||
constexpr auto& tget(Tuple<Ts...>& t)
|
|
||||||
{
|
|
||||||
return std::get<sizeof...(Ts)-I-1>(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <SizeT N, typename... Ts>
|
|
||||||
SizeT getTupleOffset(const Tuple<Ts...>& t, CSizeT<N> i)
|
|
||||||
{
|
|
||||||
const PtrId beg = reinterpret_cast<PtrId>(&t);
|
|
||||||
const PtrId pos = reinterpret_cast<PtrId>(&tget<i>(t));
|
|
||||||
return pos - beg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************
|
|
||||||
* TypeId *
|
|
||||||
**************/
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline hid_t TypeId<T>::get()
|
inline hid_t TypeId<T>::get()
|
||||||
|
@ -68,9 +50,9 @@ namespace CNORXZ
|
||||||
return arrtype;
|
return arrtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************
|
/*===============+
|
||||||
* getTypeId *
|
| getTypeId |
|
||||||
*****************/
|
+===============*/
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
hid_t getTypeId(T x)
|
hid_t getTypeId(T x)
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/h5_type_id.h
|
||||||
|
@brief TypeId template declaration.
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __cxz_h5_type_id_h__
|
#ifndef __cxz_h5_type_id_h__
|
||||||
#define __cxz_h5_type_id_h__
|
#define __cxz_h5_type_id_h__
|
||||||
|
@ -8,43 +18,57 @@ namespace CNORXZ
|
||||||
{
|
{
|
||||||
namespace hdf5
|
namespace hdf5
|
||||||
{
|
{
|
||||||
template <typename... Ts>
|
/** ****
|
||||||
decltype(auto) reverseTuple(const Tuple<Ts...>& t);
|
Get a valid hdf5 id for a given type.
|
||||||
|
Return 0 if not implemented.
|
||||||
template <typename... Ts>
|
@tparam T The type.
|
||||||
using RTuple = typename std::remove_reference<decltype(reverseTuple(Tuple<Ts...>()))>::type;
|
*/
|
||||||
template <SizeT I, typename... Ts>
|
|
||||||
constexpr const auto& tget(const Tuple<Ts...>& t);
|
|
||||||
|
|
||||||
template <SizeT I, typename... Ts>
|
|
||||||
constexpr auto& tget(Tuple<Ts...>& t);
|
|
||||||
|
|
||||||
template <SizeT N, typename... Ts>
|
|
||||||
SizeT getTupleOffset(const Tuple<Ts...>& t, CSizeT<N> i);
|
|
||||||
|
|
||||||
/**************
|
|
||||||
* TypeId *
|
|
||||||
**************/
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct TypeId { static inline hid_t get(); };
|
struct TypeId
|
||||||
|
{
|
||||||
|
/** Get the type id. */
|
||||||
|
static inline hid_t get();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Specialization of TypeId for SizeT. */
|
||||||
template <>
|
template <>
|
||||||
struct TypeId<SizeT> { static inline hid_t get(); };
|
struct TypeId<SizeT>
|
||||||
|
{
|
||||||
|
/** Get the type id for SizeT. */
|
||||||
|
static inline hid_t get();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Specialization of TypeId for Int. */
|
||||||
template <>
|
template <>
|
||||||
struct TypeId<Int> { static inline hid_t get(); };
|
struct TypeId<Int>
|
||||||
|
{
|
||||||
|
/** Get the type id for Int. */
|
||||||
|
static inline hid_t get();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Specialization of TypeId for Double. */
|
||||||
template <>
|
template <>
|
||||||
struct TypeId<Double> { static inline hid_t get(); };
|
struct TypeId<Double>
|
||||||
|
{
|
||||||
|
/** Get the type id for Double. */
|
||||||
|
static inline hid_t get();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Specialization of TypeId for an array
|
||||||
|
@tparam T Element type.
|
||||||
|
@tparam N Array size.
|
||||||
|
*/
|
||||||
template <typename T, SizeT N>
|
template <typename T, SizeT N>
|
||||||
struct TypeId<Arr<T,N>> { static inline hid_t get(); };
|
struct TypeId<Arr<T,N>>
|
||||||
|
{
|
||||||
/*****************
|
/** Get the type id for the given array. */
|
||||||
* getTypeId *
|
static inline hid_t get();
|
||||||
*****************/
|
};
|
||||||
|
|
||||||
|
/** Wrapper function for TypeId::get()
|
||||||
|
@param Variable of given type.
|
||||||
|
@return A type id of the input variable's type.
|
||||||
|
*/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
hid_t getTypeId(T x);
|
hid_t getTypeId(T x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,15 @@
|
||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
|
||||||
|
@file opt/hdf5/include/types.h
|
||||||
|
@brief Declaration of hdf5 related library types
|
||||||
|
|
||||||
|
This file contains the declaration of all hdf5 related library types
|
||||||
|
|
||||||
|
Copyright (c) 2024 Christian Zimmermann. All rights reserved.
|
||||||
|
Mail: chizeta@f3l.de
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
#ifndef __h5_types_h__
|
#ifndef __h5_types_h__
|
||||||
#define __h5_types_h__
|
#define __h5_types_h__
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace CNORXZ
|
||||||
}
|
}
|
||||||
Int ex = this->exists();
|
Int ex = this->exists();
|
||||||
const String fn = this->filename();
|
const String fn = this->filename();
|
||||||
CXZ_ASSERT( ex != 2, "tried to open non-h5 file '" << fn << "'" );
|
CXZ_ASSERT( ishdf5(), "tried to open non-h5 file '" << fn << "'" );
|
||||||
if(mRo){
|
if(mRo){
|
||||||
CXZ_ASSERT( ex == 1, "could not open file as read-only: '"
|
CXZ_ASSERT( ex == 1, "could not open file as read-only: '"
|
||||||
<< fn << "' does not exist'");
|
<< fn << "' does not exist'");
|
||||||
|
@ -79,21 +79,25 @@ namespace CNORXZ
|
||||||
return name();
|
return name();
|
||||||
}
|
}
|
||||||
|
|
||||||
Int File::exists() const
|
bool File::exists() const
|
||||||
{
|
{
|
||||||
Int ex = 0;
|
bool ex = false;
|
||||||
std::ifstream fs(this->filename().c_str(), std::ios_base::binary);
|
std::ifstream fs(this->filename().c_str(), std::ios_base::binary);
|
||||||
if(fs.good()){
|
if(fs.good()){
|
||||||
ex = 1; // file exists
|
ex = true; // file exists
|
||||||
}
|
}
|
||||||
fs.close();
|
fs.close();
|
||||||
if(ex != 0){
|
|
||||||
if(H5Fis_hdf5(this->filename().c_str()) <= 0){
|
|
||||||
ex = 2; // file not in h5 format
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ex;
|
return ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool File::ishdf5() const
|
||||||
|
{
|
||||||
|
if(exists()){
|
||||||
|
if(H5Fis_hdf5(this->filename().c_str()) <= 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true; // a non-existing file can be created in hdf5 format
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,9 +69,9 @@ namespace CNORXZ
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
Int Group::exists() const
|
bool Group::exists() const
|
||||||
{
|
{
|
||||||
return H5Lexists(mParent->id(), mName.c_str(), H5P_DEFAULT) != 0 ? 1 : 0;
|
return H5Lexists(mParent->id(), mName.c_str(), H5P_DEFAULT) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ContentPtr& Group::get(const String& name) const
|
const ContentPtr& Group::get(const String& name) const
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace CNORXZ
|
||||||
Table::Table(const String& name, const ContentBase* _parent) :
|
Table::Table(const String& name, const ContentBase* _parent) :
|
||||||
ContentBase(name, _parent)
|
ContentBase(name, _parent)
|
||||||
{
|
{
|
||||||
if(H5Lexists(mParent->id(), mName.c_str(), H5P_DEFAULT)){
|
if(exists()){
|
||||||
hsize_t nfields = 0;
|
hsize_t nfields = 0;
|
||||||
hsize_t nrecords = 0;
|
hsize_t nrecords = 0;
|
||||||
H5TBget_table_info(mParent->id(), mName.c_str(), &nfields, &nrecords);
|
H5TBget_table_info(mParent->id(), mName.c_str(), &nfields, &nrecords);
|
||||||
|
@ -90,6 +90,13 @@ namespace CNORXZ
|
||||||
return mParent->filename();
|
return mParent->filename();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Table::exists() const
|
||||||
|
{
|
||||||
|
htri_t x = H5Lexists(mParent->id(), mName.c_str(), H5P_DEFAULT);
|
||||||
|
VCHECK(x);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
Table& Table::initFieldNames(const Vector<String>& fnames)
|
Table& Table::initFieldNames(const Vector<String>& fnames)
|
||||||
{
|
{
|
||||||
CXZ_ASSERT(mFields == nullptr, "fields already initialized");
|
CXZ_ASSERT(mFields == nullptr, "fields already initialized");
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace
|
||||||
CIndex j(fs);
|
CIndex j(fs);
|
||||||
for(i = 0; i.lex() != rs->size(); ++i){
|
for(i = 0; i.lex() != rs->size(); ++i){
|
||||||
iter<0,3>( [&](auto jj)
|
iter<0,3>( [&](auto jj)
|
||||||
{ j = jj; mTabD[i*j] = DType(tget<jj>(v[i.lex()])); }, NoF{} );
|
{ j = jj; mTabD[i*j] = DType(std::get<3-jj-1>(v[i.lex()])); }, NoF{} );
|
||||||
}
|
}
|
||||||
|
|
||||||
const SizeT ddim = 5;
|
const SizeT ddim = 5;
|
||||||
|
|
Loading…
Reference in a new issue