btl_rank.h 1.37 KB
#pragma once

#include <common.h>
#include <share_msg.pb.h>

struct btl_rank_user_t : public share_msg::btl_rank_user_t
{
	bool operator<(const btl_rank_user_t& r) const{
		if (this->exp() != r.exp()) {
			return r.exp() < this->exp();
		} else {
			if (this->win_cnt() != r.win_cnt()) {
				return this->win_cnt() < r.win_cnt();
			} else {
				return this->user_show().uid() < r.user_show().uid();
			}
		}
		return false;
	}
	uint32_t no;
	btl_rank_user_t(){
		this->no = 0;
	}
};

class user_t;

class btl_rank_mgr_t
{
public:
	btl_rank_mgr_t(){}
public:
	// 返回查找的用户	
	btl_rank_user_t* find(uint32_t type, USER_ID uid);
	btl_rank_user_t* find_yesterday( uint32_t type, USER_ID uid );
	// 找到最小值 	
	const btl_rank_user_t* find_last(uint32_t type);

	bool has_uid(USER_ID uid);

	void db_update_rank(const share_msg::btl_rank_user_t& rank_user);
	void db_delete_user_rank(uint32_t type, USER_ID uid);

	void db_delete_yesterday_rank();
	void db_yesterday_update_rank( const share_msg::btl_rank_user_t& rank_user );

	void clear(std::set<btl_rank_user_t>& rank_user_set);
	void pack(btl_rank_user_t& bru, uint32_t type, uint32_t win_cnt, uint32_t exp, user_t* user);
public:
	std::map<uint32_t, std::set<btl_rank_user_t> > rank_map;//desc: rank info
	std::map<uint32_t, std::set<btl_rank_user_t> > yesterday_rank_map;//desc: rank info
};

extern btl_rank_mgr_t* g_btl_rank_mgr;