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

网格计算

开发平台:

Java

  1. /**
  2.  * Copyright 2007 The Apache Software Foundation
  3.  *
  4.  * Licensed to the Apache Software Foundation (ASF) under one
  5.  * or more contributor license agreements.  See the NOTICE file
  6.  * distributed with this work for additional information
  7.  * regarding copyright ownership.  The ASF licenses this file
  8.  * to you under the Apache License, Version 2.0 (the
  9.  * "License"); you may not use this file except in compliance
  10.  * with the License.  You may obtain a copy of the License at
  11.  *
  12.  *     http://www.apache.org/licenses/LICENSE-2.0
  13.  *
  14.  * Unless required by applicable law or agreed to in writing, software
  15.  * distributed under the License is distributed on an "AS IS" BASIS,
  16.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17.  * See the License for the specific language governing permissions and
  18.  * limitations under the License.
  19.  */
  20. package org.apache.hadoop.io;
  21. import java.io.DataInput;
  22. import java.io.DataOutput;
  23. import java.io.IOException;
  24. import java.util.Collection;
  25. import java.util.Comparator;
  26. import java.util.Map;
  27. import java.util.Set;
  28. import java.util.SortedMap;
  29. import java.util.TreeMap;
  30. import org.apache.hadoop.util.ReflectionUtils;
  31. /**
  32.  * A Writable SortedMap.
  33.  */
  34. public class SortedMapWritable extends AbstractMapWritable
  35.   implements SortedMap<WritableComparable, Writable> {
  36.   
  37.   private SortedMap<WritableComparable, Writable> instance;
  38.   
  39.   /** default constructor. */
  40.   public SortedMapWritable() {
  41.     super();
  42.     this.instance = new TreeMap<WritableComparable, Writable>();
  43.   }
  44.   
  45.   /**
  46.    * Copy constructor.
  47.    * 
  48.    * @param other the map to copy from
  49.    */
  50.   public SortedMapWritable(SortedMapWritable other) {
  51.     this();
  52.     copy(other);
  53.   }
  54.   /** {@inheritDoc} */
  55.   public Comparator<? super WritableComparable> comparator() {
  56.     // Returning null means we use the natural ordering of the keys
  57.     return null;
  58.   }
  59.   /** {@inheritDoc} */
  60.   public WritableComparable firstKey() {
  61.     return instance.firstKey();
  62.   }
  63.   /** {@inheritDoc} */
  64.   public SortedMap<WritableComparable, Writable>
  65.   headMap(WritableComparable toKey) {
  66.     
  67.     return instance.headMap(toKey);
  68.   }
  69.   /** {@inheritDoc} */
  70.   public WritableComparable lastKey() {
  71.     return instance.lastKey();
  72.   }
  73.   /** {@inheritDoc} */
  74.   public SortedMap<WritableComparable, Writable>
  75.   subMap(WritableComparable fromKey, WritableComparable toKey) {
  76.     
  77.     return instance.subMap(fromKey, toKey);
  78.   }
  79.   /** {@inheritDoc} */
  80.   public SortedMap<WritableComparable, Writable>
  81.   tailMap(WritableComparable fromKey) {
  82.     
  83.     return instance.tailMap(fromKey);
  84.   }
  85.   /** {@inheritDoc} */
  86.   public void clear() {
  87.     instance.clear();
  88.   }
  89.   /** {@inheritDoc} */
  90.   public boolean containsKey(Object key) {
  91.     return instance.containsKey(key);
  92.   }
  93.   /** {@inheritDoc} */
  94.   public boolean containsValue(Object value) {
  95.     return instance.containsValue(value);
  96.   }
  97.   /** {@inheritDoc} */
  98.   public Set<java.util.Map.Entry<WritableComparable, Writable>> entrySet() {
  99.     return instance.entrySet();
  100.   }
  101.   /** {@inheritDoc} */
  102.   public Writable get(Object key) {
  103.     return instance.get(key);
  104.   }
  105.   /** {@inheritDoc} */
  106.   public boolean isEmpty() {
  107.     return instance.isEmpty();
  108.   }
  109.   /** {@inheritDoc} */
  110.   public Set<WritableComparable> keySet() {
  111.     return instance.keySet();
  112.   }
  113.   /** {@inheritDoc} */
  114.   public Writable put(WritableComparable key, Writable value) {
  115.     addToMap(key.getClass());
  116.     addToMap(value.getClass());
  117.     return instance.put(key, value);
  118.   }
  119.   /** {@inheritDoc} */
  120.   public void putAll(Map<? extends WritableComparable, ? extends Writable> t) {
  121.     for (Map.Entry<? extends WritableComparable, ? extends Writable> e:
  122.       t.entrySet()) {
  123.       
  124.       instance.put(e.getKey(), e.getValue());
  125.     }
  126.   }
  127.   /** {@inheritDoc} */
  128.   public Writable remove(Object key) {
  129.     return instance.remove(key);
  130.   }
  131.   /** {@inheritDoc} */
  132.   public int size() {
  133.     return instance.size();
  134.   }
  135.   /** {@inheritDoc} */
  136.   public Collection<Writable> values() {
  137.     return instance.values();
  138.   }
  139.   /** {@inheritDoc} */
  140.   @SuppressWarnings("unchecked")
  141.   @Override
  142.   public void readFields(DataInput in) throws IOException {
  143.     super.readFields(in);
  144.     
  145.     // Read the number of entries in the map
  146.     
  147.     int entries = in.readInt();
  148.     
  149.     // Then read each key/value pair
  150.     
  151.     for (int i = 0; i < entries; i++) {
  152.       WritableComparable key =
  153.         (WritableComparable) ReflectionUtils.newInstance(getClass(
  154.             in.readByte()), getConf());
  155.       
  156.       key.readFields(in);
  157.       
  158.       Writable value = (Writable) ReflectionUtils.newInstance(getClass(
  159.           in.readByte()), getConf());
  160.       
  161.       value.readFields(in);
  162.       instance.put(key, value);
  163.     }
  164.   }
  165.   /** {@inheritDoc} */
  166.   @Override
  167.   public void write(DataOutput out) throws IOException {
  168.     super.write(out);
  169.     
  170.     // Write out the number of entries in the map
  171.     
  172.     out.writeInt(instance.size());
  173.     
  174.     // Then write out each key/value pair
  175.     
  176.     for (Map.Entry<WritableComparable, Writable> e: instance.entrySet()) {
  177.       out.writeByte(getId(e.getKey().getClass()));
  178.       e.getKey().write(out);
  179.       out.writeByte(getId(e.getValue().getClass()));
  180.       e.getValue().write(out);
  181.     }
  182.   }
  183. }