[Freeciv-Dev] Re: improper access of iterators
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
On Mon, 27 Aug 2001, hawk@xxxxxxxxxxxxxxxxxxxxxxx wrote:
> On Sun, Aug 26, 2001 at 07:08:01PM -0400, Jason Dorje Short wrote:
>> Raimar Falke wrote:
>> >
>> > On Sun, Aug 26, 2001 at 05:40:42PM -0400, Justin Moore wrote:
>>
>> > for(;;) {
>> > int changed=0;
>> > unit_list_iterate(pcity->units_supported, punit)
>> > if (some_condition) {
>> > handle_unit_disband_safe(pplayer, &pack);
>> > city_refresh(pcity);
>> > ai_fix_unhappy(pcity);
>> > changed=1;
>> > break;
>> > }
>> > unit_list_iterate_end;
>> > if(changed) break;
>> > }
>> >
>> > This looks save to me but is a bit ugly.
>>
>> The same can be accomplished with a single GOTO:
>>
>> start_over:
>> unit_list_iterate(pcity->units_supported, punit)
>> if (some_condition) {
>> handle_unit_disband_safe(pplayer, &pack, &myiter);
>> city_refresh(pcity);
>> ai_fix_unhappy(pcity);
>> goto start_over; /* use of goto saves ugly loop */
>> }
>> unit_list_iterate_end;
>
> Nice.
Particularly since it's not always clear which iterator macros you can
break; away from and not...we should document this.
--
Big Gaute http://www.srcf.ucam.org/~gs234/
I have a very good DENTAL PLAN. Thank you.
|
|