We only need to introspect and sort our fields array once per class, not

every time we create a distributed object.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2810 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2003-09-24 20:33:06 +00:00
parent 0aecdc2069
commit 320f53913b
@@ -1,13 +1,15 @@
// //
// $Id: DObject.java,v 1.67 2003/09/23 17:16:46 mdb Exp $ // $Id: DObject.java,v 1.68 2003/09/24 20:33:06 mdb Exp $
package com.threerings.presents.dobj; package com.threerings.presents.dobj;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import com.samskivert.util.ListUtil; import com.samskivert.util.ListUtil;
import com.samskivert.util.StringUtil; import com.samskivert.util.StringUtil;
@@ -104,9 +106,12 @@ public class DObject implements Streamable
{ {
public DObject () public DObject ()
{ {
// introspect our fields into a sorted array _fields = (Field[])_ftable.get(getClass());
_fields = getClass().getFields(); if (_fields == null) {
Arrays.sort(_fields, FIELD_COMP); _fields = getClass().getFields();
Arrays.sort(_fields, FIELD_COMP);
_ftable.put(getClass(), _fields);
}
} }
/** /**
@@ -922,6 +927,10 @@ public class DObject implements Streamable
* is removed. */ * is removed. */
protected transient boolean _deathWish = false; protected transient boolean _deathWish = false;
/** Maintains a mapping of sorted field arrays for each distributed
* object class. */
protected static HashMap _ftable = new HashMap();
/** Used to sort and search {@link #_fields}. */ /** Used to sort and search {@link #_fields}. */
protected static final Comparator FIELD_COMP = new Comparator() { protected static final Comparator FIELD_COMP = new Comparator() {
public int compare (Object o1, Object o2) { public int compare (Object o1, Object o2) {