FileDocCategorySizeDatePackage
BaseObj.javaAPI DocAndroid 5.1 API4218Thu Mar 12 22:22:56 GMT 2015android.support.v8.renderscript

BaseObj

public class BaseObj extends Object
BaseObj is the base class for all RenderScript objects owned by a RS context. It is responsible for lifetime management and resource tracking. This class should not be used by a user application.

Fields Summary
private int
mID
private boolean
mDestroyed
RenderScript
mRS
Constructors Summary
BaseObj(int id, RenderScript rs)

        rs.validate();
        mRS = rs;
        mID = id;
        mDestroyed = false;
    
Methods Summary
voidcheckValid()

        if ((mID == 0) && (getNObj() == null)) {
            throw new RSIllegalArgumentException("Invalid object.");
        }
    
public voiddestroy()
Frees any native resources associated with this object. The primary use is to force immediate cleanup of resources when it is believed the GC will not respond quickly enough.

        if(mDestroyed) {
            throw new RSInvalidStateException("Object already destroyed.");
        }
        helpDestroy();
    
public booleanequals(java.lang.Object obj)
Compare the current BaseObj with another BaseObj for equality.

param
obj The object to check equality with.
return
boolean

        // Early-out check to see if both BaseObjs are actually the same
        if (this == obj)
            return true;

        if (obj == null) {
            return false;
        }

        if (getClass() != obj.getClass()) {
            return false;
        }

        if (mRS.isNative) {
            return ((RenderScriptThunker)mRS).equals((Object)this, obj);
        }

        BaseObj b = (BaseObj) obj;
        return mID == b.mID;
    
protected voidfinalize()

        helpDestroy();
        super.finalize();
    
intgetID(RenderScript rs)
Lookup the native object ID for this object. Primarily used by the generated reflected code.

param
rs Context to verify against internal context for match.
return
int

        mRS.validate();
        if (mDestroyed) {
            throw new RSInvalidStateException("using a destroyed object.");
        }
        if (mID == 0) {
            throw new RSRuntimeException("Internal error: Object id 0.");
        }
        if ((rs != null) && (rs != mRS)) {
            throw new RSInvalidStateException("using object with mismatched context.");
        }
        return mID;
    
android.renderscript.BaseObjgetNObj()

        return null;
    
public inthashCode()
Calculates the hash code value for a BaseObj.

return
int

        return mID;
    
private voidhelpDestroy()

        boolean shouldDestroy = false;
        synchronized(this) {
            if (!mDestroyed) {
                shouldDestroy = true;
                mDestroyed = true;
            }
        }

        if (shouldDestroy) {
            // must include nObjDestroy in the critical section
            ReentrantReadWriteLock.ReadLock rlock = mRS.mRWLock.readLock();
            rlock.lock();
            if(mRS.isAlive()) {
                mRS.nObjDestroy(mID);
            }
            rlock.unlock();
            mRS = null;
            mID = 0;
        }
    
voidsetID(int id)

        if (mID != 0) {
            throw new RSRuntimeException("Internal Error, reset of object ID.");
        }
        mID = id;