Skip to content

Commit

Permalink
Chunk pools should be easier to emulate in GWT (#5053)
Browse files Browse the repository at this point in the history
Several changes to simplify how Chunk pooling will work in the JS API:
 * close() calls of borrowed instances should return the instance to the pool consistently
 * Separate pool implementations from interface
 * Flattened method calls required to borrow/create a chunk

Partial #188
  • Loading branch information
niloc132 authored Jan 22, 2024
1 parent 9763543 commit fd429ff
Show file tree
Hide file tree
Showing 47 changed files with 2,036 additions and 1,328 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for boolean data.
*/
public final class ResettableBooleanChunk<ATTR_UPPER extends Any>
public class ResettableBooleanChunk<ATTR_UPPER extends Any>
extends BooleanChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableBooleanChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getBooleanChunkPool().takeResettableBooleanChunk();
return MultiChunkPool.forThisThread().takeResettableBooleanChunk();
}
return new ResettableBooleanChunk<>();
}

public static <ATTR_BASE extends Any> ResettableBooleanChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableBooleanChunk<>();
return new ResettableBooleanChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableBooleanChunk(this);
}
};
}

private ResettableBooleanChunk(boolean[] data, int offset, int capacity) {
Expand Down Expand Up @@ -84,8 +89,5 @@ public <ATTR extends ATTR_UPPER> BooleanChunk<ATTR> resetFromTypedArray(boolean[

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getBooleanChunkPool().giveResettableBooleanChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for byte data.
*/
public final class ResettableByteChunk<ATTR_UPPER extends Any>
public class ResettableByteChunk<ATTR_UPPER extends Any>
extends ByteChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableByteChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getByteChunkPool().takeResettableByteChunk();
return MultiChunkPool.forThisThread().takeResettableByteChunk();
}
return new ResettableByteChunk<>();
}

public static <ATTR_BASE extends Any> ResettableByteChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableByteChunk<>();
return new ResettableByteChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableByteChunk(this);
}
};
}

private ResettableByteChunk(byte[] data, int offset, int capacity) {
Expand Down Expand Up @@ -84,8 +89,5 @@ public <ATTR extends ATTR_UPPER> ByteChunk<ATTR> resetFromTypedArray(byte[] data

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getByteChunkPool().giveResettableByteChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for char data.
*/
public final class ResettableCharChunk<ATTR_UPPER extends Any>
public class ResettableCharChunk<ATTR_UPPER extends Any>
extends CharChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableCharChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getCharChunkPool().takeResettableCharChunk();
return MultiChunkPool.forThisThread().takeResettableCharChunk();
}
return new ResettableCharChunk<>();
}

public static <ATTR_BASE extends Any> ResettableCharChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableCharChunk<>();
return new ResettableCharChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableCharChunk(this);
}
};
}

private ResettableCharChunk(char[] data, int offset, int capacity) {
Expand Down Expand Up @@ -79,8 +84,5 @@ public <ATTR extends ATTR_UPPER> CharChunk<ATTR> resetFromTypedArray(char[] data

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getCharChunkPool().giveResettableCharChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for double data.
*/
public final class ResettableDoubleChunk<ATTR_UPPER extends Any>
public class ResettableDoubleChunk<ATTR_UPPER extends Any>
extends DoubleChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableDoubleChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getDoubleChunkPool().takeResettableDoubleChunk();
return MultiChunkPool.forThisThread().takeResettableDoubleChunk();
}
return new ResettableDoubleChunk<>();
}

public static <ATTR_BASE extends Any> ResettableDoubleChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableDoubleChunk<>();
return new ResettableDoubleChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableDoubleChunk(this);
}
};
}

private ResettableDoubleChunk(double[] data, int offset, int capacity) {
Expand Down Expand Up @@ -84,8 +89,5 @@ public <ATTR extends ATTR_UPPER> DoubleChunk<ATTR> resetFromTypedArray(double[]

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getDoubleChunkPool().giveResettableDoubleChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for float data.
*/
public final class ResettableFloatChunk<ATTR_UPPER extends Any>
public class ResettableFloatChunk<ATTR_UPPER extends Any>
extends FloatChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableFloatChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getFloatChunkPool().takeResettableFloatChunk();
return MultiChunkPool.forThisThread().takeResettableFloatChunk();
}
return new ResettableFloatChunk<>();
}

public static <ATTR_BASE extends Any> ResettableFloatChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableFloatChunk<>();
return new ResettableFloatChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableFloatChunk(this);
}
};
}

private ResettableFloatChunk(float[] data, int offset, int capacity) {
Expand Down Expand Up @@ -84,8 +89,5 @@ public <ATTR extends ATTR_UPPER> FloatChunk<ATTR> resetFromTypedArray(float[] da

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getFloatChunkPool().giveResettableFloatChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for int data.
*/
public final class ResettableIntChunk<ATTR_UPPER extends Any>
public class ResettableIntChunk<ATTR_UPPER extends Any>
extends IntChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableIntChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getIntChunkPool().takeResettableIntChunk();
return MultiChunkPool.forThisThread().takeResettableIntChunk();
}
return new ResettableIntChunk<>();
}

