14 #ifndef __INCLUDED_SCOPIRA_BASEKIT_DIRECTIO_H__ 15 #define __INCLUDED_SCOPIRA_BASEKIT_DIRECTIO_H__ 19 #include <scopira/tool/platform.h> 20 #include <scopira/tool/export.h> 21 #include <scopira/tool/fileflow.h> 22 #include <scopira/tool/array.h> 23 #include <scopira/basekit/narray.h> 29 struct directio_header_t;
31 SCOPIRA_EXPORT
bool save_directio_file_impl(
const std::string &filename,
short numdimen,
const size_t *dimen,
size_t elemsize,
const char *
id,
const void *data);
32 SCOPIRA_EXPORT
bool load_directio_file_impl(
const std::string &filename,
short numdimen,
size_t *dimen,
size_t elemsize,
const char *
id,
void * &outary);
33 SCOPIRA_EXPORT
bool bind_direct_file_impl(
scopira::tool::fileflow *f, scopira::tool::byte_t * &baseary,
size_t len, narray_delete_i * &func,
bool readonly);
34 SCOPIRA_EXPORT
bool create_directio_file_impl(
const std::string &filename,
short numdimen,
size_t *dimen,
size_t elemsize,
const char *
id);
35 SCOPIRA_EXPORT
bool bind_directio_file_impl(
const std::string &filename,
short numdimen,
size_t *dimen,
size_t elemsize,
const char *
id,
bool readonly,
void * &outary, narray_delete_i * &outfunc);
36 SCOPIRA_EXPORT
void sync_directio_file(narray_delete_i *d);
40 template <>
class directio_traints<float> {
public:
static const char * get_name(
void) {
return "float32"; } };
41 template <>
class directio_traints<double> {
public:
static const char * get_name(
void) {
return "float64"; } };
42 template <>
class directio_traints<char> {
public:
static const char * get_name(
void) {
return "int8"; } };
43 template <>
class directio_traints<short> {
public:
static const char * get_name(
void) {
return "int16"; } };
44 template <>
class directio_traints<int> {
public:
static const char * get_name(
void) {
return "int32"; } };
60 std::string &elementtype, std::vector<size_t> &dimen);
72 template <
class T,
int DIM>
94 template <
class T,
int DIM>
108 template <
class T,
int DIM>
112 scopira::tool::byte_t *baseary;
115 if (!bind_direct_file_impl(f, baseary, sz.
product()*
sizeof(T)+skipb, func, readonly))
136 template <
class T,
int DIM>
158 template <
class T,
int DIM>
169 template <
class T,
int DIM>
193 SCOPIRA_EXPORT
bool failed(
void)
const {
return dm_file.failed(); }
202 assert(dm_dimen.size()>0);
203 return dm_dimen[dm_dimen.size()-1];
218 SCOPIRA_EXPORT
bool open_file(
const std::string &filename,
bool readonly,
219 size_t dimlen,
size_t elemsize,
const char *elemname);
222 SCOPIRA_EXPORT
void verify_dimen(
const char *elemname,
size_t subprod);
223 SCOPIRA_EXPORT
size_t seek_slice(
size_t r,
size_t elemsize);
227 scopira::tool::fileflow::offset_t dm_baseoffset;
229 const char *dm_elemname;
250 bool open_file(
const std::string &filename,
bool readonly) {
260 assert(DIM == dm_dimen.size());
263 for (
int i=0; i<ret.size(); ++i)
264 ret[i] = dm_dimen[i];
274 assert(DIM == dm_dimen.size());
277 for (
int i=0; i<ret.size(); ++i)
278 ret[i] = dm_dimen[i];
289 size_t numelem = seek_slice(r,
sizeof(T));
290 return dm_file.read_array(out.
c_array(), numelem) == numelem;
300 size_t numelem = seek_slice(r,
sizeof(T));
301 return dm_file.write_array(out.
c_array(), numelem) == numelem;
bool open_file(const std::string &filename, bool readonly)
Definition: directio.h:250
bool failed(void) const
Definition: directio.h:193
directio_slice(void)
ctor
Definition: directio.h:242
Definition: archiveflow.h:20
Definition: directio.h:39
const index_type & dimen(void) const
gets the size of this array
Definition: narray.h:867
narray_delete_i * normal_narray_delete
bool bind_directio_file(const std::string &filename, narray< T, DIM > &out, bool readonly=false)
Definition: directio.h:159
void resize_direct(index_type sz, T *direct_ary, scopira::basekit::narray_delete_i *delfunc=null_narray_delete)
Definition: narray.h:1373
size_t product(void) const
Return the product of this coord.
Definition: narray.h:713
Definition: directio.h:176
scopira::basekit::nindex< DIM > dimen(void) const
Definition: directio.h:259
bool open_file(const std::string &filename, bool readonly, size_t dimlen, size_t elemsize, const char *elemname)
scopira::basekit::nindex< DIM-1 > slice_dimen(void) const
Definition: directio.h:273
scopira::basekit::narray_delete_i * get_direct(void) const
gets the direct status/handler. non-null for direct mode
Definition: narray.h:923
bool load_directio_file(const std::string &filename, scopira::basekit::narray< T, DIM > &out)
Definition: directio.h:73
bool load_slice(size_t r, scopira::basekit::narray< T, DIM-1 > &out)
Definition: directio.h:287
const T * c_array(void) const
raw c-array style access
Definition: narray.h:843
Definition: directio.h:185
bool bind_direct_file(scopira::tool::fileflow *f, scopira::basekit::nindex< DIM > sz, scopira::basekit::narray< T, DIM > &out, bool readonly=false, scopira::tool::fileflow::offset_t skipb=0)
Definition: directio.h:109
size_t size_rows(void) const
Definition: directio.h:201
bool query_directio_file(const std::string &filename, std::string &elementtype, std::vector< size_t > &dimen)
bool create_directio_file(const std::string &filename, nindex< DIM > sz)
Definition: directio.h:137
bool save_slice(size_t r, scopira::basekit::narray< T, DIM-1 > &out)
Definition: directio.h:298
bool save_directio_file(const std::string &filename, const scopira::basekit::narray< T, DIM > &in)
Definition: directio.h:95
void resize(size_t len)
Definition: narray.h:877