tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

graphite.h (2063B)


      1 // Copyright (c) 2009-2017 The OTS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef OTS_GRAPHITE_H_
      6 #define OTS_GRAPHITE_H_
      7 
      8 #include <vector>
      9 #include <type_traits>
     10 
     11 namespace ots {
     12 
     13 template<typename ParentType>
     14 class TablePart {
     15 public:
     16  TablePart(ParentType* parent) : parent(parent) { }
     17  virtual ~TablePart() { }
     18  virtual bool ParsePart(Buffer& table) = 0;
     19  virtual bool SerializePart(OTSStream* out) const = 0;
     20 protected:
     21  ParentType* parent;
     22 };
     23 
     24 template<typename T>
     25 bool SerializeParts(const std::vector<T>& vec, OTSStream* out) {
     26  for (const T& part : vec) {
     27    if (!part.SerializePart(out)) {
     28      return false;
     29    }
     30  }
     31  return true;
     32 }
     33 
     34 template<typename T>
     35 bool SerializeParts(const std::vector<std::vector<T>>& vec, OTSStream* out) {
     36  for (const std::vector<T>& part : vec) {
     37    if (!SerializeParts(part, out)) {
     38      return false;
     39    }
     40  }
     41  return true;
     42 }
     43 
     44 inline bool SerializeParts(const std::vector<uint8_t>& vec, OTSStream* out) {
     45  for (uint8_t part : vec) {
     46    if (!out->WriteU8(part)) {
     47      return false;
     48    }
     49  }
     50  return true;
     51 }
     52 
     53 inline bool SerializeParts(const std::vector<uint16_t>& vec, OTSStream* out) {
     54  for (uint16_t part : vec) {
     55    if (!out->WriteU16(part)) {
     56      return false;
     57    }
     58  }
     59  return true;
     60 }
     61 
     62 inline bool SerializeParts(const std::vector<int16_t>& vec, OTSStream* out) {
     63  for (int16_t part : vec) {
     64    if (!out->WriteS16(part)) {
     65      return false;
     66    }
     67  }
     68  return true;
     69 }
     70 
     71 inline bool SerializeParts(const std::vector<uint32_t>& vec, OTSStream* out) {
     72  for (uint32_t part : vec) {
     73    if (!out->WriteU32(part)) {
     74      return false;
     75    }
     76  }
     77  return true;
     78 }
     79 
     80 inline bool SerializeParts(const std::vector<int32_t>& vec, OTSStream* out) {
     81  for (int32_t part : vec) {
     82    if (!out->WriteS32(part)) {
     83      return false;
     84    }
     85  }
     86  return true;
     87 }
     88 
     89 template<typename T>
     90 size_t datasize(std::vector<T> vec) {
     91  return sizeof(T) * vec.size();
     92 }
     93 
     94 }  // namespace ots
     95 
     96 #endif  // OTS_GRAPHITE_H_