public static <ATTR_BASE extends Any> ResettableIntChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableIntChunk<>();
return new ResettableIntChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableIntChunk(this);
}
};
}

private ResettableIntChunk(int[] data, int offset, int capacity) {
Expand Down Expand Up @@ -84,8 +89,5 @@ public <ATTR extends ATTR_UPPER> IntChunk<ATTR> resetFromTypedArray(int[] data,

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getIntChunkPool().giveResettableIntChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for long data.
*/
public final class ResettableLongChunk<ATTR_UPPER extends Any>
public class ResettableLongChunk<ATTR_UPPER extends Any>
extends LongChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableLongChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getLongChunkPool().takeResettableLongChunk();
return MultiChunkPool.forThisThread().takeResettableLongChunk();
}
return new ResettableLongChunk<>();
}

public static <ATTR_BASE extends Any> ResettableLongChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableLongChunk<>();
return new ResettableLongChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableLongChunk(this);
}
};
}

private ResettableLongChunk(long[] data, int offset, int capacity) {
Expand Down Expand Up @@ -84,8 +89,5 @@ public <ATTR extends ATTR_UPPER> LongChunk<ATTR> resetFromTypedArray(long[] data

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getLongChunkPool().giveResettableLongChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for Object data.
*/
public final class ResettableObjectChunk<T, ATTR_UPPER extends Any>
public class ResettableObjectChunk<T, ATTR_UPPER extends Any>
extends ObjectChunk<T, ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <T, ATTR_BASE extends Any> ResettableObjectChunk<T, ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getObjectChunkPool().takeResettableObjectChunk();
return MultiChunkPool.forThisThread().takeResettableObjectChunk();
}
return new ResettableObjectChunk<>();
}

public static <T, ATTR_BASE extends Any> ResettableObjectChunk<T, ATTR_BASE> makeResettableChunkForPool() {
return new ResettableObjectChunk<>();
return new ResettableObjectChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableObjectChunk(this);
}
};
}

private ResettableObjectChunk(T[] data, int offset, int capacity) {
Expand Down Expand Up @@ -87,8 +92,5 @@ public <ATTR extends ATTR_UPPER> ObjectChunk<T, ATTR> resetFromTypedArray(T[] da

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getObjectChunkPool().giveResettableObjectChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableReadOnlyChunk} implementation for short data.
*/
public final class ResettableShortChunk<ATTR_UPPER extends Any>
public class ResettableShortChunk<ATTR_UPPER extends Any>
extends ShortChunk<ATTR_UPPER>
implements ResettableReadOnlyChunk<ATTR_UPPER> {

public static <ATTR_BASE extends Any> ResettableShortChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getShortChunkPool().takeResettableShortChunk();
return MultiChunkPool.forThisThread().takeResettableShortChunk();
}
return new ResettableShortChunk<>();
}

public static <ATTR_BASE extends Any> ResettableShortChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableShortChunk<>();
return new ResettableShortChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableShortChunk(this);
}
};
}

private ResettableShortChunk(short[] data, int offset, int capacity) {
Expand Down Expand Up @@ -84,8 +89,5 @@ public <ATTR extends ATTR_UPPER> ShortChunk<ATTR> resetFromTypedArray(short[] da

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getShortChunkPool().giveResettableShortChunk(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@
/**
* {@link ResettableWritableChunk} implementation for boolean data.
*/
public final class ResettableWritableBooleanChunk<ATTR_BASE extends Any>
public class ResettableWritableBooleanChunk<ATTR_BASE extends Any>
extends WritableBooleanChunk<ATTR_BASE>
implements ResettableWritableChunk<ATTR_BASE> {

public static <ATTR_BASE extends Any> ResettableWritableBooleanChunk<ATTR_BASE> makeResettableChunk() {
if (POOL_RESETTABLE_CHUNKS) {
return MultiChunkPool.forThisThread().getBooleanChunkPool().takeResettableWritableBooleanChunk();
return MultiChunkPool.forThisThread().takeResettableWritableBooleanChunk();
}
return new ResettableWritableBooleanChunk<>();
}

public static <ATTR_BASE extends Any> ResettableWritableBooleanChunk<ATTR_BASE> makeResettableChunkForPool() {
return new ResettableWritableBooleanChunk<>();
return new ResettableWritableBooleanChunk<>() {
@Override
public void close() {
MultiChunkPool.forThisThread().giveResettableWritableBooleanChunk(this);
}
};
}

private ResettableWritableBooleanChunk(boolean[] data, int offset, int capacity) {
Expand Down Expand Up @@ -81,11 +86,4 @@ public <ATTR extends ATTR_BASE> WritableBooleanChunk<ATTR> resetFromTypedArray(b
//noinspection unchecked
return (WritableBooleanChunk<ATTR>) this;
}

@Override
public void close() {
if (POOL_RESETTABLE_CHUNKS) {
MultiChunkPool.forThisThread().getBooleanChunkPool().giveResettableWritableBooleanChunk(this);
}
}
}
Loading

0 comments on commit fd429ff

Please sign in to comment.