SurfaceFlinger里面一个算法类,不知道什么作用。该如何解决
发布时间:2010-05-30 10:53:36 文章来源:www.iduyao.cn 采编人员:星星草
SurfaceFlinger里面一个算法类,不知道什么作用。
class Tokenizer
{
public:
Tokenizer();
Tokenizer(const Tokenizer& other);
~Tokenizer();
uint32_t acquire();
status_t reserve(uint32_t token);
status_t release(uint32_t token);
bool isAcquired(uint32_t token) const;
void dump() const;
struct run_t {
run_t() {};
run_t(uint32_t f, uint32_t l) : first(f), length(l) {}
uint32_t first;
uint32_t length;
};
private:
ssize_t _indexOrderOf(uint32_t token, size_t* order=0) const;
ssize_t _insertTokenAt(uint32_t token, size_t index);
Vector<run_t> mRanges;
};
}; // namespace android
Tokenizer::Tokenizer()
{
}
Tokenizer::Tokenizer(const Tokenizer& other)
: mRanges(other.mRanges)
{
}
Tokenizer::~Tokenizer()
{
}
uint32_t Tokenizer::acquire()
{
if (!mRanges.size() || mRanges[0].first) {
_insertTokenAt(0,0);
return 0;
}
// just extend the first run
const run_t& run = mRanges[0];
uint32_t token = run.first + run.length;
_insertTokenAt(token, 1);
return token;
}
bool Tokenizer::isAcquired(uint32_t token) const
{
return (_indexOrderOf(token) >= 0);
}
status_t Tokenizer::reserve(uint32_t token)
{
size_t o;
const ssize_t i = _indexOrderOf(token, &o);
if (i >= 0) {
return BAD_VALUE; // this token is already taken
}
ssize_t err = _insertTokenAt(token, o);
return (err<0) ? err : status_t(NO_ERROR);
}
status_t Tokenizer::release(uint32_t token)
{
const ssize_t i = _indexOrderOf(token);
if (i >= 0) {
const run_t& run = mRanges[i];
if ((token >= run.first) && (token < run.first+run.length)) {
// token in this range, we need to split
run_t& run = mRanges.editItemAt(i);
if ((token == run.first) || (token == run.first+run.length-1)) {
if (token == run.first) {
run.first += 1;
}
run.length -= 1;
if (run.length == 0) {
// XXX: should we systematically remove a run that's empty?
mRanges.removeItemsAt(i);
}
} else {
// split the run
run_t new_run;
new_run.first = token+1;
new_run.length = run.first+run.length - new_run.first;
run.length = token - run.first;
mRanges.insertAt(new_run, i+1);
}
return NO_ERROR;
}
}
return NAME_NOT_FOUND;
}
ssize_t Tokenizer::_indexOrderOf(uint32_t token, size_t* order) const
{
// binary search
ssize_t err = NAME_NOT_FOUND;
ssize_t l = 0;
ssize_t h = mRanges.size()-1;
ssize_t mid;
const run_t* a = mRanges.array();
while (l <= h) {
mid = l + (h - l)/2;
const run_t* const curr = a + mid;
int c = 0;
if (token < curr->first) c = 1;
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
Android版块严惩倒分行为,希望大家配合维持正当的技术交流 - 移动平台 / 非技术区
近期发现Android版块一些帐号在进行倒专家分操...
-
Java应用程序调用系统中任意一个so文件的方法 大家看看是否可行?
如果我想编写一个apk程序,而这个apk程序要调用系统中的非JNI的so...
-
关于ListView中CheckBox 用程序全选的问题
LisetView中view布局
XML code
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLay...
-
请教一个关于广播接收器优先级的问题,为什么我无论如何都不能超越QQ,360,GO等手机助手,管家?
android官方好像说最高1000,我试过...
-
Android 布局framelayout到底怎么用
简单demo就不要说了哈,知道framelayout的简单实例,感觉没有收获,看了源码,也没有什么感觉。我想...
-
如果调用系统剪裁功能
首先调用系统图库,获取图片,然后对该图片进行剪裁,大家帮忙看下我的代码哪里有问题
Java code
Uri uri = data...
-
求4.0的framework.jar包
如题。哪位朋友有编好的4.0的framework.jar,给个下载地址,或发我邮箱heixue888@qq.com
3Q~
------解决方案...
-
关于读取手机通讯录的问题
使用Android1.5的读取方法:
Cursor cur = context.getContentResolver().query(Contacts.Peop...
-
请教如何用android画图
我想利用android写一个画图程序,请问我应该重点看android的哪些部分,请大家给点建议,还有大家是否有相关的工...
-
分享HTC手机Android源代码下载地址
http://developer.htc.com/
------解决方案--------------------
不错,可惜只有kernel的~~...