From 5a3f7bbdc727e8bae130908c9114867bd57c648a Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Tue, 8 Mar 2011 22:30:19 +0000 Subject: [PATCH] Tidy this up by making it recursive. Deeply multidimensional arrays are rare. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6527 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- src/main/java/com/threerings/io/Streamer.java | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/threerings/io/Streamer.java b/src/main/java/com/threerings/io/Streamer.java index 299690f3e..6b24ee40d 100644 --- a/src/main/java/com/threerings/io/Streamer.java +++ b/src/main/java/com/threerings/io/Streamer.java @@ -67,27 +67,20 @@ public abstract class Streamer // if we have not yet initialized ourselves, do so now maybeInit(); - while (true) { - // if we've got a streamer for it, it's good - if (_streamers.containsKey(target)) { - return true; - } - - // enums can be streamed - if (target.isEnum()) { - return true; - } - - // if it's not an array, it must be streamable, or an Iterable or Map - if (!target.isArray()) { - return Streamable.class.isAssignableFrom(target) || - Iterable.class.isAssignableFrom(target) || - Map.class.isAssignableFrom(target); - } - - // otherwise extract the component type and loop back around for another check... - target = target.getComponentType(); + // if we already have a streamer, or it's an enum, it's good + if (_streamers.containsKey(target) || target.isEnum()) { + return true; } + + // arrays are streamable, let's check the component type + if (target.isArray()) { + return isStreamable(target.getComponentType()); + } + + // otherwise it must be Streamable, or an Iterable or Map + return Streamable.class.isAssignableFrom(target) || + Iterable.class.isAssignableFrom(target) || + Map.class.isAssignableFrom(target); } /**