Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/18/84; site watcgl.UUCP Path: utzoo!watmath!watcgl!kdmoen From: kdmoen@watcgl.UUCP (Doug Moen) Newsgroups: net.lang.c Subject: Re: places where sets are useful Message-ID: <1378@watcgl.UUCP> Date: Wed, 27-Feb-85 12:34:10 EST Article-I.D.: watcgl.1378 Posted: Wed Feb 27 12:34:10 1985 Date-Received: Tue, 5-Mar-85 14:21:58 EST References: <10983@watmath.UUCP> <21000020@uiucuxc.UUCP> Reply-To: kdmoen@watcgl.UUCP (Doug Moen) Organization: U of Waterloo, Ontario Lines: 28 Summary: > type > mymodes = (insert, error, append, ...); > var > status = set of mymodes; > begin > ... > if (status * [insert, append]) <> [] then begin.... > ... > end > ... > end. > > Is much more readable and therefore less likely to get mangled in software > rewrites then is the exhaustive "if" phrasing. I agree. Here's how I would write this in C: enum {insert, error, append, ... }; #define elem(n) (1 << (int)(n)) short status; ... if (status & (elem(insert) | elem(append))) { ... /* add 'error' to set 'status' */ status |= elem(error); /* remove 'error' from set 'status' */ status &= ~elem(error);