GraphLab: Distributed Graph-Parallel API  2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
unordered_map.hpp
1 /**
2  * Copyright (c) 2009 Carnegie Mellon University.
3  * All rights reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing,
12  * software distributed under the License is distributed on an "AS
13  * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14  * express or implied. See the License for the specific language
15  * governing permissions and limitations under the License.
16  *
17  * For more about this software visit:
18  *
19  * http://www.graphlab.ml.cmu.edu
20  *
21  */
22 
23 
24 #ifndef GRAPHLAB_SERIALIZE_UNORDERED_MAP_HPP
25 #define GRAPHLAB_SERIALIZE_UNORDERED_MAP_HPP
26 
27 #include <boost/unordered_map.hpp>
28 #include <graphlab/serialization/iarchive.hpp>
29 #include <graphlab/serialization/oarchive.hpp>
30 #include <graphlab/serialization/iterator.hpp>
31 
32 namespace graphlab {
33 
34 namespace archive_detail {
35  /** Serializes a map */
36  template <typename OutArcType, typename T, typename U>
37  struct serialize_impl<OutArcType, boost::unordered_map<T,U>, false > {
38  static void exec(OutArcType& oarc,
39  const boost::unordered_map<T,U>& vec){
40  serialize_iterator(oarc,
41  vec.begin(), vec.end(), vec.size());
42  }
43  };
44 
45  /** deserializes a map */
46 
47  template <typename InArcType, typename T, typename U>
48  struct deserialize_impl<InArcType, boost::unordered_map<T,U>, false > {
49  static void exec(InArcType& iarc, boost::unordered_map<T,U>& vec){
50  vec.clear();
51  // get the number of elements to deserialize
52  size_t length = 0;
53  iarc >> length;
54  // iterate through and send to the output iterator
55  for (size_t x = 0; x < length ; ++x){
56  std::pair<T, U> v;
57  iarc >> v;
58  vec[v.first] = v.second;
59  }
60  }
61  };
62 
63 } // archive_detail
64 } // graphlab
65 #endif
66