Filestream.h
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // (c) 2007 by Basler Vision Technologies
3 // Section: Vision Components
4 // Project: GenApi
5 // Author: Thies Moeller
6 // $Header$
7 //
8 // License: This file is published under the license of the EMVA GenICam Standard Group.
9 // A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
10 // If for some reason you are missing this file please contact the EMVA or visit the website
11 // (http://www.genicam.org) for a full copy.
12 //
13 // THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
14 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
17 // OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23 // POSSIBILITY OF SUCH DAMAGE.
24 //-----------------------------------------------------------------------------
30 #ifndef GENAPI_FILESTREAM_H_
31 #define GENAPI_FILESTREAM_H_
32 
33 // #include <algorithm>
34 // #include <iostream>
35 // #include <streambuf>
36 #include <cstring>
37 #include <iomanip>
38 #include <iosfwd>
39 #include <cstring> // memcpy
40 //#include <cstdlib>
41 //#include <memory>
42 
43 #include <Base/GCUtilities.h>
44 
45 #include <GenICamFwd.h>
46 
47 
48 #if (__GNUC__)
49 # include <unistd.h>
50 #endif
51 
52 // We cannot use std::streamsize because in VC90/Win32 this was int but in VC120 it is int64
53 // So in order to preserve compiler interoperability we need to use our own declaration
55 
56 
57 // FileProtocolAdapter was a header only class before.
58 // Since it has been moved to GenApi.dll the user now has to explicitly link against GenApi import library to use it
59 // To minimize the pain we add the genapi lib using pragmas
60 #if defined (_MSC_VER)
61 
62 # include <Base/GCLinkage.h>
63 
64 // you can define GENICAM_NO_AUTO_IMPLIB to turn off automatic linkage of genicam libs
65 // you can define GENICAM_FORCE_AUTO_IMPLIB to enforce automatic linkage of genicam libs
66 # if defined(GENICAM_FORCE_AUTO_IMPLIB) || (!defined(GENICAM_NO_AUTO_IMPLIB) && !defined(GENAPI_EXPORTS))
67 # if defined (_WIN32) && defined (_MT )
68 # pragma comment(lib, LIB_NAME( "GenApi" ))
69 # else
70 # error Invalid configuration
71 # endif
72 # endif
73 
74 #endif // _MSC_VER
75 
76 #if defined (_MSC_VER)
77 # pragma warning(push)
78 # pragma warning (disable: 4251) // class 'GenApi::CPointer<T>' needs to have dll-interface to be used by clients of class 'GenICam::FileProtocolAdapter'
79 #endif
80 
81 namespace GENAPI_NAMESPACE
82 {
87  GENICAM_INTERFACE GENAPI_DECL_ABSTRACT IFileProtocolAdapter
88  {
89  virtual bool attach(GENAPI_NAMESPACE::INodeMap * pInterface) = 0;
90  virtual bool openFile(const char * pFileName, std::ios_base::openmode mode) = 0;
91  virtual bool closeFile(const char * pFileName) = 0;
92  virtual GenICam_streamsize write(const char * buf, int64_t offs, int64_t len, const char * pFileName) = 0;
93  virtual GenICam_streamsize read(char * buf, int64_t offs, GenICam_streamsize len, const char * pFileName) = 0;
94  virtual int64_t getBufSize(const char * pFileName, std::ios_base::openmode mode) = 0;
95  virtual bool deleteFile(const char * pFileName) = 0;
96 
97  };
107  public:
114  virtual ~FileProtocolAdapter();
115  private:
116  FileProtocolAdapter(const FileProtocolAdapter&); // not implemented
117  FileProtocolAdapter& operator=(const FileProtocolAdapter&); // not implemented
118  public:
119 
130  virtual bool attach(GENAPI_NAMESPACE::INodeMap * pInterface );
131 
132 
147  virtual bool openFile(const char * pFileName, std::ios_base::openmode mode);
148 
149 
160  virtual bool closeFile(const char * pFileName);
161 
162 
183  virtual GenICam_streamsize write(const char * buf, int64_t offs, int64_t len, const char * pFileName);
184 
185 
206  virtual GenICam_streamsize read(char * buf, int64_t offs, GenICam_streamsize len, const char * pFileName);
207 
208 
223  virtual int64_t getBufSize(const char * pFileName, std::ios_base::openmode mode);
224 
225 
236  virtual bool deleteFile(const char * pFileName);
237 
238  private:
239  void WaitUntilFileOperationExecuteDone( bool Validate = true );
240 
241  private:
242  // implementation details
243  struct FileProtocolAdapterImpl;
244  FileProtocolAdapterImpl* m_pImpl;
245  };
246 
247 
248  template<typename CharType, typename Traits> class IDevFileStreamBuf
249  : public std::basic_streambuf<CharType, Traits> {
250 
251  typedef Traits traits_type;
252  typedef typename Traits::int_type int_type;
253  typedef typename Traits::char_type char_type;
255 
256  // GET next ptr
257  using std::basic_streambuf<CharType, Traits>::gptr;
258  // GET end ptr
259  using std::basic_streambuf<CharType, Traits>::egptr;
260  // GET begin ptr
261  using std::basic_streambuf<CharType, Traits>::eback;
262  // increment next pointer
263  using std::basic_streambuf<CharType, Traits>::gbump;
264  // set buffer info
265  using std::basic_streambuf<CharType, Traits>::setg;
266 
267  public:
269  : m_pBuffer(0), m_BufSize(0), m_pAdapter(0), m_fpos(0) {
270  // This already handled by the base class constructor, right?
271  // std::basic_streambuf<CharType, Traits>::_Init();
272  };
273 
274 
276  {
277  // catch and dump all exceptions - we're in a destructor...
278  try
279  {
280  this->close();
281  }
282  catch(...)
283  {}
284  }
285 
286  filebuf_type *open(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName, std::ios_base::openmode mode = std::ios_base::in ) {
287  // get file protocol adapter
288  m_pAdapter = new FileProtocolAdapter();
289 
290  // open file via Adapter
291  if (!m_pAdapter || !m_pAdapter->attach(pInterface)){
292  delete m_pAdapter;
293  m_pAdapter = 0;
294  return 0;
295  }
296 
297  // open file via Adapter
298  try
299  {
300  if (!(m_pAdapter->openFile(pFileName, mode))){
301  delete m_pAdapter;
302  m_pAdapter = 0;
303  return 0;
304  }
305  }
306  catch (...)
307  {
308  delete m_pAdapter;
309  m_pAdapter = 0;
310  throw;
311  }
312 
313  m_file = pFileName;
314  // allocate buffer according to fileinfo
315  m_BufSize = (GenICam_streamsize)m_pAdapter->getBufSize(m_file.c_str(), mode);
316  m_pBuffer = new char_type[(unsigned int)m_BufSize / sizeof(char_type)];
317 
318  // setg(buffer+pbSize, buffer+pbSize, buffer+pbSize);
319  setg(m_pBuffer, m_pBuffer + m_BufSize,m_pBuffer + m_BufSize);
320 
321  #ifdef _MSC_VER
322  // is this reasonable?
323  std::basic_streambuf<CharType, Traits>::_Init();
324  #endif
325 
326  return this;
327  }
328 
329 
330 
331  bool
332  is_open() const
333  {
334  return m_pAdapter != 0;
335  }
336 
337  filebuf_type *close() {
338  filebuf_type * ret = 0;
339  if (this->is_open()) {
340  // close file
341  if(m_pAdapter->closeFile(m_file.c_str())){
342  // no error
343  ret = this;
344  }
345  delete m_pAdapter;
346  m_pAdapter = 0;
347  // buffer
348  delete[] m_pBuffer;
349  m_pBuffer = 0;
350  }
351  return ret;
352  }
353 
354 
355  protected:
356  int_type underflow() {
357  if (gptr() < egptr() )
358  return traits_type::to_int_type(*gptr());
359 
360  if (buffer_in() < 0)
361  return traits_type::eof();
362  else
363  return traits_type::to_int_type(*gptr());
364 
365  }
366 
367  int_type pbackfail(int_type c) {
368  if (gptr() != eback() || eback()<gptr()) {
369  gbump(-1);
370  if (!traits_type::eq_int_type(c, traits_type::eof() ) )
371  *(gptr()) = static_cast<char_type>(traits_type::not_eof(c));
372  return traits_type::not_eof(c);
373  } else
374  return traits_type::eof();
375  }
376 
377  private:
378  char_type * m_pBuffer;
380 
384 
385 
386 
387  int buffer_in() {
388 
389  GenICam_streamsize retval = m_pAdapter->read(m_pBuffer, m_fpos, m_BufSize, m_file.c_str());
390 
391  if (retval <= 0) {
392  setg(0, 0, 0);
393  return -1;
394  } else {
395  setg(m_pBuffer, m_pBuffer , m_pBuffer + retval);
396  m_fpos += retval;
397  return GENICAM_NAMESPACE::INTEGRAL_CAST2<int, GenICam_streamsize>(retval);
398  }
399  }
400 
401 
402  // prohibit copying and assignment
404  IDevFileStreamBuf& operator=(const IDevFileStreamBuf&);
405  };
406 
407 
408  template<typename CharType, typename Traits> class ODevFileStreamBuf
409  : public std::basic_streambuf<CharType, Traits> {
410  typedef Traits traits_type;
411 
412  typedef typename Traits::int_type int_type;
413  typedef typename Traits::char_type char_type;
414  typedef typename Traits::pos_type pos_type;
415  typedef typename Traits::off_type off_type;
416 
418 
419 
420  // PUT begin
421  using std::basic_streambuf<CharType, Traits>::pbase;
422  // PUT next
423  using std::basic_streambuf<CharType, Traits>::pptr;
424  // PUT end
425  using std::basic_streambuf<CharType, Traits>::epptr;
426  // increment next pointer
427  using std::basic_streambuf<CharType, Traits>::pbump;
428 
429  public:
431  : m_pBuffer(0), m_file(0), m_pAdapter(0), m_fpos(0) {
432  }
433 
435  this->close();
436  }
437 
438  filebuf_type *open(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName, std::ios_base::openmode mode) {
439 
440  FileProtocolAdapter *pAdapter = NULL;
441  char_type *pBuffer = NULL;
442  filebuf_type *pFileBuf = NULL;
443  try
444  {
445  pAdapter = new FileProtocolAdapter();
446  if (pAdapter)
447  {
448  if (pAdapter->attach( pInterface ))
449  {
450  if (pAdapter->openFile( pFileName, mode ))
451  {
452  if (int64_t bufSize = pAdapter->getBufSize( pFileName, mode ))
453  {
454  pBuffer = new char_type[GENICAM_NAMESPACE::INTEGRAL_CAST<size_t>( bufSize ) / sizeof( char_type )];
455  if (pBuffer)
456  {
457  std::basic_streambuf<CharType, Traits>::setp( pBuffer, pBuffer + bufSize );
458  m_file = pFileName;
459  std::swap( m_pAdapter, pAdapter );
460  std::swap( m_pBuffer, pBuffer );
461  pFileBuf = this;
462  }
463  }
464  }
465  }
466  }
467  }
468  catch (...)
469  {
470  delete pAdapter;
471  delete pBuffer;
472  throw;
473  }
474  delete pAdapter;
475  delete pBuffer;
476 
477  return pFileBuf;
478 
479  }
480 
481  bool
482  is_open() const {
483  return m_pAdapter != 0;
484  }
485 
486  filebuf_type *close() {
487  filebuf_type * ret = 0;
488  bool syncFailed = false;
489  if (this->is_open()) {
490  if (sync()){
491  syncFailed = true;
492  };
493  // close file
494  if(m_pAdapter->closeFile(m_file)){
495  // no error
496  if ( syncFailed ){
497  ret = 0;
498  } else {
499  ret = this;
500  }
501  }
502  delete m_pAdapter;
503  m_pAdapter = 0;
504  // buffer
505  delete[] m_pBuffer;
506  m_pBuffer = 0;
507  }
508  return ret;
509  }
510 
511  protected:
512  GenICam_streamsize xsputn(const char_type * s, GenICam_streamsize n) {
513  if (n < epptr() - pptr() ) {
514  memcpy( pptr(), s, (size_t)(n * sizeof(char_type)));
515  pbump( GENICAM_NAMESPACE::INTEGRAL_CAST2<int>(n) );
516  return n;
517  } else {
518  for (GenICam_streamsize i = 0; i<n; ++i) {
519  if (traits_type::eq_int_type(std::basic_streambuf<CharType, Traits>::sputc(s[i]), traits_type::eof()))
520  return i;
521  }
522  return n;
523  }
524 
525  }
526  int_type overflow(int_type c = traits_type::eof()) {
527  if (buffer_out() < 0) {
528  return traits_type::eof();
529  } else {
530  if (!traits_type::eq_int_type (c, traits_type::eof() ) )
531  return std::basic_streambuf<CharType, Traits>::sputc(static_cast<char_type>(c));
532  else
533  return traits_type::not_eof(c);
534  }
535 
536  }
537  int sync() {
538  return GENICAM_NAMESPACE::INTEGRAL_CAST<int>(buffer_out());
539  }
540 
541  private:
542  char_type * m_pBuffer; // buffer[bufSize];
543  const char * m_file;
546 
548  int64_t cnt = pptr() - pbase();
549 
550  int64_t retval;
551  int64_t res = m_pAdapter->write(m_pBuffer, m_fpos, cnt, m_file);
552 
553  if (res != cnt) {
554  retval = -1;
555  } else {
556  retval = 0;
557  }
558  m_fpos += res;
559 
560  pbump(- GENICAM_NAMESPACE::INTEGRAL_CAST<int>(cnt));
561  return retval;
562  }
563 
564  // prohibit copying assignment
567  };
568 
569  template<typename CharType, typename Traits> class ODevFileStreamBase
570  : public std::basic_ostream<CharType, Traits> {
571  public:
572  // Non-standard types:
574  typedef std::basic_ios<CharType, Traits> ios_type;
575  typedef std::basic_ostream<CharType, Traits> ostream_type;
576 
577  private:
578  filebuf_type m_streambuf;
579  public:
580 
581 #if defined (_MSC_VER)
583  : ostream_type(std::_Noinit), m_streambuf() {
584  this->init(&m_streambuf);
585  }
586 
587  ODevFileStreamBase(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName, std::ios_base::openmode mode = std::ios_base::out|std::ios_base::trunc)
588  : ostream_type(std::_Noinit), m_streambuf() {
589  this->init(&m_streambuf);
590  this->open(pInterface, pFileName, mode);
591  }
592  ;
593 
594 #elif defined (__GNUC__)
596  : ostream_type(), m_streambuf() {
597  this->init(&m_streambuf);
598  }
599 
600  ODevFileStreamBase(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName, std::ios_base::openmode mode = std::ios_base::out|std::ios_base::trunc)
601  : ostream_type(), m_streambuf() {
602  this->init(&m_streambuf);
603  this->open(pInterface, pFileName, mode);
604  }
605  ;
606 
607 
608 #else
609 # error Unknown C++ library
610 #endif
611 
612 
613 
614  filebuf_type *rdbuf() const {
615  return const_cast<filebuf_type*>(&m_streambuf);
616  }
617 
618  /* bool is_open() {
619  return m_streambuf.is_open();
620  } */
621 
622  bool is_open() const {
623  return m_streambuf.is_open();
624  }
625 
635  void open(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName,
636  std::ios_base::openmode mode = std::ios_base::out | std::ios_base::trunc) {
637  if (!m_streambuf.open(pInterface,pFileName, mode)){
638  this->setstate(std::ios_base::failbit);
639  }
640  else{
641  this->clear();
642  }
643  }
644 
649  void close() {
650  if (!m_streambuf.close())
651  this->setstate(std::ios_base::failbit);
652  }
653  };
654 
655  template<typename CharType, typename Traits> class IDevFileStreamBase
656  : public std::basic_istream<CharType, Traits> {
657  public:
658 
659  // Non-standard types:
661  typedef std::basic_ios<CharType, Traits> ios_type;
662  typedef std::basic_istream<CharType, Traits> istream_type;
663 
664  private:
665  filebuf_type m_streambuf;
666  public:
667 
668 #if defined (_MSC_VER)
670  : istream_type(std::_Noinit), m_streambuf() {
671  this->init(&m_streambuf);
672  }
673 
674  IDevFileStreamBase(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName,
675  std::ios_base::openmode mode = std::ios_base::in)
676  : istream_type(std::_Noinit), m_streambuf() {
677  this->init(&m_streambuf);
678  this->open(pInterface, pFileName, mode);
679  }
680  ;
681 
682 #elif defined (__APPLE__)
684  : istream_type(0), m_streambuf() {
685  this->init(&m_streambuf);
686  }
687 
688  IDevFileStreamBase(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName,
689  std::ios_base::openmode mode = std::ios_base::in)
690  : istream_type(0), m_streambuf() {
691  this->init(&m_streambuf);
692  this->open(pInterface, pFileName, mode);
693  }
694  ;
695 
696 #elif defined (__GNUC__)
698  : istream_type(), m_streambuf() {
699  this->init(&m_streambuf);
700  }
701 
702  IDevFileStreamBase(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName,
703  std::ios_base::openmode mode = std::ios_base::in)
704  : istream_type(), m_streambuf() {
705  this->init(&m_streambuf);
706  this->open(pInterface, pFileName, mode);
707  }
708  ;
709 
710 #else
711 # error Unknown C++ library
712 #endif
713 
714 
715  filebuf_type *rdbuf() const {
716  return const_cast<filebuf_type*>(&m_streambuf);
717  }
718 
719  /* bool is_open() {
720  return m_streambuf.is_open();
721  } */
722 
723  bool is_open() const {
724  return m_streambuf.is_open();
725  }
726 
727  /* @brief
728  * Open file on device in write mode
729  *
730  * @param pInterface NodeMap of the device to which the FileProtocolAdapter is attached
731  * @param pFileName Name of the file to open
732  * @param mode open mode
733  */
734  void open(GENAPI_NAMESPACE::INodeMap * pInterface, const char * pFileName,
735  std::ios_base::openmode mode = std::ios_base::in) {
736  if (!m_streambuf.open(pInterface,pFileName, mode))
737  this->setstate(std::ios_base::failbit);
738  else
739  this->clear();
740  }
741 
745  void close() {
746  if (!m_streambuf.close())
747  this->setstate(std::ios_base::failbit);
748  }
749  };
750 
753 }
754 
755 #if defined (_MSC_VER)
756 # pragma warning(pop)
757 #endif
758 
759 
760 #endif /*GENAPI_FILESTREAM_H_*/
void open(GENAPI_NAMESPACE::INodeMap *pInterface, const char *pFileName, std::ios_base::openmode mode=std::ios_base::out|std::ios_base::trunc)
Open file on device in write mode.
Definition: Filestream.h:635
ODevFileStreamBase< char, std::char_traits< char > > ODevFileStream
Definition: Filestream.h:751
std::basic_ostream< CharType, Traits > ostream_type
Definition: Filestream.h:575
#define GENICAM_INTERFACE
Definition: GenICamFwd.h:33
virtual GenICam_streamsize read(char *buf, int64_t offs, GenICam_streamsize len, const char *pFileName)=0
void close()
Close the file on device.
Definition: Filestream.h:649
filebuf_type * open(GENAPI_NAMESPACE::INodeMap *pInterface, const char *pFileName, std::ios_base::openmode mode=std::ios_base::in)
Definition: Filestream.h:286
helpers for pragma linkage
filebuf_type * rdbuf() const
Definition: Filestream.h:614
std::basic_istream< CharType, Traits > istream_type
Definition: Filestream.h:662
GENICAM_NAMESPACE::gcstring m_file
Definition: Filestream.h:381
FileProtocolAdapter * m_pAdapter
Definition: Filestream.h:382
std::basic_ios< CharType, Traits > ios_type
Definition: Filestream.h:574
Adapter between the std::iostreambuf and the SFNC Features representing the device filesystem...
Definition: Filestream.h:106
virtual bool openFile(const char *pFileName, std::ios_base::openmode mode)=0
int_type overflow(int_type c=traits_type::eof())
Definition: Filestream.h:526
virtual void operator=(bool Value)
Set node value.
Definition: IBoolean.h:64
__int64 int64_t
Definition: config-win32.h:21
void open(GENAPI_NAMESPACE::INodeMap *pInterface, const char *pFileName, std::ios_base::openmode mode=std::ios_base::in)
Definition: Filestream.h:734
virtual GenICam_streamsize write(const char *buf, int64_t offs, int64_t len, const char *pFileName)
writes data into a file
GENICAM_INTERFACE INodeMap
Interface to access the node map.
Definition: INode.h:52
IDevFileStreamBuf< CharType, Traits > filebuf_type
Definition: Filestream.h:254
#define GENAPI_DECL
Definition: GenApiDll.h:55
IDevFileStreamBuf< CharType, Traits > filebuf_type
Definition: Filestream.h:660
int_type pbackfail(int_type c)
Definition: Filestream.h:367
FileProtocolAdapter * m_pAdapter
Definition: Filestream.h:544
virtual bool closeFile(const char *pFileName)=0
GenICam_streamsize xsputn(const char_type *s, GenICam_streamsize n)
Definition: Filestream.h:512
virtual int64_t getBufSize(const char *pFileName, std::ios_base::openmode mode)=0
ODevFileStreamBuf< CharType, Traits > filebuf_type
Definition: Filestream.h:417
FileProtocolAdapterImpl * m_pImpl
Definition: Filestream.h:243
virtual bool openFile(const char *pFileName, std::ios_base::openmode mode)
open a file on the device
virtual bool attach(GENAPI_NAMESPACE::INodeMap *pInterface)
attach file protocol adapter to nodemap
virtual GenICam_streamsize read(char *buf, int64_t offs, GenICam_streamsize len, const char *pFileName)
read data from the device into a buffer
Forward declarations for GenICam types.
filebuf_type * open(GENAPI_NAMESPACE::INodeMap *pInterface, const char *pFileName, std::ios_base::openmode mode)
Definition: Filestream.h:438
int64_t GenICam_streamsize
Definition: Filestream.h:54
virtual bool deleteFile(const char *pFileName)=0
std::basic_ios< CharType, Traits > ios_type
Definition: Filestream.h:661
A string class which is a clone of std::string.
Definition: GCString.h:52
GENICAM_INTERFACE GENAPI_DECL_ABSTRACT IFileProtocolAdapter
Adapter between the std::iostreambuf and the SFNC Features representing the device filesystem...
Definition: Filestream.h:88
void close()
Close the file on the device.
Definition: Filestream.h:745
ODevFileStreamBuf< CharType, Traits > filebuf_type
Definition: Filestream.h:573
filebuf_type * rdbuf() const
Definition: Filestream.h:715
IDevFileStreamBase< char, std::char_traits< char > > IDevFileStream
Definition: Filestream.h:752
virtual const char * c_str(void) const
Lexical analyzer for CIntSwissKnife.
Definition: Autovector.h:48
virtual GenICam_streamsize write(const char *buf, int64_t offs, int64_t len, const char *pFileName)=0
GenICam common utilities.
virtual int64_t getBufSize(const char *pFileName, std::ios_base::openmode mode)
fetch max FileAccessBuffer length for a file


rc_genicam_api
Author(s): Heiko Hirschmueller
autogenerated on Wed Mar 17 2021 02:48:40