arrayvalue.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,663 行 · 第 1/3 页
JAVA
1,663 行
printDepth(out, 2 * depth); out.print("}"); } protected void varDumpEntry(Env env, WriteStream out, int depth, IdentityHashMap<Value, String> valueSet, Map.Entry<Value, Value> mapEntry) throws IOException { ArrayValue.Entry entry = (ArrayValue.Entry) mapEntry; entry.varDumpImpl(env, out, depth, valueSet); } @Override protected void printRImpl(Env env, WriteStream out, int depth, IdentityHashMap<Value, String> valueSet) throws IOException { out.println("Array"); printDepth(out, 8 * depth); out.println("("); for (Map.Entry<Value,Value> mapEntry : entrySet()) { ArrayValue.Entry entry = (ArrayValue.Entry) mapEntry; entry.printRImpl(env, out, depth, valueSet); } printDepth(out, 8 * depth); out.println(")"); } protected void printREntry(Env env, WriteStream out, int depth, IdentityHashMap<Value, String> valueSet, Map.Entry<Value, Value> mapEntry) throws IOException { ArrayValue.Entry entry = (ArrayValue.Entry) mapEntry; entry.printRImpl(env, out, depth, valueSet); } public static class Entry implements Map.Entry<Value,Value>, Serializable { final Value _key; Value _value; Entry _prev; Entry _next; Entry _prevHash; Entry _nextHash; int _index; public Entry(Value key) { _key = key; _value = NullValue.NULL; } public Entry(Value key, Value value) { _key = key; _value = value; } public Entry getNext() { return _next; } public Value getRawValue() { return _value; } public Value getValue() { return _value.toValue(); } public Value getKey() { return _key; } public Value toValue() { // The value may be a var // XXX: need test return _value.toValue(); } /** * Argument used/declared as a ref. */ public Var toRefVar() { // php/376a Value val = _value; if (val instanceof Var) return (Var) val; else { Var var = new Var(val); _value = var; return var; } } /** * Converts to an argument value. */ public Value toArgValue() { return _value.toValue(); } public Value setValue(Value value) { Value oldValue = _value; _value = value; return oldValue; } /** * Converts to a variable reference (for function arguments) */ public Value toRef() { Value value = _value; if (value instanceof Var) return new RefVar((Var) value); else { _value = new Var(value); return new RefVar((Var) _value); } } /** * Converts to a variable reference (for function arguments) */ public Value toArgRef() { Value value = _value; if (value instanceof Var) return new RefVar((Var) value); else { _value = new Var(_value); return new RefVar((Var) _value); } } public Value toArg() { // php/39a4 Value value = _value; // php/39aj if (value instanceof Var) return value; else { _value = new Var(value); return _value; } } public void varDumpImpl(Env env, WriteStream out, int depth, IdentityHashMap<Value, String> valueSet) throws IOException { printDepth(out, 2 * depth); out.print("["); if (_key instanceof StringValue) out.print("\"" + _key + "\""); else out.print(_key); out.println("]=>"); printDepth(out, 2 * depth); _value.varDump(env, out, depth, valueSet); } protected void printRImpl(Env env, WriteStream out, int depth, IdentityHashMap<Value, String> valueSet) throws IOException { printDepth(out, 8 * depth); out.print(" ["); out.print(_key); out.print("] => "); if (_value != null) _value.printR(env, out, depth + 1, valueSet); out.println(); } private void printDepth(WriteStream out, int depth) throws java.io.IOException { for (int i = depth; i > 0; i--) out.print(' '); } @Override public String toString() { return "ArrayValue.Entry[" + getKey() + "]"; } } /** * Returns the field keys. */ public Value []getKeyArray(Env env) { int len = getSize(); Value []keys = new Value[len]; Iterator<Value> iter = getKeyIterator(env); for (int i = 0; i < len; i++) { keys[i] = iter.next(); } return keys; } /** * Returns the field values. */ public Value []getValueArray(Env env) { int len = getSize(); Value []values = new Value[len]; Iterator<Value> iter = getValueIterator(env); for (int i = 0; i < len; i++) { values[i] = iter.next(); } return values; } /** * Takes the values of this array and puts them in a java array */ public Value[] valuesToArray() { Value[] values = new Value[getSize()]; int i = 0; for (Entry ptr = getHead(); ptr != null; ptr = ptr.getNext()) { values[i++] = ptr.getValue(); } return values; } /** * Takes the values of this array, unmarshals them to objects of type * <i>elementType</i>, and puts them in a java array. */ @Override public Object valuesToArray(Env env, Class elementType) { int size = getSize(); Object array = Array.newInstance(elementType, size); MarshalFactory factory = env.getModuleContext().getMarshalFactory(); Marshal elementMarshal = factory.create(elementType); int i = 0; for (Entry ptr = getHead(); ptr != null; ptr = ptr.getNext()) { Array.set(array, i++, elementMarshal.marshal(env, ptr.getValue(), elementType)); } return array; } public class EntrySet extends AbstractSet<Map.Entry<Value,Value>> { EntrySet() { } @Override public int size() { return ArrayValue.this.getSize(); } @Override public Iterator<Map.Entry<Value,Value>> iterator() { return new EntryIterator(getHead()); } } public class KeySet extends AbstractSet<Value> { KeySet() { } @Override public int size() { return ArrayValue.this.getSize(); } @Override public Iterator<Value> iterator() { return new KeyIterator(getHead()); } } public class ValueCollection extends AbstractCollection<Value> { ValueCollection() { } @Override public int size() { return ArrayValue.this.getSize(); } @Override public Iterator<Value> iterator() { return new ValueIterator(getHead()); } } public static class EntryIterator implements Iterator<Map.Entry<Value,Value>> { private Entry _current; EntryIterator(Entry head) { _current = head; } public boolean hasNext() { return _current != null; } public Map.Entry<Value,Value> next() { if (_current != null) { Map.Entry<Value,Value> next = _current; _current = _current._next; return next; } else return null; } public void remove() { throw new UnsupportedOperationException(); } } public static class KeyIterator implements Iterator<Value> { private Entry _current; KeyIterator(Entry head) { _current = head; } public boolean hasNext() { return _current != null; } public Value next() { if (_current != null) { Value next = _current.getKey(); _current = _current._next; return next; } else return null; } public void remove() { throw new UnsupportedOperationException(); } } public static class ValueIterator implements Iterator<Value> { private Entry _current; ValueIterator(Entry head) { _current = head; } public boolean hasNext() { return _current != null; } public Value next() { if (_current != null) { Value next = _current.getValue(); _current = _current._next; return next; } else return null; } public void remove() { throw new UnsupportedOperationException(); } } public static class ValueComparator implements Comparator<Map.Entry<Value,Value>> { public static final ValueComparator CMP = new ValueComparator(); private ValueComparator() { } public int compare(Map.Entry<Value,Value> aEntry, Map.Entry<Value,Value> bEntry) { try { Value aValue = aEntry.getValue(); Value bValue = bEntry.getValue(); if (aValue.eq(bValue)) return 0; else if (aValue.lt(bValue)) return -1; else return 1; } catch (Throwable e) { throw new RuntimeException(e); } } } public static class KeyComparator implements Comparator<Map.Entry<Value,Value>> { public static final KeyComparator CMP = new KeyComparator(); private KeyComparator() { } public int compare(Map.Entry<Value,Value> aEntry, Map.Entry<Value,Value> bEntry) { try { Value aKey = aEntry.getKey(); Value bKey = bEntry.getKey(); if (aKey.eq(bKey)) return 0; else if (aKey.lt(bKey)) return -1; else return 1; } catch (Throwable e) { throw new RuntimeException(e); } } } public static abstract class AbstractGet { public abstract Value get(Map.Entry<Value, Value> entry); } public static class GetKey extends AbstractGet { public static final GetKey GET = new GetKey(); private GetKey() { } @Override public Value get(Map.Entry<Value, Value> entry) { return entry.getKey(); } } public static class GetValue extends AbstractGet { public static final GetValue GET = new GetValue(); private GetValue() { } @Override public Value get(Map.Entry<Value, Value> entry) { return entry.getValue(); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?