SmartOS/Message/WeakStore.cpp

58 lines
1.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "WeakStore.h"
// 初始化
WeakStore::WeakStore(cstring magic, byte* ptr, uint len) : Data(0x40)
{
Magic = magic;
MagicLength = 0;
// 如果指定了外部空间,则使用外部空间,否则使用内部默认分配的空间
if(ptr && len > 0) Data.Set(ptr, len);
if(magic)
{
auto p = magic;
while(*p++) MagicLength++;
if(!Check())
{
debug_printf("首次上电 ");
Init();
}
}
}
// 检查并确保初始化,返回原来是否已初始化
bool WeakStore::Check()
{
assert(Magic, "未指定幻数");
auto mg = (cstring)Data.GetBuffer();
//return strcmp(mg, Magic) == 0;
auto p = Magic;
for(int i=0; i<MagicLength; i++)
{
if(*mg++ != *p++) return false;
}
return true;
}
void WeakStore::Init()
{
assert(Magic, "未指定幻数");
debug_printf("初始化 0x%08X幻数 %s\r\n", (uint)Data.GetBuffer(), Magic);
Data.Clear();
Data.Copy(0, (byte*)Magic, MagicLength);
}
// 重载索引运算符[],定位到数据部分的索引。
byte WeakStore::operator[](int i) const
{
return Data[MagicLength + i];
}
byte& WeakStore::operator[](int i)
{
return Data[MagicLength + i];
}