From 5c9a0246d960808ac0de26a131fe833c7d99a4e2 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Tue, 27 May 2003 22:48:31 +0000 Subject: [PATCH] A streamable hash map. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2616 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../threerings/util/StreamableHashMap.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/java/com/threerings/util/StreamableHashMap.java diff --git a/src/java/com/threerings/util/StreamableHashMap.java b/src/java/com/threerings/util/StreamableHashMap.java new file mode 100644 index 000000000..ec190ea5f --- /dev/null +++ b/src/java/com/threerings/util/StreamableHashMap.java @@ -0,0 +1,66 @@ +// +// $Id: StreamableHashMap.java,v 1.1 2003/05/27 22:48:31 mdb Exp $ + +package com.threerings.util; + +import java.io.IOException; +import java.util.Iterator; +import java.util.HashMap; + +import com.threerings.io.ObjectInputStream; +import com.threerings.io.ObjectOutputStream; +import com.threerings.io.Streamable; + +/** + * A {@link HashMap} extension that can be streamed. The keys and values + * in the map must also be of streamable types. + * + * @see Streamable + */ +public class StreamableHashMap extends HashMap +{ + /** + * Constructs an empty hash map with the specified number of hash + * buckets. + */ + public StreamableHashMap (int buckets, float loadFactor) + { + super(buckets, loadFactor); + } + + /** + * Constructs an empty hash map with the default number of hash + * buckets. + */ + public StreamableHashMap () + { + super(); + } + + /** + * Writes our custom streamable fields. + */ + public void writeObject (ObjectOutputStream out) + throws IOException + { + int ecount = size(); + out.writeInt(ecount); + for (Iterator iter = keySet().iterator(); iter.hasNext(); ) { + Object key = iter.next(); + out.writeObject(key); + out.writeObject(get(key)); + } + } + + /** + * Reads our custom streamable fields. + */ + public void readObject (ObjectInputStream in) + throws IOException, ClassNotFoundException + { + int ecount = in.readInt(); + for (int ii = 0; ii < ecount; ii++) { + put(in.readObject(), in.readObject()); + } + } +}