Commit f2278ae7 authored by Chen Bill's avatar Chen Bill Committed by GitHub

use vector rbegin (#2628)

* use vector rbegin

* const reference

* use vector assign

* minor update

* init
parent 85793b71
...@@ -88,11 +88,11 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) { ...@@ -88,11 +88,11 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
if(!list) if(!list)
return 0; return 0;
int dc = 0; int dc = 0;
if((int)deck.main.size() < DECK_MIN_SIZE || (int)deck.main.size() > DECK_MAX_SIZE) if(deck.main.size() < DECK_MIN_SIZE || deck.main.size() > DECK_MAX_SIZE)
return ((unsigned)DECKERROR_MAINCOUNT << 28) + deck.main.size(); return ((unsigned)DECKERROR_MAINCOUNT << 28) + deck.main.size();
if((int)deck.extra.size() > EXTRA_MAX_SIZE) if(deck.extra.size() > EXTRA_MAX_SIZE)
return ((unsigned)DECKERROR_EXTRACOUNT << 28) + deck.extra.size(); return ((unsigned)DECKERROR_EXTRACOUNT << 28) + deck.extra.size();
if((int)deck.side.size() > SIDE_MAX_SIZE) if(deck.side.size() > SIDE_MAX_SIZE)
return ((unsigned)DECKERROR_SIDECOUNT << 28) + deck.side.size(); return ((unsigned)DECKERROR_SIDECOUNT << 28) + deck.side.size();
if (rule < 0 || rule >= 6) if (rule < 0 || rule >= 6)
return 0; return 0;
......
...@@ -567,37 +567,32 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -567,37 +567,32 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
wchar_t formatBuffer[2048]; wchar_t formatBuffer[2048];
switch(command_location) { switch(command_location) {
case LOCATION_DECK: { case LOCATION_DECK: {
for(int i = (int)deck[command_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(deck[command_controler].rbegin(), deck[command_controler].rend());
selectable_cards.push_back(deck[command_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1000), deck[command_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1000), deck[command_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
} }
case LOCATION_MZONE: { case LOCATION_MZONE: {
ClientCard* pcard = mzone[command_controler][command_sequence]; ClientCard* pcard = mzone[command_controler][command_sequence];
for(int i = 0; i < (int)pcard->overlayed.size(); ++i) selectable_cards.assign(pcard->overlayed.begin(), pcard->overlayed.end());
selectable_cards.push_back(pcard->overlayed[i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1007), pcard->overlayed.size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1007), pcard->overlayed.size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
} }
case LOCATION_GRAVE: { case LOCATION_GRAVE: {
for(int i = (int)grave[command_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(grave[command_controler].rbegin(), grave[command_controler].rend());
selectable_cards.push_back(grave[command_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1004), grave[command_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1004), grave[command_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
} }
case LOCATION_REMOVED: { case LOCATION_REMOVED: {
for(int i = (int)remove[command_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(remove[command_controler].rbegin(), remove[command_controler].rend());
selectable_cards.push_back(remove[command_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1005), remove[command_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1005), remove[command_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
} }
case LOCATION_EXTRA: { case LOCATION_EXTRA: {
for(int i = (int)extra[command_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(extra[command_controler].rbegin(), extra[command_controler].rend());
selectable_cards.push_back(extra[command_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1006), extra[command_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1006), extra[command_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1098,8 +1093,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1098,8 +1093,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_DECK: { case LOCATION_DECK: {
if(deck[hovered_controler].size() == 0) if(deck[hovered_controler].size() == 0)
break; break;
for(int i = (int)deck[hovered_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(deck[hovered_controler].rbegin(), deck[hovered_controler].rend());
selectable_cards.push_back(deck[hovered_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1000), deck[hovered_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1000), deck[hovered_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1107,8 +1101,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1107,8 +1101,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_MZONE: { case LOCATION_MZONE: {
if(!clicked_card || clicked_card->overlayed.size() == 0) if(!clicked_card || clicked_card->overlayed.size() == 0)
break; break;
for(int i = 0; i < (int)clicked_card->overlayed.size(); ++i) selectable_cards.assign(clicked_card->overlayed.begin(), clicked_card->overlayed.end());
selectable_cards.push_back(clicked_card->overlayed[i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1007), clicked_card->overlayed.size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1007), clicked_card->overlayed.size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1116,8 +1109,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1116,8 +1109,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_GRAVE: { case LOCATION_GRAVE: {
if(grave[hovered_controler].size() == 0) if(grave[hovered_controler].size() == 0)
break; break;
for(int i = (int)grave[hovered_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(grave[hovered_controler].rbegin(), grave[hovered_controler].rend());
selectable_cards.push_back(grave[hovered_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1004), grave[hovered_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1004), grave[hovered_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1125,8 +1117,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1125,8 +1117,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_REMOVED: { case LOCATION_REMOVED: {
if(remove[hovered_controler].size() == 0) if(remove[hovered_controler].size() == 0)
break; break;
for(int i = (int)remove[hovered_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(remove[hovered_controler].rbegin(), remove[hovered_controler].rend());
selectable_cards.push_back(remove[hovered_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1005), remove[hovered_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1005), remove[hovered_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1134,8 +1125,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1134,8 +1125,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_EXTRA: { case LOCATION_EXTRA: {
if(extra[hovered_controler].size() == 0) if(extra[hovered_controler].size() == 0)
break; break;
for(int i = (int)extra[hovered_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(extra[hovered_controler].rbegin(), extra[hovered_controler].rend());
selectable_cards.push_back(extra[hovered_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1006), extra[hovered_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1006), extra[hovered_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1153,8 +1143,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1153,8 +1143,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_MZONE: { case LOCATION_MZONE: {
if(!clicked_card || clicked_card->overlayed.size() == 0) if(!clicked_card || clicked_card->overlayed.size() == 0)
break; break;
for(int i = 0; i < (int)clicked_card->overlayed.size(); ++i) selectable_cards.assign(clicked_card->overlayed.begin(), clicked_card->overlayed.end());
selectable_cards.push_back(clicked_card->overlayed[i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1007), clicked_card->overlayed.size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1007), clicked_card->overlayed.size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1162,8 +1151,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1162,8 +1151,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_GRAVE: { case LOCATION_GRAVE: {
if(grave[hovered_controler].size() == 0) if(grave[hovered_controler].size() == 0)
break; break;
for(int i = (int)grave[hovered_controler].size() - 1; i >= 0 ; --i) selectable_cards.assign(grave[hovered_controler].rbegin(), grave[hovered_controler].rend());
selectable_cards.push_back(grave[hovered_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1004), grave[hovered_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1004), grave[hovered_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1171,8 +1159,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1171,8 +1159,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_REMOVED: { case LOCATION_REMOVED: {
if (remove[hovered_controler].size() == 0) if (remove[hovered_controler].size() == 0)
break; break;
for (int i = (int)remove[hovered_controler].size() - 1; i >= 0; --i) selectable_cards.assign(remove[hovered_controler].rbegin(), remove[hovered_controler].rend());
selectable_cards.push_back(remove[hovered_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1005), remove[hovered_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1005), remove[hovered_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
...@@ -1180,8 +1167,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1180,8 +1167,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case LOCATION_EXTRA: { case LOCATION_EXTRA: {
if (extra[hovered_controler].size() == 0) if (extra[hovered_controler].size() == 0)
break; break;
for (int i = (int)extra[hovered_controler].size() - 1; i >= 0; --i) selectable_cards.assign(extra[hovered_controler].rbegin(), extra[hovered_controler].rend());
selectable_cards.push_back(extra[hovered_controler][i]);
myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1006), extra[hovered_controler].size()); myswprintf(formatBuffer, L"%ls(%d)", dataManager.GetSysString(1006), extra[hovered_controler].size());
mainGame->wCardSelect->setText(formatBuffer); mainGame->wCardSelect->setText(formatBuffer);
break; break;
......
...@@ -200,7 +200,7 @@ inline bool check_msg_size(int size) { ...@@ -200,7 +200,7 @@ inline bool check_msg_size(int size) {
return true; return true;
} }
inline unsigned int GetPosition(unsigned char* qbuf, int offset) { inline unsigned int GetPosition(unsigned char* qbuf, size_t offset) {
unsigned int info = 0; unsigned int info = 0;
std::memcpy(&info, qbuf + offset, sizeof info); std::memcpy(&info, qbuf + offset, sizeof info);
return info >> 24; return info >> 24;
......
...@@ -448,28 +448,19 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -448,28 +448,19 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
last_replay.WriteInt32(host_info.draw_count, false); last_replay.WriteInt32(host_info.draw_count, false);
last_replay.WriteInt32(opt, false); last_replay.WriteInt32(opt, false);
last_replay.Flush(); last_replay.Flush();
last_replay.WriteInt32(pdeck[0].main.size(), false); auto load = [&](const std::vector<code_pointer>& deck_container, uint8_t p, uint8_t location) {
for(int i = (int)pdeck[0].main.size() - 1; i >= 0; --i) { last_replay.WriteInt32(deck_container.size(), false);
new_card(pduel, pdeck[0].main[i]->first, 0, 0, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE); for (auto cit = deck_container.rbegin(); cit != deck_container.rend(); ++cit) {
last_replay.WriteInt32(pdeck[0].main[i]->first, false); new_card(pduel, (*cit)->first, p, p, location, 0, POS_FACEDOWN_DEFENSE);
} last_replay.WriteInt32((*cit)->first, false);
last_replay.WriteInt32(pdeck[0].extra.size(), false); }
for(int i = (int)pdeck[0].extra.size() - 1; i >= 0; --i) { };
new_card(pduel, pdeck[0].extra[i]->first, 0, 0, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE); load(pdeck[0].main, 0, LOCATION_DECK);
last_replay.WriteInt32(pdeck[0].extra[i]->first, false); load(pdeck[0].extra, 0, LOCATION_EXTRA);
} load(pdeck[1].main, 1, LOCATION_DECK);
last_replay.WriteInt32(pdeck[1].main.size(), false); load(pdeck[1].extra, 1, LOCATION_EXTRA);
for(int i = (int)pdeck[1].main.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[1].main[i]->first, 1, 1, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[1].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[1].extra.size(), false);
for(int i = (int)pdeck[1].extra.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[1].extra[i]->first, 1, 1, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[1].extra[i]->first, false);
}
last_replay.Flush(); last_replay.Flush();
unsigned char startbuf[32]; unsigned char startbuf[32]{};
auto pbuf = startbuf; auto pbuf = startbuf;
BufferIO::WriteInt8(pbuf, MSG_START); BufferIO::WriteInt8(pbuf, MSG_START);
BufferIO::WriteInt8(pbuf, 0); BufferIO::WriteInt8(pbuf, 0);
......
...@@ -426,52 +426,30 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -426,52 +426,30 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
last_replay.WriteInt32(host_info.draw_count, false); last_replay.WriteInt32(host_info.draw_count, false);
last_replay.WriteInt32(opt, false); last_replay.WriteInt32(opt, false);
last_replay.Flush(); last_replay.Flush();
// auto load_single = [&](const std::vector<code_pointer>& deck_container, uint8_t p, uint8_t location) {
last_replay.WriteInt32(pdeck[0].main.size(), false); last_replay.WriteInt32(deck_container.size(), false);
for(int i = (int)pdeck[0].main.size() - 1; i >= 0; --i) { for (auto cit = deck_container.rbegin(); cit != deck_container.rend(); ++cit) {
new_card(pduel, pdeck[0].main[i]->first, 0, 0, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE); new_card(pduel, (*cit)->first, p, p, location, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[0].main[i]->first, false); last_replay.WriteInt32((*cit)->first, false);
} }
last_replay.WriteInt32(pdeck[0].extra.size(), false); };
for(int i = (int)pdeck[0].extra.size() - 1; i >= 0; --i) { auto load_tag = [&](const std::vector<code_pointer>& deck_container, uint8_t p, uint8_t location) {
new_card(pduel, pdeck[0].extra[i]->first, 0, 0, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE); last_replay.WriteInt32(deck_container.size(), false);
last_replay.WriteInt32(pdeck[0].extra[i]->first, false); for (auto cit = deck_container.rbegin(); cit != deck_container.rend(); ++cit) {
} new_tag_card(pduel, (*cit)->first, p, location);
// last_replay.WriteInt32((*cit)->first, false);
last_replay.WriteInt32(pdeck[1].main.size(), false); }
for(int i = (int)pdeck[1].main.size() - 1; i >= 0; --i) { };
new_tag_card(pduel, pdeck[1].main[i]->first, 0, LOCATION_DECK); load_single(pdeck[0].main, 0, LOCATION_DECK);
last_replay.WriteInt32(pdeck[1].main[i]->first, false); load_single(pdeck[0].extra, 0, LOCATION_EXTRA);
} load_tag(pdeck[1].main, 0, LOCATION_DECK);
last_replay.WriteInt32(pdeck[1].extra.size(), false); load_tag(pdeck[1].extra, 0, LOCATION_EXTRA);
for(int i = (int)pdeck[1].extra.size() - 1; i >= 0; --i) { load_single(pdeck[3].main, 1, LOCATION_DECK);
new_tag_card(pduel, pdeck[1].extra[i]->first, 0, LOCATION_EXTRA); load_single(pdeck[3].extra, 1, LOCATION_EXTRA);
last_replay.WriteInt32(pdeck[1].extra[i]->first, false); load_tag(pdeck[2].main, 1, LOCATION_DECK);
} load_tag(pdeck[2].extra, 1, LOCATION_EXTRA);
//
last_replay.WriteInt32(pdeck[3].main.size(), false);
for(int i = (int)pdeck[3].main.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[3].main[i]->first, 1, 1, LOCATION_DECK, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[3].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[3].extra.size(), false);
for(int i = (int)pdeck[3].extra.size() - 1; i >= 0; --i) {
new_card(pduel, pdeck[3].extra[i]->first, 1, 1, LOCATION_EXTRA, 0, POS_FACEDOWN_DEFENSE);
last_replay.WriteInt32(pdeck[3].extra[i]->first, false);
}
//
last_replay.WriteInt32(pdeck[2].main.size(), false);
for(int i = (int)pdeck[2].main.size() - 1; i >= 0; --i) {
new_tag_card(pduel, pdeck[2].main[i]->first, 1, LOCATION_DECK);
last_replay.WriteInt32(pdeck[2].main[i]->first, false);
}
last_replay.WriteInt32(pdeck[2].extra.size(), false);
for(int i = (int)pdeck[2].extra.size() - 1; i >= 0; --i) {
new_tag_card(pduel, pdeck[2].extra[i]->first, 1, LOCATION_EXTRA);
last_replay.WriteInt32(pdeck[2].extra[i]->first, false);
}
last_replay.Flush(); last_replay.Flush();
unsigned char startbuf[32]; unsigned char startbuf[32]{};
auto pbuf = startbuf; auto pbuf = startbuf;
BufferIO::WriteInt8(pbuf, MSG_START); BufferIO::WriteInt8(pbuf, MSG_START);
BufferIO::WriteInt8(pbuf, 0); BufferIO::WriteInt8(pbuf, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment