/* 取当前KEY对应的数据(包) * 注意,当数据有修改时,可能需是更新包的内容,所以 * 不返回const类型; */ Conf *Page::GetCurrentPack() { // 空,则先加载其值; if(NULL == m_pack) { const string &key = GetCurrentKey(); const string &username = m_request->GetCurrentUser(); UserData data( username ); Conf *pack = new Conf; if(NULL != pack) { Ini ini; // 填充一个空Conf,以便插入key对应的所有值; ini.Set(key, *pack); data.Get( ini ); pack->Set( *(ini.Get(key)) ); m_pack = pack; LOG_DEBUG("Pack[key:%s] loading... ok", key.c_str()); } } if(NULL == m_pack) { // 返回一空值,避免外部做过多的NULL检测; static Conf pack; return &pack; } return m_pack; }
// 统一处理保存(出便于同步处理缓存更新) int Page::Save(const Ini &pack) { const string &username = m_request->GetCurrentUser(); UserData save( username ); // 保存 if(save.Set( pack ) < 0) { return ERR; } // 更新缓存 const string &key = GetCurrentKey(); Conf *syn = GetCurrentPack(); syn->Set( *(pack.Get(key)) ); return OK; }