From 00da6b5977574a0564169172227d8aab45be188f Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Sat, 3 Jan 2015 21:07:56 -0800 Subject: Switch MATCH to separate begin/end macros The for loop trick turned out to be very prone to infinite loops at runtime. It's better to force compiler errors even if it's ugly. --- src/char/int_party.cpp | 42 +++++++++++++++++++++++++++--------------- src/char/inter.cpp | 3 ++- 2 files changed, 29 insertions(+), 16 deletions(-) (limited to 'src/char') diff --git a/src/char/int_party.cpp b/src/char/int_party.cpp index 5000ff2..731669a 100644 --- a/src/char/int_party.cpp +++ b/src/char/int_party.cpp @@ -327,19 +327,23 @@ void mapif_party_created(Session *s, AccountId account_id, Option p_) { Packet_Fixed<0x3820> fixed_20; fixed_20.account_id = account_id; - if OPTION_IS_SOME_NOLOOP(p, p_) + OMATCH_BEGIN (p_) { - fixed_20.error = 0; - fixed_20.party_id = p.party_id; - fixed_20.party_name = p->name; - PRINTF("int_party: created! %d %s\n"_fmt, p.party_id, p->name); - } - else - { - fixed_20.error = 1; - fixed_20.party_id = PartyId(); - fixed_20.party_name = stringish("error"_s); + OMATCH_CASE_SOME (p) + { + fixed_20.error = 0; + fixed_20.party_id = p.party_id; + fixed_20.party_name = p->name; + PRINTF("int_party: created! %d %s\n"_fmt, p.party_id, p->name); + } + OMATCH_CASE_NONE () + { + fixed_20.error = 1; + fixed_20.party_id = PartyId(); + fixed_20.party_name = stringish("error"_s); + } } + OMATCH_END (); send_fpacket<0x3820, 35>(s, fixed_20); } @@ -524,10 +528,18 @@ static void mapif_parse_PartyInfo(Session *s, PartyId party_id) { Option> maybe_party_most = party_db.search(party_id); - if OPTION_IS_SOME_NOLOOP(party_most, maybe_party_most) - mapif_party_info(s, PartyPair{party_id, party_most}); - else - mapif_party_noinfo(s, party_id); + OMATCH_BEGIN (maybe_party_most) + { + OMATCH_CASE_SOME (party_most) + { + mapif_party_info(s, PartyPair{party_id, party_most}); + } + OMATCH_CASE_NONE () + { + mapif_party_noinfo(s, party_id); + } + } + OMATCH_END (); } // パーティ追加要求 diff --git a/src/char/inter.cpp b/src/char/inter.cpp index eccfc1b..c081825 100644 --- a/src/char/inter.cpp +++ b/src/char/inter.cpp @@ -270,7 +270,7 @@ void mapif_account_reg_reply(Session *s, AccountId account_id) Packet_Head<0x3804> head_04; head_04.account_id = account_id; std::vector> repeat_04; - if OPTION_IS_SOME_NOLOOP(reg, reg_) + OMATCH_BEGIN_SOME (reg, reg_) { repeat_04.resize(reg->reg_num); assert (reg->reg_num < ACCOUNT_REG_NUM); @@ -280,6 +280,7 @@ void mapif_account_reg_reply(Session *s, AccountId account_id) repeat_04[j].value = reg->reg[j].value; } } + OMATCH_END (); send_vpacket<0x3804, 8, 36>(s, head_04, repeat_04); } -- cgit v1.2.3-60-g2f50