Index: sdch/open_vcdiff/depot/opensource/open-vcdiff/src/varint_bigendian.h |
=================================================================== |
--- sdch/open_vcdiff/depot/opensource/open-vcdiff/src/varint_bigendian.h (revision 2678) |
+++ sdch/open_vcdiff/depot/opensource/open-vcdiff/src/varint_bigendian.h (working copy) |
@@ -1,140 +0,0 @@ |
-// Copyright 2008 Google Inc. |
-// Author: Lincoln Smith |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// 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 OPEN_VCDIFF_VARINT_BIGENDIAN_H_ |
-#define OPEN_VCDIFF_VARINT_BIGENDIAN_H_ |
- |
-// Functions for manipulating variable-length integers as described in |
-// RFC 3284, section 2. (See http://www.ietf.org/rfc/rfc3284.txt) |
-// This is the same format used by the Sfio library |
-// and by the public-domain Sqlite package. |
-// |
-// The implementation found in this file contains buffer bounds checks |
-// (not available in sqlite) and its goal is to improve speed |
-// by using as few test-and-branch instructions as possible. |
-// |
-// The Sqlite format has the refinement that, if a 64-bit value is expected, |
-// the ninth byte of the varint does not have a continuation bit, but instead |
-// encodes 8 bits of information. This allows 64 bits to be encoded compactly |
-// in nine bytes. However, that refinement does not appear in the format |
-// description in RFC 3284, and so it is not used here. In any case, |
-// this header file deals only with *signed* integer types, and so a |
-// "64-bit" integer is allowed to have only 63 significant bits; an additional |
-// 64th bit would indicate a negative value and therefore an error. |
-// |
- |
-#include <config.h> |
-#include <stdint.h> // int32_t, int64_t |
-#include <string> |
-#include "vcdiff_defs.h" // RESULT_ERROR |
- |
-namespace open_vcdiff { |
- |
-using std::string; |
- |
-class OutputStringInterface; |
- |
-// This helper class is needed in order to ensure that |
-// VarintBE<SignedIntegerType>::kMaxBytes is treated |
-// as a compile-time constant when it is used as the size |
-// of a static array. |
-template <typename SignedIntegerType> class VarintMaxBytes; |
- |
-// 31 bits of data / 7 bits per byte <= 5 bytes |
-template<> class VarintMaxBytes<int32_t> { |
- public: |
- static const int kMaxBytes = 5; |
-}; |
- |
-// 63 bits of data / 7 bits per byte == 9 bytes |
-template<> class VarintMaxBytes<int64_t> { |
- public: |
- static const int kMaxBytes = 9; |
-}; |
- |
-// Objects of type VarintBE should not be instantiated. The class is a |
-// container for big-endian constant values and functions used to parse |
-// and write a particular signed integer type. |
-// Example: to parse a 32-bit integer value stored as a big-endian varint, use |
-// int32_t value = VarintBE<int32_t>::Parse(&ptr, limit); |
-// Only 32-bit and 64-bit signed integers (int32_t and int64_t) are supported. |
-// Using a different type as the template argument will likely result |
-// in a link-time error for an undefined Parse() or Append() function. |
-// |
-template <typename SignedIntegerType> |
-class VarintBE { // BE stands for Big-Endian |
- public: |
- // The maximum positive value represented by a SignedIntegerType. |
- static const SignedIntegerType kMaxVal; |
- |
- // Returns the maximum number of bytes needed to store a varint |
- // representation of a <SignedIntegerType> value. |
- static const int kMaxBytes = VarintMaxBytes<SignedIntegerType>::kMaxBytes; |
- |
- // Attempts to parse a big-endian varint from a prefix of the bytes |
- // in [ptr,limit-1] and convert it into a signed, non-negative 32-bit |
- // integer. Never reads a character at or beyond limit, and never reads |
- // a character at or beyond (*ptr + kMaxBytes). |
- // If a parsed varint would exceed the maximum value of |
- // a <SignedIntegerType>, returns RESULT_ERROR and does not modify *ptr. |
- // If parsing a varint at *ptr (without exceeding the capacity of |
- // a <SignedIntegerType>) would require reading past limit, |
- // returns RESULT_END_OF_DATA and does not modify *ptr. |
- // If limit == NULL, or limit < *ptr, no error will be signalled, but it is |
- // recommended that a limit always be supplied for security reasons. |
- static SignedIntegerType Parse(const char* limit, const char** ptr); |
- |
- // Returns the encoding length of the specified value. |
- static int Length(SignedIntegerType v); |
- |
- // Encodes "v" into "ptr" (which points to a buffer of length sufficient |
- // to hold "v")and returns the length of the encoding. |
- // The value of v must not be negative. |
- static int Encode(SignedIntegerType v, char* ptr); |
- |
- // Appends the varint representation of "value" to "*s". |
- // The value of v must not be negative. |
- static void AppendToString(SignedIntegerType value, string* s); |
- |
- // Appends the varint representation of "value" to output_string. |
- // The value of v must not be negative. |
- static void AppendToOutputString(SignedIntegerType value, |
- OutputStringInterface* output_string); |
- |
- private: |
- // Encodes "v" into the LAST few bytes of varint_buf (which is a char array |
- // of size kMaxBytes) and returns the length of the encoding. |
- // The result will be stored in buf[(kMaxBytes - length) : (kMaxBytes - 1)], |
- // rather than in buf[0 : length]. |
- // The value of v must not be negative. |
- static int EncodeInternal(SignedIntegerType v, char* varint_buf); |
- |
- // Returns true if bytes_left <= kMaxBytes AND the next bytes_left bytes |
- // starting at parse_ptr all have their continuation bit (most significant |
- // bit) set. This means that there may or may not be a valid encoded |
- // varint at parse_ptr, but it cannot be read or validated until more |
- // input is available. |
- static inline bool ReachedEndOfData(const char* parse_ptr, |
- const char* limit); |
- |
- // These are private to avoid constructing any objects of this type |
- VarintBE(); |
- VarintBE(const VarintBE&); // NOLINT |
- void operator=(const VarintBE&); |
-}; |
- |
-} // namespace open_vcdiff |
- |
-#endif // OPEN_VCDIFF_VARINT_BIGENDIAN_H_ |