NCBI C++ ToolKit
huge_file.hpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: huge_file.hpp 102900 2024-08-03 18:20:28Z gotvyans $
2 * ===========================================================================
3 *
4 * PUBLIC DOMAIN NOTICE
5 * National Center for Biotechnology Information
6 *
7 * This software/database is a "United States Government Work" under the
8 * terms of the United States Copyright Act. It was written as part of
9 * the author's official duties as a United States Government employee and
10 * thus cannot be copyrighted. This software/database is freely available
11 * to the public for use. The National Library of Medicine and the U.S.
12 * Government have not placed any restriction on its use or reproduction.
13 *
14 * Although all reasonable efforts have been taken to ensure the accuracy
15 * and reliability of the software and data, the NLM and the U.S.
16 * Government do not and cannot warrant the performance or results that
17 * may be obtained by using this software or data. The NLM and the U.S.
18 * Government disclaim all warranties, express or implied, including
19 * warranties of performance, merchantability or fitness for any particular
20 * purpose.
21 *
22 * Please cite the author in any work or product based on this material.
23 *
24 * ===========================================================================
25 *
26 * Authors: Sergiy Gotvyanskyy
27 *
28 * File Description:
29 *
30 *
31 */
32 
33 #ifndef _HUGE_FILE_HPP_INCLUDED_
34 #define _HUGE_FILE_HPP_INCLUDED_
35 
36 #include <corelib/ncbistd.hpp>
37 #include <corelib/ncbiobj.hpp>
38 #include <serial/serialdef.hpp>
39 #include <util/format_guess.hpp>
40 
42 
43 class CMemoryFile;
44 class CObjectIStream;
45 
47 
48 class CSeq_entry;
49 class CSeq_submit;
50 class CSubmit_block;
51 class ILineErrorListener;
52 
54 
56 {
57 public:
58  CHugeFile();
59  virtual ~CHugeFile();
60  const set<TTypeInfo>* m_supported_types = nullptr;
61 
62  std::unique_ptr<CMemoryFile> m_memfile;
63  std::unique_ptr<std::istream> m_stream;
64  std::unique_ptr<std::streambuf> m_streambuf;
66  const char* m_memory = nullptr;
67  std::streampos m_filesize = 0;
68 
69  ESerialDataFormat m_serial_format = eSerial_None;
71  TTypeInfo m_content = nullptr;
72 
73  void Reset();
74  void Open(const std::string& filename, const set<TTypeInfo>* supported_types);
75  void OpenPlain(const std::string& filename);
76  bool IsOpen() const { return m_filesize != 0; }
77  TTypeInfo RecognizeContent(std::streampos pos);
78  TTypeInfo RecognizeContent(std::istream& istr);
79  unique_ptr<CObjectIStream> MakeObjStream(std::streampos pos = 0) const;
80 
81 private:
82  bool x_TryOpenStreamFile(const string& filename, std::streampos filesize);
83  bool x_TryOpenMemoryFile(const string& filename);
84 };
85 
87 {
88 public:
89  enum EErrCode
90  {
93  };
94  //virtual const char* GetErrCodeString(void) const override;
96 };
97 
99 {
100 public:
101  virtual void Open(CHugeFile* file, ILineErrorListener * pMessageListener) = 0;
102  virtual bool GetNextBlob() = 0;
104  virtual bool IsMultiSequence() const = 0;
106  virtual ~IHugeAsnSource(){};
107 protected:
109 };
110 
114 
115 #endif // _HUGE_ASN_READER_HPP_INCLUDED_
EFormat
The formats are checked in the same order as declared here.
@ eUnknown
unknown format
NCBI_EXCEPTION_DEFAULT(CHugeFileException, CException)
std::string m_filename
Definition: huge_file.hpp:65
std::unique_ptr< CMemoryFile > m_memfile
Definition: huge_file.hpp:62
std::unique_ptr< std::istream > m_stream
Definition: huge_file.hpp:63
std::unique_ptr< std::streambuf > m_streambuf
Definition: huge_file.hpp:64
bool IsOpen() const
Definition: huge_file.hpp:76
void Reset()
CMemoryFile –.
Definition: ncbifile.hpp:2861
CObjectIStream –.
Definition: objistr.hpp:93
CObject –.
Definition: ncbiobj.hpp:180
Definition: Seq_entry.hpp:56
CSubmit_block –.
CTypeInfo class contains all information about C++ types (both basic and classes): members and layout...
Definition: typeinfo.hpp:76
virtual void Open(CHugeFile *file, ILineErrorListener *pMessageListener)=0
virtual CRef< CSeq_entry > GetNextSeqEntry()=0
virtual bool GetNextBlob()=0
virtual CConstRef< CSubmit_block > GetSubmitBlock() const =0
virtual bool IsMultiSequence() const =0
virtual ~IHugeAsnSource()
Definition: huge_file.hpp:106
Definition: set.hpp:45
Include a standard set of the NCBI C++ Toolkit most basic headers.
string
Definition: cgiapp.hpp:690
EErrCode
Error types that an application can generate.
Definition: ncbiexpt.hpp:884
ESerialDataFormat
Data file format.
Definition: serialdef.hpp:71
@ eSerial_None
Definition: serialdef.hpp:72
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define END_SCOPE(ns)
End the previously defined scope.
Definition: ncbistl.hpp:75
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
#define BEGIN_SCOPE(ns)
Define a new scope.
Definition: ncbistl.hpp:72
#define NCBI_XHUGEASN_EXPORT
Definition: ncbi_export.h:809
FILE * file
Definition: fix_pub.hpp:45
Portable reference counted smart and weak pointers using CWeakRef, CRef, CObject and CObjectEx.
Modified on Fri Sep 20 14:57:40 2024 by modify_doxy.py rev. 669887