package org.jruby.ext.ffi.jffi;

import java.util.ArrayList;
import org.jruby.runtime.ThreadContext;

An invocation session. This provides post-invoke cleanup.
/** * An invocation session. * This provides post-invoke cleanup. */
final class Invocation { private final ThreadContext context; private final int postInvokeCount; private final int referenceCount; private ArrayList<Runnable> postInvokeList; private ArrayList<Object> references; public Invocation(ThreadContext context) { this(context, 0, 0); } Invocation(ThreadContext context, int postInvokeCount, int referenceCount) { this.context = context; this.postInvokeCount = postInvokeCount; this.referenceCount = referenceCount; } void finish() { if (postInvokeList != null) { for (Runnable r : postInvokeList) { r.run(); } } } void addPostInvoke(Runnable postInvoke) { if (postInvokeList == null) { postInvokeList = new ArrayList<Runnable>(postInvokeCount); } postInvokeList.add(postInvoke); } ThreadContext getThreadContext() { return context; } void addReference(Object ref) { if (references == null) { references = new ArrayList<Object>(referenceCount); } references.add(ref); } }