stringbuffer.h (rapidjson-1.0.2) | : | stringbuffer.h (rapidjson-1.1.0) | ||
---|---|---|---|---|
skipping to change at line 18 | skipping to change at line 18 | |||
// http://opensource.org/licenses/MIT | // http://opensource.org/licenses/MIT | |||
// | // | |||
// Unless required by applicable law or agreed to in writing, software distribut ed | // Unless required by applicable law or agreed to in writing, software distribut ed | |||
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR | // 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 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the | |||
// specific language governing permissions and limitations under the License. | // specific language governing permissions and limitations under the License. | |||
#ifndef RAPIDJSON_STRINGBUFFER_H_ | #ifndef RAPIDJSON_STRINGBUFFER_H_ | |||
#define RAPIDJSON_STRINGBUFFER_H_ | #define RAPIDJSON_STRINGBUFFER_H_ | |||
#include "rapidjson.h" | #include "stream.h" | |||
#include "internal/stack.h" | ||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS | #if RAPIDJSON_HAS_CXX11_RVALUE_REFS | |||
#include <utility> // std::move | #include <utility> // std::move | |||
#endif | #endif | |||
#include "internal/stack.h" | #include "internal/stack.h" | |||
#if defined(__clang__) | ||||
RAPIDJSON_DIAG_PUSH | ||||
RAPIDJSON_DIAG_OFF(c++98-compat) | ||||
#endif | ||||
RAPIDJSON_NAMESPACE_BEGIN | RAPIDJSON_NAMESPACE_BEGIN | |||
//! Represents an in-memory output stream. | //! Represents an in-memory output stream. | |||
/*! | /*! | |||
\tparam Encoding Encoding of the stream. | \tparam Encoding Encoding of the stream. | |||
\tparam Allocator type for allocating memory buffer. | \tparam Allocator type for allocating memory buffer. | |||
\note implements Stream concept | \note implements Stream concept | |||
*/ | */ | |||
template <typename Encoding, typename Allocator = CrtAllocator> | template <typename Encoding, typename Allocator = CrtAllocator> | |||
class GenericStringBuffer { | class GenericStringBuffer { | |||
skipping to change at line 51 | skipping to change at line 57 | |||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS | #if RAPIDJSON_HAS_CXX11_RVALUE_REFS | |||
GenericStringBuffer(GenericStringBuffer&& rhs) : stack_(std::move(rhs.stack_ )) {} | GenericStringBuffer(GenericStringBuffer&& rhs) : stack_(std::move(rhs.stack_ )) {} | |||
GenericStringBuffer& operator=(GenericStringBuffer&& rhs) { | GenericStringBuffer& operator=(GenericStringBuffer&& rhs) { | |||
if (&rhs != this) | if (&rhs != this) | |||
stack_ = std::move(rhs.stack_); | stack_ = std::move(rhs.stack_); | |||
return *this; | return *this; | |||
} | } | |||
#endif | #endif | |||
void Put(Ch c) { *stack_.template Push<Ch>() = c; } | void Put(Ch c) { *stack_.template Push<Ch>() = c; } | |||
void PutUnsafe(Ch c) { *stack_.template PushUnsafe<Ch>() = c; } | ||||
void Flush() {} | void Flush() {} | |||
void Clear() { stack_.Clear(); } | void Clear() { stack_.Clear(); } | |||
void ShrinkToFit() { | void ShrinkToFit() { | |||
// Push and pop a null terminator. This is safe. | // Push and pop a null terminator. This is safe. | |||
*stack_.template Push<Ch>() = '\0'; | *stack_.template Push<Ch>() = '\0'; | |||
stack_.ShrinkToFit(); | stack_.ShrinkToFit(); | |||
stack_.template Pop<Ch>(1); | stack_.template Pop<Ch>(1); | |||
} | } | |||
void Reserve(size_t count) { stack_.template Reserve<Ch>(count); } | ||||
Ch* Push(size_t count) { return stack_.template Push<Ch>(count); } | Ch* Push(size_t count) { return stack_.template Push<Ch>(count); } | |||
Ch* PushUnsafe(size_t count) { return stack_.template PushUnsafe<Ch>(count); } | ||||
void Pop(size_t count) { stack_.template Pop<Ch>(count); } | void Pop(size_t count) { stack_.template Pop<Ch>(count); } | |||
const Ch* GetString() const { | const Ch* GetString() const { | |||
// Push and pop a null terminator. This is safe. | // Push and pop a null terminator. This is safe. | |||
*stack_.template Push<Ch>() = '\0'; | *stack_.template Push<Ch>() = '\0'; | |||
stack_.template Pop<Ch>(1); | stack_.template Pop<Ch>(1); | |||
return stack_.template Bottom<Ch>(); | return stack_.template Bottom<Ch>(); | |||
} | } | |||
skipping to change at line 85 | skipping to change at line 95 | |||
private: | private: | |||
// Prohibit copy constructor & assignment operator. | // Prohibit copy constructor & assignment operator. | |||
GenericStringBuffer(const GenericStringBuffer&); | GenericStringBuffer(const GenericStringBuffer&); | |||
GenericStringBuffer& operator=(const GenericStringBuffer&); | GenericStringBuffer& operator=(const GenericStringBuffer&); | |||
}; | }; | |||
//! String buffer with UTF8 encoding | //! String buffer with UTF8 encoding | |||
typedef GenericStringBuffer<UTF8<> > StringBuffer; | typedef GenericStringBuffer<UTF8<> > StringBuffer; | |||
template<typename Encoding, typename Allocator> | ||||
inline void PutReserve(GenericStringBuffer<Encoding, Allocator>& stream, size_t | ||||
count) { | ||||
stream.Reserve(count); | ||||
} | ||||
template<typename Encoding, typename Allocator> | ||||
inline void PutUnsafe(GenericStringBuffer<Encoding, Allocator>& stream, typename | ||||
Encoding::Ch c) { | ||||
stream.PutUnsafe(c); | ||||
} | ||||
//! Implement specialized version of PutN() with memset() for better performance . | //! Implement specialized version of PutN() with memset() for better performance . | |||
template<> | template<> | |||
inline void PutN(GenericStringBuffer<UTF8<> >& stream, char c, size_t n) { | inline void PutN(GenericStringBuffer<UTF8<> >& stream, char c, size_t n) { | |||
std::memset(stream.stack_.Push<char>(n), c, n * sizeof(c)); | std::memset(stream.stack_.Push<char>(n), c, n * sizeof(c)); | |||
} | } | |||
RAPIDJSON_NAMESPACE_END | RAPIDJSON_NAMESPACE_END | |||
#if defined(__clang__) | ||||
RAPIDJSON_DIAG_POP | ||||
#endif | ||||
#endif // RAPIDJSON_STRINGBUFFER_H_ | #endif // RAPIDJSON_STRINGBUFFER_H_ | |||
End of changes. 7 change blocks. | ||||
1 lines changed or deleted | 27 lines changed or added |