My final solution is this, which works and doesn't use global state:

accflag(0x0001, public).
accflag(0x0010, final).
accflag(0x0020, super).
accflag(0x0200, interface).
accflag(0x0400, abstract).

access_flags(Value, Output) :-
    findall(X, flag_check(Value, X), Output).

flag_check(Value, Output) :-
    accflag(B, Output),
    On is Value /\ B,
    On > 0.

Many thanks to Michał Bieliński for invaluable assistance, well, the answer
pretty much, I just have to grok it now!

Excellent! :)

Sean.

On 23 October 2014 00:25, "Michał Bieliński" <mic...@kast.net.pl> wrote:

> Dnia 22 Października 2014, 00:54, Śr, emacstheviking napisał:
> > I really didn't think this would be so difficult! I have tried for
> > several hours now to find an elegant solution to my problem:
> > given a 32 bit value, create a list of atoms that represent
> > the names of those bit positions of interest.
>
> Until this point it sounds easy.
>
> > %% these define the bit positions of interest
> > accflag(0x0001, public).
> > accflag(0x0010, final).
> > accflag(0x0020, super).
> > accflag(0x0200, interface).
> > accflag(0x0400, abstract).
>
> Bit positions those are not. They are bit values.
>
> Those are bit positions:
> accflag(0, public).
> accflag(4, final).
> accflag(5, super).
> accflag(9, interface).
> accflag(10, abstract).
>
> > %% predicate to convert Value into a list of accflag/2 names.
>
> My way:
>
> access_flags(Value, Output) :-
>     findall(X, flag_check(Value, X), Output).
>
> flag_check(Value, Output) :-
>     accflag(X, Output),
>     g_assign(z, Value),
>     g_test_set_bit(z, X).
>
> > AAARGGGGH! Next month will be my 30th year in software and it
> > gets better every day!
>
> Just out of curiosity, how do you count the time? From your first hello
> world? From first year of working as programmer? Something else?
>
> --
> Michał Bieliński
>
>
> _______________________________________________
> Users-prolog mailing list
> Users-prolog@gnu.org
> https://lists.gnu.org/mailman/listinfo/users-prolog
>
_______________________________________________
Users-prolog mailing list
Users-prolog@gnu.org
https://lists.gnu.org/mailman/listinfo/users-prolog

Reply via email to