FileDocCategorySizeDatePackage
BaseObj.javaAPI DocAndroid 5.1 API5432Thu Mar 12 22:22:42 GMT 2015android.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 long
mID
private boolean
mDestroyed
private String
mName
RenderScript
mRS
Constructors Summary
BaseObj(long id, RenderScript rs)

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

        if (mID == 0) {
            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;
        }

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

        helpDestroy();
        super.finalize();
    
longgetID(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
long

        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;
    
public java.lang.StringgetName()

return
name of the renderscript object

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

return
int

        return (int)((mID & 0xfffffff) ^ (mID >> 32));
    
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();
            // AllocationAdapters are BaseObjs with an ID of 0 but should not be passed to nObjDestroy
            if(mRS.isAlive() && mID != 0) {
                mRS.nObjDestroy(mID);
            }
            rlock.unlock();
            mRS = null;
            mID = 0;
        }
    
voidsetID(long id)

        if (mID != 0) {
            throw new RSRuntimeException("Internal Error, reset of object ID.");
        }
        mID = id;
    
public voidsetName(java.lang.String name)
setName assigns a name to an object. This object can later be looked up by this name.

param
name The name to assign to the object.

        if (name == null) {
            throw new RSIllegalArgumentException(
                "setName requires a string of non-zero length.");
        }
        if(name.length() < 1) {
            throw new RSIllegalArgumentException(
                "setName does not accept a zero length string.");
        }
        if(mName != null) {
            throw new RSIllegalArgumentException(
                "setName object already has a name.");
        }

        try {
            byte[] bytes = name.getBytes("UTF-8");
            mRS.nAssignName(mID, bytes);
            mName = name;
        } catch (java.io.UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    
voidupdateFromNative()
If an object came from an a3d file, java fields need to be created with objects from the native layer

        mRS.validate();
        mName = mRS.nGetName(getID(mRS));