/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/rapidjson/cursorstreamwrapper.h Source File

/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/rapidjson/cursorstreamwrapper.h Source File#

Composable Kernel: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/rapidjson/cursorstreamwrapper.h Source File
cursorstreamwrapper.h
Go to the documentation of this file.
1 // Tencent is pleased to support the open source community by making RapidJSON available.
2 //
3 // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4 //
5 // Licensed under the MIT License (the "License"); you may not use this file except
6 // in compliance with the License. You may obtain a copy of the License at
7 //
8 // http://opensource.org/licenses/MIT
9 //
10 // Unless required by applicable law or agreed to in writing, software distributed
11 // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12 // CONDITIONS OF ANY KIND, either express or implied. See the License for the
13 // specific language governing permissions and limitations under the License.
14 
15 #ifndef RAPIDJSON_CURSORSTREAMWRAPPER_H_
16 #define RAPIDJSON_CURSORSTREAMWRAPPER_H_
17 
18 #include "stream.h"
19 
20 #if defined(__GNUC__)
21 RAPIDJSON_DIAG_PUSH
22 RAPIDJSON_DIAG_OFF(effc++)
23 #endif
24 
25 #if defined(_MSC_VER) && _MSC_VER <= 1800
26 RAPIDJSON_DIAG_PUSH
27 RAPIDJSON_DIAG_OFF(4702) // unreachable code
28 RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
29 #endif
30 
32 
34 
37 template <typename InputStream, typename Encoding = UTF8<>>
38 class CursorStreamWrapper : public GenericStreamWrapper<InputStream, Encoding>
39 {
40  public:
41  typedef typename Encoding::Ch Ch;
42 
43  CursorStreamWrapper(InputStream& is)
44  : GenericStreamWrapper<InputStream, Encoding>(is), line_(1), col_(0)
45  {
46  }
47 
48  // counting line and column number
49  Ch Take()
50  {
51  Ch ch = this->is_.Take();
52  if(ch == '\n')
53  {
54  line_++;
55  col_ = 0;
56  }
57  else
58  {
59  col_++;
60  }
61  return ch;
62  }
63 
65  size_t GetLine() const { return line_; }
67  size_t GetColumn() const { return col_; }
68 
69  private:
70  size_t line_;
71  size_t col_;
72 };
73 
74 #if defined(_MSC_VER) && _MSC_VER <= 1800
75 RAPIDJSON_DIAG_POP
76 #endif
77 
78 #if defined(__GNUC__)
79 RAPIDJSON_DIAG_POP
80 #endif
81 
83 
84 #endif // RAPIDJSON_CURSORSTREAMWRAPPER_H_
Cursor stream wrapper for counting line and column number if error exists.
Definition: cursorstreamwrapper.h:39
Encoding::Ch Ch
Definition: cursorstreamwrapper.h:41
CursorStreamWrapper(InputStream &is)
Definition: cursorstreamwrapper.h:43
size_t GetLine() const
Get the error line number, if error exists.
Definition: cursorstreamwrapper.h:65
Ch Take()
Definition: cursorstreamwrapper.h:49
size_t GetColumn() const
Get the error column number, if error exists.
Definition: cursorstreamwrapper.h:67
A Stream Wrapper.
Definition: stream.h:127
InputStream & is_
Definition: stream.h:148
Concept for encoding of Unicode characters.
#define RAPIDJSON_NAMESPACE_BEGIN
provide custom rapidjson namespace (opening expression)
Definition: rapidjson.h:121
#define RAPIDJSON_NAMESPACE_END
provide custom rapidjson namespace (closing expression)
Definition: rapidjson.h:124