Java 类com.badlogic.gdx.utils.reflect.ArrayReflection 实例源码

项目:libgdxcn    文件:BufferUtils.java   
/** Reallocate a buffer. */
public static <T> T[] reallocateBuffer(Class<T> klass, T[] oldBuffer, int oldCapacity,
    int newCapacity) {
  assert (newCapacity > oldCapacity);
  @SuppressWarnings("unchecked")
  T[] newBuffer = (T[]) ArrayReflection.newInstance(klass, newCapacity);
  if (oldBuffer != null) {
    System.arraycopy(oldBuffer, 0, newBuffer, 0, oldCapacity);
  }
  for (int i = oldCapacity; i < newCapacity; i++) {
    try {
      newBuffer[i] = ClassReflection.newInstance(klass);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
  return newBuffer;
}
项目:shadow-engine    文件:DefaultSystemManager.java   
@Override
public <T> T[] getAll(Class<T> clazz) {
    Object[] got = gotAll.get(clazz);
    if (got != null) {
        return (T[]) got;
    }

    Array<ISystem> matching = cache.getNext();
    matching.clear();
    for (int i = 0; i < systems.size; i++) {
        ISystem system = systems.items[i];
        if (clazz.isAssignableFrom(system.getClass())) {
            matching.add(system);
        }
    }
    T[] array = (T[]) ArrayReflection.newInstance(clazz, matching.size);
    System.arraycopy(matching.items, 0, array, 0, array.length);
    gotAll.put(clazz, array);
    return array;
}
项目:NanoUI    文件:Array.java   
/** Creates a new backing array with the specified size containing the current items. */
protected T[] resize (int newSize) {
    T[] items = this.items;
    T[] newItems = (T[])ArrayReflection.newInstance(items.getClass().getComponentType(), newSize);
    System.arraycopy(items, 0, newItems, 0, Math.min(size, newItems.length));
    this.items = newItems;
    return newItems;
}
项目:Inspiration    文件:CircularBuffer.java   
/** Creates a new backing array with the specified capacity containing the current items.
 * @param newCapacity the new capacity */
protected void resize (int newCapacity) {
    @SuppressWarnings("unchecked")
    T[] newItems = (T[])ArrayReflection.newInstance(items.getClass().getComponentType(), newCapacity);
    if (tail > head) {
        System.arraycopy(items, head, newItems, 0, size);
    } else if (size > 0) { // NOTE: when head == tail the buffer can be empty or full
        System.arraycopy(items, head, newItems, 0, items.length - head);
        System.arraycopy(items, 0, newItems, items.length - head, tail);
    }
    head = 0;
    tail = size;
    items = newItems;
}
项目:libgdxcn    文件:ArrayMap.java   
protected void resize (int newSize) {
    K[] newKeys = (K[])ArrayReflection.newInstance(keys.getClass().getComponentType(), newSize);
    System.arraycopy(keys, 0, newKeys, 0, Math.min(size, newKeys.length));
    this.keys = newKeys;

    V[] newValues = (V[])ArrayReflection.newInstance(values.getClass().getComponentType(), newSize);
    System.arraycopy(values, 0, newValues, 0, Math.min(size, newValues.length));
    this.values = newValues;
}
项目:libgdxcn    文件:Array.java   
/** Creates a new backing array with the specified size containing the current items. */
protected T[] resize (int newSize) {
    T[] items = this.items;
    T[] newItems = (T[])ArrayReflection.newInstance(items.getClass().getComponentType(), newSize);
    System.arraycopy(items, 0, newItems, 0, Math.min(size, newItems.length));
    this.items = newItems;
    return newItems;
}
项目:libgdxcn    文件:ParticleSystem.java   
@SuppressWarnings("unchecked")
<T> T[] requestParticleBuffer(Class<T> klass, T[] buffer) {
  if (buffer == null) {
    buffer = (T[]) ArrayReflection.newInstance(klass, m_internalAllocatedCapacity);
    for (int i = 0; i < m_internalAllocatedCapacity; i++) {
      try {
        buffer[i] = ClassReflection.newInstance(klass);
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
    }
  }
  return buffer;
}
项目:libGDX-LWJGL-Audio    文件:Array.java   
/**
 * Creates a new backing array with the specified size containing the current items.
 *
 * @param newSize
 * @return
 */
protected T[] resize(int newSize) {
    T[] items = this.items;
    T[] newItems = (T[]) ArrayReflection.newInstance(items.getClass().getComponentType(), newSize);
    System.arraycopy(items, 0, newItems, 0, Math.min(size, newItems.length));
    this.items = newItems;
    return newItems;
}
项目:ModularArmour    文件:ArrayMap.java   
protected void resize(int newSize) {
    K[] newKeys = (K[]) ArrayReflection.newInstance(keys.getClass().getComponentType(), newSize);
    System.arraycopy(keys, 0, newKeys, 0, Math.min(size, newKeys.length));
    this.keys = newKeys;

    V[] newValues = (V[]) ArrayReflection.newInstance(values.getClass().getComponentType(), newSize);
    System.arraycopy(values, 0, newValues, 0, Math.min(size, newValues.length));
    this.values = newValues;
}
项目:ModularArmour    文件:Array.java   
/**
 * Creates a new backing array with the specified size containing the
 * current items.
 */
protected T[] resize(int newSize) {
    T[] items = this.items;
    T[] newItems = (T[]) ArrayReflection.newInstance(items.getClass().getComponentType(), newSize);
    System.arraycopy(items, 0, newItems, 0, Math.min(size, newItems.length));
    this.items = newItems;
    return newItems;
}
项目:gdx-ai    文件:CircularBuffer.java   
/** Creates a new backing array with the specified capacity containing the current items.
 * @param newCapacity the new capacity */
protected void resize (int newCapacity) {
    @SuppressWarnings("unchecked")
    T[] newItems = (T[])ArrayReflection.newInstance(items.getClass().getComponentType(), newCapacity);
    if (tail > head) {
        System.arraycopy(items, head, newItems, 0, size);
    } else if (size > 0) { // NOTE: when head == tail the buffer can be empty or full
        System.arraycopy(items, head, newItems, 0, items.length - head);
        System.arraycopy(items, 0, newItems, items.length - head, tail);
    }
    head = 0;
    tail = size;
    items = newItems;
}
项目:ead    文件:CollectionSize.java   
@Override
public Object evaluate(VarsContext context)
        throws ExpressionEvaluationException {

    // First arg should be the container object
    // First argument should always be a collection or similar
    Object arg1 = first().evaluate(context);

    if (arg1.getClass().isArray()) {
        return ArrayReflection.getLength(arg1);
    } else if (arg1 instanceof Array) {
        Array array = (Array) arg1;
        return array.size;
    } else if (arg1 instanceof Map) {
        Map map = (Map) arg1;
        return map.size();
    } else if (arg1 instanceof Collection) {
        Collection collection = (Collection) arg1;
        return collection.size();
    } else if (arg1 instanceof Iterable) {
        Iterable iterable = (Iterable) arg1;
        int i = 0;
        for (Object object : iterable) {
            i++;
        }
        return i;
    } else {
        throw new ExpressionEvaluationException(
                "Could not evaluate "
                        + getName()
                        + ". Revise the first argument is a collection, array, iterable or map.",
                this);
    }

}
项目:NanoUI    文件:Array.java   
/** Creates a new array with {@link #items} of the specified type.
 * @param ordered If false, methods that remove elements may change the order of other elements in the array, which avoids a
 *           memory copy.
 * @param capacity Any elements added beyond this will cause the backing array to be grown. */
public Array (boolean ordered, int capacity, Class arrayType) {
    this.ordered = ordered;
    items = (T[])ArrayReflection.newInstance(arrayType, capacity);
}
项目:NanoUI    文件:Array.java   
public <V> V[] toArray (Class type) {
    V[] result = (V[])ArrayReflection.newInstance(type, size);
    System.arraycopy(items, 0, result, 0, size);
    return result;
}
项目:gdx-lml    文件:ReflectionArrayProvider.java   
@Override
@SuppressWarnings("unchecked")
public Type[] getArray(final int size) {
    return (Type[]) ArrayReflection.newInstance(arrayType, size);
}
项目:libgdxcn    文件:ParallelArray.java   
public ObjectChannel (int id, int strideSize, int size, Class<T> type) {
    super(id, ArrayReflection.newInstance(type, size*strideSize), strideSize);
    componentType = type;
    this.data = (T[]) super.data;
}
项目:libgdxcn    文件:ParallelArray.java   
@Override
public void setCapacity (int requiredCapacity) {
    T[] newData = (T[]) ArrayReflection.newInstance(componentType, strideSize * requiredCapacity);
    System.arraycopy(data, 0, newData, 0, Math.min(data.length, newData.length));
    super.data = data = newData;
}
项目:libgdxcn    文件:ArrayMap.java   
/** Creates a new map with {@link #keys} and {@link #values} of the specified type.
 * @param ordered If false, methods that remove elements may change the order of other elements in the arrays, which avoids a
 *           memory copy.
 * @param capacity Any elements added beyond this will cause the backing arrays to be grown. */
public ArrayMap (boolean ordered, int capacity, Class keyArrayType, Class valueArrayType) {
    this.ordered = ordered;
    keys = (K[])ArrayReflection.newInstance(keyArrayType, capacity);
    values = (V[])ArrayReflection.newInstance(valueArrayType, capacity);
}
项目:libgdxcn    文件:Array.java   
/** Creates a new array with {@link #items} of the specified type.
 * @param ordered If false, methods that remove elements may change the order of other elements in the array, which avoids a
 *           memory copy.
 * @param capacity Any elements added beyond this will cause the backing array to be grown. */
public Array (boolean ordered, int capacity, Class arrayType) {
    this.ordered = ordered;
    items = (T[])ArrayReflection.newInstance(arrayType, capacity);
}
项目:libgdxcn    文件:Array.java   
public <V> V[] toArray (Class type) {
    V[] result = (V[])ArrayReflection.newInstance(type, size);
    System.arraycopy(items, 0, result, 0, size);
    return result;
}
项目:libgdxcn    文件:ReflectionTest.java   
@Override
public void create () {
    font = new BitmapFont();
    batch = new SpriteBatch();

    try {
        Vector2 fromDefaultConstructor = ClassReflection.newInstance(Vector2.class);
        println("From default constructor: " + fromDefaultConstructor);

        Method mSet = ClassReflection.getMethod(Vector2.class, "set", float.class, float.class);
        mSet.invoke(fromDefaultConstructor, 10, 11);
        println("Set to 10/11: " + fromDefaultConstructor);

        Constructor copyConstroctor = ClassReflection.getConstructor(Vector2.class, Vector2.class);
        Vector2 fromCopyConstructor = (Vector2)copyConstroctor.newInstance(fromDefaultConstructor);
        println("From copy constructor: " + fromCopyConstructor);

        Method mMul = ClassReflection.getMethod(Vector2.class, "scl", float.class);
        println("Multiplied by 2; " + mMul.invoke(fromCopyConstructor, 2));

        Method mNor = ClassReflection.getMethod(Vector2.class, "nor");
        println("Normalized: " + mNor.invoke(fromCopyConstructor));

        Vector2 fieldCopy = new Vector2();
        Field fx = ClassReflection.getField(Vector2.class, "x");
        Field fy = ClassReflection.getField(Vector2.class, "y");
        fx.set(fieldCopy, fx.get(fromCopyConstructor));
        fy.set(fieldCopy, fy.get(fromCopyConstructor));
        println("Copied field by field: " + fieldCopy);

        Json json = new Json();
        String jsonString = json.toJson(fromCopyConstructor);
        Vector2 fromJson = json.fromJson(Vector2.class, jsonString);
        println("JSON serialized: " + jsonString);
        println("JSON deserialized: " + fromJson);
        fromJson.x += 1;
        fromJson.y += 1;
        println("JSON deserialized + 1/1: " + fromJson);

        Object array = ArrayReflection.newInstance(int.class, 5);
        ArrayReflection.set(array, 0, 42);
        println("Array int: length=" + ArrayReflection.getLength(array) + ", access=" + ArrayReflection.get(array, 0));

        array = ArrayReflection.newInstance(String.class, 5);
        ArrayReflection.set(array, 0, "test string");
        println("Array String: length=" + ArrayReflection.getLength(array) + ", access=" + ArrayReflection.get(array, 0));
    } catch (Exception e) {
        message = "FAILED: " + e.getMessage() + "\n";
        message += e.getClass();
    }
}
项目:libGDX-LWJGL-Audio    文件:Array.java   
public <V> V[] toArray(Class type) {
    V[] result = (V[]) ArrayReflection.newInstance(type, size);
    System.arraycopy(items, 0, result, 0, size);
    return result;
}
项目:ModularArmour    文件:Array.java   
public <V> V[] toArray(Class type) {
    V[] result = (V[]) ArrayReflection.newInstance(type, size);
    System.arraycopy(items, 0, result, 0, size);
    return result;
}
项目:ead    文件:Operation.java   
public ArrayIterable(Object anArray) {
    this.arrayLength = ArrayReflection.getLength(anArray);
    this.innerArray = anArray;
}
项目:ead    文件:Operation.java   
@Override
public Expression next() {
    currentElement.value = ArrayReflection.get(innerArray,
            arrayPosition++);
    return currentElement;
}
项目:ead    文件:GetFromCollection.java   
@Override
public Object evaluate(VarsContext context)
        throws ExpressionEvaluationException {

    // Second argument, if present, should be the index of the element to
    // retrieve.
    // If not present, the first (0) element is returned
    int index = 0;
    Object indexObject = null;
    if (children.size() > 1) {
        Object arg2 = second().evaluate(context);
        if (arg2 instanceof Number) {
            index = ((Number) arg2).intValue();
        } else {
            indexObject = arg2;
        }
    }

    // First argument should always be a collection or similar
    Object arg1 = first().evaluate(context);

    try {
        if (arg1.getClass().isArray()) {
            return ArrayReflection.get(arg1, index);
        } else if (arg1 instanceof Array) {
            Array array = (Array) arg1;
            return array.get(index);
        } else if (arg1 instanceof List) {
            List list = (List) arg1;
            return list.get(index);
        } else if (arg1 instanceof Map) {
            Map map = (Map) arg1;
            return map.get(indexObject);
        } else if (arg1 instanceof Collection) {
            Collection collection = (Collection) arg1;
            return collection.toArray()[index];
        } else if (arg1 instanceof Iterable) {
            Iterable iterable = (Iterable) arg1;
            int i = 0;
            for (Object object : iterable) {
                if (index == i++) {
                    return object;
                }
            }
        } else {
            throw new ExpressionEvaluationException(
                    "Could not evaluate "
                            + getName()
                            + ". Revise the first argument is a collection, array, iterable or map, and the second argument is a valid element position (for collections, arrays, iterables) or key (for maps)",
                    this);
        }
    } catch (Exception e) {
        throw new ExpressionEvaluationException("Problem accessing index "
                + index + " + in " + arg1, this, e);
    }
    return null;

}
项目:libGDX-LWJGL-Audio    文件:Array.java   
/**
 * Creates a new array with {@link #items} of the specified type.
 *
 * @param ordered If false, methods that remove elements may change the order of other elements in the array, which
 * avoids a memory copy.
 * @param capacity Any elements added beyond this will cause the backing array to be grown.
 * @param arrayType
 */
public Array(boolean ordered, int capacity, Class arrayType) {
    this.ordered = ordered;
    items = (T[]) ArrayReflection.newInstance(arrayType, capacity);
}
项目:ModularArmour    文件:ArrayMap.java   
/**
 * Creates a new map with {@link #keys} and {@link #values} of the specified
 * type.
 * 
 * @param ordered
 *            If false, methods that remove elements may change the order of
 *            other elements in the arrays, which avoids a memory copy.
 * @param capacity
 *            Any elements added beyond this will cause the backing arrays
 *            to be grown.
 */
public ArrayMap(boolean ordered, int capacity, Class keyArrayType, Class valueArrayType) {
    this.ordered = ordered;
    keys = (K[]) ArrayReflection.newInstance(keyArrayType, capacity);
    values = (V[]) ArrayReflection.newInstance(valueArrayType, capacity);
}
项目:ModularArmour    文件:Array.java   
/**
 * Creates a new array with {@link #items} of the specified type.
 * 
 * @param ordered
 *            If false, methods that remove elements may change the order of
 *            other elements in the array, which avoids a memory copy.
 * @param capacity
 *            Any elements added beyond this will cause the backing array to
 *            be grown.
 */
public Array(boolean ordered, int capacity, Class arrayType) {
    this.ordered = ordered;
    items = (T[]) ArrayReflection.newInstance(arrayType, capacity);
}