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 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) (limited to 'src/char/int_party.cpp') 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 (); } // パーティ追加要求 -- cgit v1.2.3-70-g09d2