Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cASNReader.h
Go to the documentation of this file.
1 //
5 
6 #ifndef _INC_cASNReader_H
7 #define _INC_cASNReader_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cASN.h"
14 
15 namespace GrayLib
16 {
17  class cBitArray;
18  class cASNSequence;
19  class cASNSets;
20 
22  {
26 
27  typedef cMemBlock SUPER_t;
28  friend class cASNBuf;
29  friend class cASNSequence;
30 
31  protected:
32  const BYTE* m_pInpCur;
33 
34  protected:
35  static HRESULT ReadStrUInt(const char* pData, size_t nSizeData, OUT UINT32& ruVal);
36 
37  HRESULT ReadLengthCode(OUT size_t& rSize);
38  HRESULT ReadTag(ASN_t nTagExpected, OUT size_t& rSizeData);
39 
40  public:
41  cASNReader(const BYTE* p = nullptr, size_t nSize = 0) noexcept
42  : cMemBlock(p, nSize)
43  , m_pInpCur(p)
44  {
46  }
47  cASNReader(const cMemBlock& b) noexcept
48  : cMemBlock(b)
49  , m_pInpCur(b.get_DataBytes())
50  {
52  }
53 
54  static HRESULT ReadInt(const BYTE* pData, size_t nSizeData, OUT int& riVal);
55  static HRESULT ReadTime(const char* pData, size_t nSizeData, bool bGeneral, OUT cTimeUnits& time);
56 
57  void SetBlock(const BYTE* p, size_t nSize)
58  {
59  SUPER_t::SetBlock(const_cast<BYTE*>(p), nSize);
60  m_pInpCur = p;
61  }
62 
63  size_t get_LenRead() const
64  {
66  ASSERT(m_pInpCur >= get_DataBytes());
67  return (size_t)cMem::Diff(m_pInpCur, get_DataBytes());
68  }
69  size_t get_LenLeft() const
70  {
72  ASSERT(m_pInpCur <= get_DataEnd());
73  return (size_t)cMem::Diff(get_DataEnd(), m_pInpCur);
74  }
75 
76  bool isEOF() const
77  {
79  return m_pInpCur >= get_DataEnd();
80  }
81  bool isEOFX() const
82  {
84  return m_pInpCur == get_DataEnd();
85  }
86 
87  const BYTE* get_InpCur() const noexcept
88  {
90  return m_pInpCur;
91  }
92  BYTE* get_InpUnk() const
93  {
95  return const_cast<BYTE*>(m_pInpCur); // Current read position. This Advances.
96  }
97  BYTE get_InpByte() const
98  {
100  ASSERT(!isEOF());
101  return m_pInpCur[0];
102  }
103 
104  inline void AddInpCur(size_t nSize)
105  {
107  m_pInpCur += nSize;
108  ASSERT(this->IsValidPtr2(m_pInpCur)); // NOT past end.
109  }
110  inline void AddInpCur(cMemBlock& r)
111  {
113  AddInpCur(r.get_DataSize());
114  }
115  void ResetReader()
116  {
118  m_pInpCur = get_DataBytes();
119  }
120 
121  HRESULT ReadTagBlock(ASN_t nTagExpected, OUT cMemBlock& r);
122 
123  HRESULT ReadTagBuf(ASN_t nTagExpected, OUT cASNBuf& r);
124 
125  HRESULT ReadTagChild(ASN_t nTagExpected, OUT cASNReader& r);
126 
127  HRESULT ReadTagBoolean(OUT bool& rVal);
128 
129  HRESULT ReadTagInt(OUT int& riVal);
130 
131  HRESULT ReadTagArrayBits(OUT cASNBuf& bs);
132 
133  HRESULT ReadTagArrayBits0(OUT size_t& rSizeData);
134 
135  HRESULT ReadTagBigInt(OUT cBitArray& X);
136 
137  HRESULT ReadTagTime(OUT cTimeUnits& time);
138 
139  HRESULT ReadTagSequence(ASN_TYPE tag, cASNSequence& head);
140 
141  HRESULT ReadTagSeqAlg(OUT cASNBuf& alg, OUT cASNBuf& params);
142 
143  HRESULT ReadTagSeqAlgNull(OUT cASNBuf& alg);
144 
145  HRESULT ReadSets(OUT cASNSets& cur);
146  };
147 }
148 
149 #endif // _INC_cASNReader_H
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cASN.h:78
Definition: cASNReader.h:22
const BYTE * get_InpCur() const noexcept
Definition: cASNReader.h:87
const BYTE * m_pInpCur
Current read position in cMemBlock. This Advances.
Definition: cASNReader.h:32
cASNReader(const cMemBlock &b) noexcept
Definition: cASNReader.h:47
cASNReader(const BYTE *p=nullptr, size_t nSize=0) noexcept
Definition: cASNReader.h:41
void SetBlock(const BYTE *p, size_t nSize)
Definition: cASNReader.h:57
size_t get_LenRead() const
Definition: cASNReader.h:63
void AddInpCur(cMemBlock &r)
Definition: cASNReader.h:110
bool isEOFX() const
Definition: cASNReader.h:81
void ResetReader()
Definition: cASNReader.h:115
BYTE get_InpByte() const
Definition: cASNReader.h:97
void AddInpCur(size_t nSize)
Definition: cASNReader.h:104
size_t get_LenLeft() const
Definition: cASNReader.h:69
bool isEOF() const
Definition: cASNReader.h:76
BYTE * get_InpUnk() const
Definition: cASNReader.h:92
Definition: cASNSequence.h:20
Definition: cASNSets.h:58
Definition: cBitArray.h:416
Definition: cMem.h:311
size_t get_DataSize() const noexcept
Definition: cMem.h:344
Definition: cTimeUnits.h:146
Definition: cMesh.h:22
ASN_TYPE
Definition: cASN.h:22
BYTE ASN_t
Definition: cASN.h:75
static ptrdiff_t Diff(const void *pEnd, const void *pStart) noexcept
Definition: cMem.h:34