public class ProxyChannelFactory
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private static boolean |
DEBUG |
private static int |
LOCALS_INDEX_THIS
The index of the 'this' object in instance methods
|
private static int |
START_TYPE_ID |
Constructor and Description |
---|
ProxyChannelFactory() |
Modifier and Type | Method and Description |
---|---|
private static void |
consumerReferenceArrayIndex(org.objectweb.asm.MethodVisitor methodVisitor,
int localIndexOfROffset,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
static <E> ProxyChannel<E> |
createMpscProxy(int capacity,
java.lang.Class<E> iFace,
WaitStrategy waitStrategy)
Create a default multi producer single consumer (MPSC) proxy channel.
|
static <E> ProxyChannel<E> |
createProxy(int capacity,
java.lang.Class<E> iFace,
WaitStrategy waitStrategy,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
Create a proxy channel using a user supplied back end.
|
static <E> ProxyChannel<E> |
createSpscProxy(int capacity,
java.lang.Class<E> iFace,
WaitStrategy waitStrategy)
Create a default single producer single consumer (SPSC) proxy channel.
|
private static java.lang.Class<?> |
findExisting(java.lang.String generatedName,
java.lang.Class<?> iFace) |
private static java.util.List<java.lang.reflect.Method> |
findRelevantMethods(java.lang.Class<?> iFace) |
private static void |
getReference(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<?> parameterType,
int localIndexOfArrayReferenceBaseIndex,
int arrayReferenceBaseIndexDelta,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static int |
getUnsafe(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<?> parameterType,
int localIndexOfROffset,
int rOffsetDelta) |
private static void |
implementBridgeMethod(org.objectweb.asm.ClassVisitor classVisitor,
java.lang.String generatedName,
java.lang.String methodName,
java.lang.Class<?> returnType,
java.lang.Class<?>... parameterTypes) |
private static void |
implementConstructor(org.objectweb.asm.ClassVisitor classVisitor,
java.lang.Class<? extends ProxyChannelRingBuffer> parentType,
java.lang.String generatedName,
int primitiveMessageSize,
int referenceMessageSize) |
private static void |
implementInstanceFields(org.objectweb.asm.ClassVisitor classVisitor) |
private static void |
implementProcess(org.objectweb.asm.ClassVisitor classVisitor,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType,
java.util.List<java.lang.reflect.Method> methods,
java.lang.Class<?> iFace,
java.lang.String generatedName) |
private static void |
implementProxy(org.objectweb.asm.ClassVisitor classVisitor,
java.lang.Class<?> iFace,
java.lang.String generatedName) |
private static void |
implementProxyInstance(org.objectweb.asm.ClassVisitor classVisitor,
java.lang.Class<?> iFace,
java.lang.String generatedName) |
private static void |
implementUserMethod(java.lang.reflect.Method method,
org.objectweb.asm.ClassVisitor classVisitor,
int type,
java.lang.String generatedName,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static void |
implementUserMethods(org.objectweb.asm.ClassWriter classWriter,
java.util.List<java.lang.reflect.Method> relevantMethods,
java.lang.String generatedName,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static <E> ProxyChannel<E> |
instantiate(java.lang.Class<?> proxy,
int capacity,
WaitStrategy waitStrategy) |
private static void |
loadLocalIndexAndApplyDelta(org.objectweb.asm.MethodVisitor methodVisitor,
int localVariableIndex,
long delta) |
private static void |
loadUnsafe(org.objectweb.asm.MethodVisitor methodVisitor) |
private static void |
loadWOffset(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<?> parameterType,
int baseOffset,
long wOffsetDelta) |
private static java.lang.String |
methodDescriptor(java.lang.Class<?> returnType,
java.lang.Class<?>... parameterTypes) |
private static int |
parameterTypeUnsafe(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<?> parameterType,
boolean write) |
private static int |
primitiveMemorySize(java.lang.Class<?> type) |
private static void |
printClassBytes(byte[] byteCode) |
private static void |
producerReferenceArrayIndex(org.objectweb.asm.MethodVisitor methodVisitor,
int localIndexOfWOffset,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static void |
putReference(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<?> parameterType,
int localIndexOfArrayReferenceBaseIndex,
int arrayReferenceBaseIndexDelta,
int varOffset,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static int |
putUnsafe(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<?> parameterType,
int wOffset,
int wOffsetDelta,
int varOffset) |
private static void |
readAcquire(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static void |
readReference(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<? extends ProxyChannelRingBuffer> backend) |
private static void |
readRelease(org.objectweb.asm.MethodVisitor methodVisitor,
int wOffset,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static void |
writeAcquireWithWaitStrategy(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.String generatedName,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
static long |
writeAcquireWithWaitStrategy(ProxyChannelRingBuffer channelBackend,
WaitStrategy waitStrategy) |
private static void |
writeReference(org.objectweb.asm.MethodVisitor methodVisitor,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static void |
writeRelease(org.objectweb.asm.MethodVisitor methodVisitor,
int wOffset,
int type,
java.lang.Class<? extends ProxyChannelRingBuffer> backendType) |
private static final int START_TYPE_ID
private static final int LOCALS_INDEX_THIS
private static final boolean DEBUG
private static void printClassBytes(byte[] byteCode)
public static long writeAcquireWithWaitStrategy(ProxyChannelRingBuffer channelBackend, WaitStrategy waitStrategy)
public static <E> ProxyChannel<E> createSpscProxy(int capacity, java.lang.Class<E> iFace, WaitStrategy waitStrategy)
capacity
- The minimum capacity for unprocessed invocations the channel
should supportiFace
- Interface the proxy must implementwaitStrategy
- A wait strategy to be invoked when the backing data structure
is fullpublic static <E> ProxyChannel<E> createMpscProxy(int capacity, java.lang.Class<E> iFace, WaitStrategy waitStrategy)
capacity
- The minimum capacity for unprocessed invocations the channel
should supportiFace
- Interface the proxy must implementwaitStrategy
- A wait strategy to be invoked when the backing data structure
is fullpublic static <E> ProxyChannel<E> createProxy(int capacity, java.lang.Class<E> iFace, WaitStrategy waitStrategy, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
capacity
- The minimum capacity for unprocessed invocations the channel
should supportiFace
- Interface the proxy must implementwaitStrategy
- A wait strategy to be invoked when the backing data structure
is fullbackendType
- The back end type, the proxy will inherit from this channel
type. The back end type must define a constructor with signature:
(int capacity, int primitiveMessageSize, int referenceMessageSize)
private static void implementUserMethods(org.objectweb.asm.ClassWriter classWriter, java.util.List<java.lang.reflect.Method> relevantMethods, java.lang.String generatedName, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static java.util.List<java.lang.reflect.Method> findRelevantMethods(java.lang.Class<?> iFace)
private static java.lang.Class<?> findExisting(java.lang.String generatedName, java.lang.Class<?> iFace)
private static <E> ProxyChannel<E> instantiate(java.lang.Class<?> proxy, int capacity, WaitStrategy waitStrategy)
private static void implementProcess(org.objectweb.asm.ClassVisitor classVisitor, java.lang.Class<? extends ProxyChannelRingBuffer> backendType, java.util.List<java.lang.reflect.Method> methods, java.lang.Class<?> iFace, java.lang.String generatedName)
private static void implementInstanceFields(org.objectweb.asm.ClassVisitor classVisitor)
private static void implementConstructor(org.objectweb.asm.ClassVisitor classVisitor, java.lang.Class<? extends ProxyChannelRingBuffer> parentType, java.lang.String generatedName, int primitiveMessageSize, int referenceMessageSize)
private static void implementProxyInstance(org.objectweb.asm.ClassVisitor classVisitor, java.lang.Class<?> iFace, java.lang.String generatedName)
private static void implementProxy(org.objectweb.asm.ClassVisitor classVisitor, java.lang.Class<?> iFace, java.lang.String generatedName)
private static void implementBridgeMethod(org.objectweb.asm.ClassVisitor classVisitor, java.lang.String generatedName, java.lang.String methodName, java.lang.Class<?> returnType, java.lang.Class<?>... parameterTypes)
private static void implementUserMethod(java.lang.reflect.Method method, org.objectweb.asm.ClassVisitor classVisitor, int type, java.lang.String generatedName, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void producerReferenceArrayIndex(org.objectweb.asm.MethodVisitor methodVisitor, int localIndexOfWOffset, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void consumerReferenceArrayIndex(org.objectweb.asm.MethodVisitor methodVisitor, int localIndexOfROffset, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void writeAcquireWithWaitStrategy(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.String generatedName, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void writeRelease(org.objectweb.asm.MethodVisitor methodVisitor, int wOffset, int type, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void readAcquire(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void readRelease(org.objectweb.asm.MethodVisitor methodVisitor, int wOffset, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static int getUnsafe(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<?> parameterType, int localIndexOfROffset, int rOffsetDelta)
private static int putUnsafe(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<?> parameterType, int wOffset, int wOffsetDelta, int varOffset)
private static void getReference(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<?> parameterType, int localIndexOfArrayReferenceBaseIndex, int arrayReferenceBaseIndexDelta, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void putReference(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<?> parameterType, int localIndexOfArrayReferenceBaseIndex, int arrayReferenceBaseIndexDelta, int varOffset, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void loadUnsafe(org.objectweb.asm.MethodVisitor methodVisitor)
private static void loadWOffset(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<?> parameterType, int baseOffset, long wOffsetDelta)
private static void loadLocalIndexAndApplyDelta(org.objectweb.asm.MethodVisitor methodVisitor, int localVariableIndex, long delta)
private static int parameterTypeUnsafe(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<?> parameterType, boolean write)
private static void writeReference(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<? extends ProxyChannelRingBuffer> backendType)
private static void readReference(org.objectweb.asm.MethodVisitor methodVisitor, java.lang.Class<? extends ProxyChannelRingBuffer> backend)
private static int primitiveMemorySize(java.lang.Class<?> type)
private static java.lang.String methodDescriptor(java.lang.Class<?> returnType, java.lang.Class<?>... parameterTypes)