您的位置:首页 > 移动开发 > Android开发

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ android