Android中的AAtomizer
2014-03-14 14:20
337 查看
Android中的AAtomizer实现了一个容器的功能,此容器用来存放AString, 具体类定义如下:
struct AAtomizer {
static const char *Atomize(const char *name);
private:
static AAtomizer gAtomizer;
Mutex mLock;
Vector<List<AString> > mAtoms;
AAtomizer();
const char *atomize(const char *name);
static uint32_t Hash(const char *s);
DISALLOW_EVIL_CONSTRUCTORS(AAtomizer);
};
其中,类定义中mAtoms就是容器,他定义一个以List<AString>为元素的Vector容器。
gAtomizer是一个静态变量,在系统开始时就调用AAtomizer构造函数(初始化Vector,创建了AAtomizer变量)
主要可调用的方法Atomize是填充字符到容器中,在INDEX上使用了较为简单的hash数
const char *AAtomizer::atomize(const char *name) {
Mutex::Autolock autoLock(mLock);
const size_t n = mAtoms.size();
size_t index = AAtomizer::Hash(name) % n;
List<AString> &entry = mAtoms.editItemAt(index);
List<AString>::iterator it = entry.begin();
while (it != entry.end()) {
if ((*it) == name) {
return (*it).c_str();
}
++it;
}
entry.push_back(AString(name));
return (*--entry.end()).c_str();
}
uint32_t AAtomizer::Hash(const char *s) {
uint32_t sum = 0;
while (*s != '\0') {
sum = (sum * 31) + *s;
++s;
}
return sum;
}
struct AAtomizer {
static const char *Atomize(const char *name);
private:
static AAtomizer gAtomizer;
Mutex mLock;
Vector<List<AString> > mAtoms;
AAtomizer();
const char *atomize(const char *name);
static uint32_t Hash(const char *s);
DISALLOW_EVIL_CONSTRUCTORS(AAtomizer);
};
其中,类定义中mAtoms就是容器,他定义一个以List<AString>为元素的Vector容器。
gAtomizer是一个静态变量,在系统开始时就调用AAtomizer构造函数(初始化Vector,创建了AAtomizer变量)
主要可调用的方法Atomize是填充字符到容器中,在INDEX上使用了较为简单的hash数
const char *AAtomizer::atomize(const char *name) {
Mutex::Autolock autoLock(mLock);
const size_t n = mAtoms.size();
size_t index = AAtomizer::Hash(name) % n;
List<AString> &entry = mAtoms.editItemAt(index);
List<AString>::iterator it = entry.begin();
while (it != entry.end()) {
if ((*it) == name) {
return (*it).c_str();
}
++it;
}
entry.push_back(AString(name));
return (*--entry.end()).c_str();
}
uint32_t AAtomizer::Hash(const char *s) {
uint32_t sum = 0;
while (*s != '\0') {
sum = (sum * 31) + *s;
++s;
}
return sum;
}
相关文章推荐
- android 定制 View派生类
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- Android之初体验
- Android弹出拨号界面和拨打电话实现
- Android GPS架构分析(gps启动过程图)
- android pc sooket 通讯 对象传递
- android分享到新浪微博,认证+发送微博,神马'40113token_rejected! Oauth Token不合法'错误,都TMD都是浮云,终于一切搞定!
- Android 网络应用重点————调用WebService
- Android英文名词
- android 开发环境搭建
- Android修改Eclipse 中的Default debug keystore路径,以及修改android的AVD默认路径
- Android下View类的关系图
- android copy raw file to sdcard
- android下拉抽屉
- Android Menu菜单
- Android OpenGL ES 简明开发教程
- android关于pull解析的问题-1
- Android入门:环境搭载
- (转)Android系统架构----&----Android初始化流程
- 教你开发一个简单的Android五子棋游戏