static int compare_one(const char *x, const char *y) { int m; int n; if ((x[0] == NUL) && (y[0] == NUL)) return (0); if (x[0] == NUL) return (-1); if (y[0] == NUL) return (1); m = group_type(x); n = group_type(y); /* both pure digits */ if ((m >= 0) && (n >= 0)) return (m - n); /* x digit, y non-digit */ if (m >= 0) { if (german_sort) return (1); else return ((n == -1) ? 1 : -1); } /* x non-digit, y digit */ if (n >= 0) { if (german_sort) return (-1); else return ((m == -1) ? -1 : 1); } /* strings started with a symbol (including digit) */ if ((m == SYMBOL) && (n == SYMBOL)) return (check_mixsym(x, y)); /* x symbol, y non-symbol */ if (m == SYMBOL) return (-1); /* x non-symbol, y symbol */ if (n == SYMBOL) return (1); /* strings with a leading letter, the ALPHA type */ return (compare_string((const unsigned char*)x, (const unsigned char*)y)); }
void insert(typename inner_cursor::reference_type element) { key_type key = keySelector(element); auto groupPos = groupIndex.find(key); if(groupPos == groupIndex.end()) { // new group bool firstGroup = groups.empty(); elements.push_back(element); if(!firstGroup) { // pop new element out of previous group --groups.back().fin; } // build new group groups.push_back(group_type(key)); group_type& newGroup = groups.back(); groupIndex.insert( std::make_pair(key, &newGroup) ); newGroup.fin = elements.end(); --(newGroup.start = newGroup.fin); } else { // add to existing group at end elements.insert(groupPos->second->end(), element); } }
/** * 获取群信息 * * @param pPdu 收到的packet包指针 * @param conn_uuid 该包过来的socket 描述符 */ void getGroupInfo(CImPdu* pPdu, uint32_t conn_uuid) { IM::Group::IMGroupInfoListReq msg; IM::Group::IMGroupInfoListRsp msgResp; if(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())) { CImPdu* pPduRes = new CImPdu; uint32_t nUserId = msg.user_id(); uint32_t nGroupCnt = msg.group_version_list_size(); map<uint32_t, IM::BaseDefine::GroupVersionInfo> mapGroupId; for(uint32_t i=0; i<nGroupCnt; ++i) { IM::BaseDefine::GroupVersionInfo groupInfo = msg.group_version_list(i); if(CGroupModel::getInstance()->isValidateGroupId(groupInfo.group_id())) { mapGroupId[groupInfo.group_id()] = groupInfo; } } list<IM::BaseDefine::GroupInfo> lsGroupInfo; CGroupModel::getInstance()->getGroupInfo(mapGroupId, lsGroupInfo); msgResp.set_user_id(nUserId); for(auto it=lsGroupInfo.begin(); it!=lsGroupInfo.end(); ++it) { IM::BaseDefine::GroupInfo* pGroupInfo = msgResp.add_group_info_list(); // *pGroupInfo = *it; pGroupInfo->set_group_id(it->group_id()); pGroupInfo->set_version(it->version()); pGroupInfo->set_group_name(it->group_name()); pGroupInfo->set_group_avatar(it->group_avatar()); pGroupInfo->set_group_creator_id(it->group_creator_id()); pGroupInfo->set_group_type(it->group_type()); pGroupInfo->set_shield_status(it->shield_status()); uint32_t nGroupMemberCnt = it->group_member_list_size(); for (uint32_t i=0; i<nGroupMemberCnt; ++i) { uint32_t userId = it->group_member_list(i); pGroupInfo->add_group_member_list(userId); } } log("userId=%u, requestCount=%u", nUserId, nGroupCnt); msgResp.set_attach_data(msg.attach_data()); pPduRes->SetPBMsg(&msgResp); pPduRes->SetSeqNum(pPdu->GetSeqNum()); pPduRes->SetServiceId(IM::BaseDefine::SID_GROUP); pPduRes->SetCommandId(IM::BaseDefine::CID_GROUP_INFO_RESPONSE); CProxyConn::AddResponsePdu(conn_uuid, pPduRes); } else { log("parse pb failed"); } }
void EItemGroup::add_items() { struct stat s; if(lstat(dir(), &s) == 0) { if(!m_modified) { m_modified = s.st_mtime; } if(m_modified != s.st_mtime) { //dir has changed.. m_modified = s.st_mtime; clear(); } } if(!children() && access()) { begin(); if(group_type()==BROWSER_GROUP) menu()->scan_filebrowser(dir()); else if(group_type()==APP_GROUP) menu()->scan_programitems(dir()); end(); } }