rsObjectBase.h revision 9397e30ce5fe3f6af9212a93b490836b04fdfffa
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef ANDROID_RS_OBJECT_BASE_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_RS_OBJECT_BASE_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsUtils.h" 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// An element is a group of Components that occupies one cell in a structure. 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass ObjectBase 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ObjectBase(); 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams virtual ~ObjectBase(); 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 339397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams void incSysRef() const; 349397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams void decSysRef() const; 359397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams 369397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams void incUserRef() const; 379397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams void decUserRef() const; 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 39a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams const char * getName() const { 40a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams return mName; 41a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 42a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams void setName(const char *); 43a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams void setName(const char *, uint32_t len); 44a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsprivate: 46a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams char * mName; 479397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams mutable int32_t mSysRefCount; 489397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams mutable int32_t mUserRefCount; 49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 539397e30ce5fe3f6af9212a93b490836b04fdfffaJason Samstemplate<class T> 549397e30ce5fe3f6af9212a93b490836b04fdfffaJason Samsclass ObjectBaseRef 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 56326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ObjectBaseRef() { 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRef = NULL; 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 611030893d9b99b72468034da13df025bda479bb97Jason Sams ObjectBaseRef(const ObjectBaseRef &ref) { 621030893d9b99b72468034da13df025bda479bb97Jason Sams mRef = ref.get(); 63a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mRef) { 649397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams mRef->incSysRef(); 65a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 661030893d9b99b72468034da13df025bda479bb97Jason Sams } 671030893d9b99b72468034da13df025bda479bb97Jason Sams 681030893d9b99b72468034da13df025bda479bb97Jason Sams ObjectBaseRef(T *ref) { 691030893d9b99b72468034da13df025bda479bb97Jason Sams mRef = ref; 70a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mRef) { 719397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams ref->incSysRef(); 72a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 731030893d9b99b72468034da13df025bda479bb97Jason Sams } 741030893d9b99b72468034da13df025bda479bb97Jason Sams 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ~ObjectBaseRef() { 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams clear(); 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void set(T *ref) { 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mRef != ref) { 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams clear(); 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRef = ref; 83a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams if (mRef) { 849397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams ref->incSysRef(); 85a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 89a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams void set(const ObjectBaseRef &ref) { 90a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams set(ref.mRef); 91a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams } 92a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void clear() { 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams if (mRef) { 959397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams mRef->decSysRef(); 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mRef = NULL; 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams inline T * get() const { 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return mRef; 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 1049397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams inline T * operator-> () const { 1059397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams return mRef; 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsprotected: 109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams T * mRef; 110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif //ANDROID_RS_OBJECT_BASE_H 118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 119