package com.glview.hwui.cache;
import com.glview.pool.Pool;
import com.glview.pool.Poolable;
/**
* 资源的引用计数
*
* @author lijing.lj
*/
public class ResourceReference implements Poolable {
static Pool<ResourceReference> sPool = new Pool<ResourceReference>(false, 100);
Object target;
int refCount;
private ResourceReference() {
}
public void recycle() {
target = null;
refCount = 0;
sPool.push(this);
}
public static ResourceReference obtain(Object target) {
ResourceReference o = (ResourceReference) sPool.poll(ResourceReference.class);
if (o == null) {
o = new ResourceReference();
}
o.target = target;
o.refCount = 0;
return o;
}
@Override
public boolean equals(Object o) {
if (o == null || !(o instanceof ResourceReference)) {
return false;
}
ResourceReference other = (ResourceReference) o;
if (other.target == null || target == null) {
return super.equals(o);
}
return other.target.equals(target);
}
public void increaseReferenceCount() {
refCount ++;
}
public void decreaseReferenceCount() {
refCount --;
}
@Override
public int hashCode() {
return target != null ? target.hashCode() : super.hashCode();
}
}