119 lines
3.7 KiB
Diff
119 lines
3.7 KiB
Diff
From 799fdea9fc05aa74c2ebfb49340943195ac2e1dc Mon Sep 17 00:00:00 2001
|
|
From: KaitoHH <hh.kaito@gmail.com>
|
|
Date: Thu, 28 Sep 2017 16:57:52 +0800
|
|
Subject: [PATCH] add cursor wrapper
|
|
|
|
---
|
|
include/rapidjson/cursorstreamwrapper.h | 59 +++++++++++++++++++++++++
|
|
include/rapidjson/stream.h | 37 +++++-----------
|
|
4 files changed, 72 insertions(+), 47 deletions(-)
|
|
create mode 100644 include/rapidjson/cursorstreamwrapper.h
|
|
|
|
diff --git a/include/rapidjson/cursorstreamwrapper.h b/include/rapidjson/cursorstreamwrapper.h
|
|
new file mode 100644
|
|
index 000000000..5c752af41
|
|
--- /dev/null
|
|
+++ b/include/rapidjson/cursorstreamwrapper.h
|
|
@@ -0,0 +1,59 @@
|
|
+// Tencent is pleased to support the open source community by making RapidJSON available.
|
|
+//
|
|
+// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
|
+//
|
|
+// Licensed under the MIT License (the "License"); you may not use this file except
|
|
+// in compliance with the License. You may obtain a copy of the License at
|
|
+//
|
|
+// http://opensource.org/licenses/MIT
|
|
+//
|
|
+// Unless required by applicable law or agreed to in writing, software distributed
|
|
+// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
+// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
+// specific language governing permissions and limitations under the License.
|
|
+
|
|
+#ifndef RAPIDJSON_CURSORSTREAMWRAPPER_H_
|
|
+#define RAPIDJSON_CURSORSTREAMWRAPPER_H_
|
|
+
|
|
+#include "stream.h"
|
|
+
|
|
+RAPIDJSON_NAMESPACE_BEGIN
|
|
+
|
|
+
|
|
+//! Cursor stream wrapper for counting line and column number if error exists.
|
|
+/*!
|
|
+ \tparam InputStream Any stream that implements Stream Concept
|
|
+*/
|
|
+template <typename InputStream, typename Encoding = UTF8<> >
|
|
+class CursorStreamWrapper : public GenericStreamWrapper<InputStream, Encoding> {
|
|
+public:
|
|
+ typedef typename Encoding::Ch Ch;
|
|
+
|
|
+ CursorStreamWrapper(InputStream& is):
|
|
+ GenericStreamWrapper<InputStream, Encoding>(is), line_(1), col_(0) {}
|
|
+
|
|
+ // counting line and column number
|
|
+ Ch Take() {
|
|
+ Ch ch = this->is_.Take();
|
|
+ if(ch == '\n') {
|
|
+ line_ ++;
|
|
+ col_ = 0;
|
|
+ } else {
|
|
+ col_ ++;
|
|
+ }
|
|
+ return ch;
|
|
+ }
|
|
+
|
|
+ //! Get the error line number, if error exists.
|
|
+ size_t GetLine() const { return line_; }
|
|
+ //! Get the error column number, if error exists.
|
|
+ size_t GetColumn() const { return col_; }
|
|
+
|
|
+private:
|
|
+ size_t line_; //!< Current Line
|
|
+ size_t col_; //!< Current Column
|
|
+};
|
|
+
|
|
+RAPIDJSON_NAMESPACE_END
|
|
+
|
|
+#endif // RAPIDJSON_CURSORSTREAMWRAPPER_H_
|
|
--- a/include/rapidjson/stream.h 2025-04-19 22:38:11.560827241 +0200
|
|
+++ - 2025-04-19 22:39:40.261791105 +0200
|
|
@@ -109,27 +109,17 @@
|
|
\tmessage to the origin stream.
|
|
\note implements Stream concept
|
|
*/
|
|
-template <typename InputStream, typename Encoding>
|
|
+template <typename InputStream, typename Encoding = UTF8<> >
|
|
class GenericStreamWrapper {
|
|
public:
|
|
typedef typename Encoding::Ch Ch;
|
|
size_t line_;
|
|
size_t col_;
|
|
- GenericStreamWrapper(InputStream& is): line_(1), col_(0), is_(is) {}
|
|
+ GenericStreamWrapper(InputStream& is): is_(is) {}
|
|
|
|
Ch Peek() const { return is_.Peek(); }
|
|
|
|
- // counting line and column number
|
|
- Ch Take() {
|
|
- Ch ch = is_.Take();
|
|
- if(ch == '\n') {
|
|
- line_ ++;
|
|
- col_ = 0;
|
|
- } else {
|
|
- col_ ++;
|
|
- }
|
|
- return ch;
|
|
- }
|
|
+ Ch Take() { return is_.Take(); }
|
|
size_t Tell() { return is_.Tell(); }
|
|
|
|
Ch* PutBegin() { return is_.PutBegin(); }
|
|
@@ -144,7 +134,7 @@
|
|
UTFType GetType() const { return is_.GetType(); }
|
|
bool HasBOM() const { return is_.HasBOM(); }
|
|
|
|
-private:
|
|
+protected:
|
|
InputStream& is_;
|
|
};
|
|
|