archive.hh
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. #ifndef ARCHIVE_HH_
  19. #define ARCHIVE_HH_
  20. #include "recordio.hh"
  21. namespace hadoop {
  22. class Index {
  23. public:
  24.   virtual bool done() = 0;
  25.   virtual void incr() = 0;
  26.   virtual ~Index() {}
  27. };
  28. class IArchive {
  29. public:
  30.   virtual void deserialize(int8_t& t, const char* tag) = 0;
  31.   virtual void deserialize(bool& t, const char* tag) = 0;
  32.   virtual void deserialize(int32_t& t, const char* tag) = 0;
  33.   virtual void deserialize(int64_t& t, const char* tag) = 0;
  34.   virtual void deserialize(float& t, const char* tag) = 0;
  35.   virtual void deserialize(double& t, const char* tag) = 0;
  36.   virtual void deserialize(std::string& t, const char* tag) = 0;
  37.   virtual void deserialize(std::string& t, size_t& len, const char* tag) = 0;
  38.   virtual void startRecord(hadoop::Record& s, const char* tag) = 0;
  39.   virtual void endRecord(hadoop::Record& s, const char* tag) = 0;
  40.   virtual Index* startVector(const char* tag) = 0;
  41.   virtual void endVector(Index* idx, const char* tag) = 0;
  42.   virtual Index* startMap(const char* tag) = 0;
  43.   virtual void endMap(Index* idx, const char* tag) = 0;
  44.   virtual void deserialize(hadoop::Record& s, const char* tag) {
  45.     s.deserialize(*this, tag);
  46.   }
  47.   template <typename T>
  48.   void deserialize(std::vector<T>& v, const char* tag) {
  49.     Index* idx = startVector(tag);
  50.     while (!idx->done()) {
  51.       T t;
  52.       deserialize(t, tag);
  53.       v.push_back(t);
  54.       idx->incr();
  55.     }
  56.     endVector(idx, tag);
  57.   }
  58.   template <typename K, typename V>
  59.   void deserialize(std::map<K,V>& v, const char* tag) {
  60.     Index* idx = startMap(tag);
  61.     while (!idx->done()) {
  62.       K key;
  63.       deserialize(key, tag);
  64.       V value;
  65.       deserialize(value, tag);
  66.       v[key] = value;
  67.       idx->incr();
  68.     }
  69.     endMap(idx, tag);
  70.   }
  71.   virtual ~IArchive() {}
  72. };
  73. class OArchive {
  74. public:
  75.   virtual void serialize(int8_t t, const char* tag) = 0;
  76.   virtual void serialize(bool t, const char* tag) = 0;
  77.   virtual void serialize(int32_t t, const char* tag) = 0;
  78.   virtual void serialize(int64_t t, const char* tag) = 0;
  79.   virtual void serialize(float t, const char* tag) = 0;
  80.   virtual void serialize(double t, const char* tag) = 0;
  81.   virtual void serialize(const std::string& t, const char* tag) = 0;
  82.   virtual void serialize(const std::string& t, size_t len, const char* tag) = 0;
  83.   virtual void startRecord(const hadoop::Record& s, const char* tag) = 0;
  84.   virtual void endRecord(const hadoop::Record& s, const char* tag) = 0;
  85.   virtual void startVector(size_t len, const char* tag) = 0;
  86.   virtual void endVector(size_t len, const char* tag) = 0;
  87.   virtual void startMap(size_t len, const char* tag) = 0;
  88.   virtual void endMap(size_t len, const char* tag) = 0;
  89.   virtual void serialize(const hadoop::Record& s, const char* tag) {
  90.     s.serialize(*this, tag);
  91.   }
  92.   template <typename T>
  93.   void serialize(const std::vector<T>& v, const char* tag) {
  94.     startVector(v.size(), tag);
  95.     if (v.size()>0) {
  96.       for (size_t cur = 0; cur<v.size(); cur++) {
  97.         serialize(v[cur], tag);
  98.       }
  99.     }
  100.     endVector(v.size(), tag);
  101.   }
  102.   template <typename K, typename V>
  103.   void serialize(const std::map<K,V>& v, const char* tag) {
  104.     startMap(v.size(), tag);
  105.     if (v.size()>0) {
  106.       typedef typename std::map<K,V>::const_iterator CI;
  107.       for (CI cur = v.begin(); cur!=v.end(); cur++) {
  108.         serialize(cur->first, tag);
  109.         serialize(cur->second, tag);
  110.       }
  111.     }
  112.     endMap(v.size(), tag);
  113.  }
  114.   virtual ~OArchive() {}
  115. };
  116. }; // end namespace hadoop
  117. #endif /*ARCHIVE_HH_*/