~ubuntu-branches/debian/squeeze/erlang/squeeze

« back to all changes in this revision

Viewing changes to erts/example/next_perm.erl

  • Committer: Bazaar Package Importer
  • Author(s): Erlang Packagers, Sergei Golovan
  • Date: 2006-12-03 17:07:44 UTC
  • mfrom: (2.1.11 feisty)
  • Revision ID: james.westby@ubuntu.com-20061203170744-rghjwupacqlzs6kv
Tags: 1:11.b.2-4
[ Sergei Golovan ]
Fixed erlang-base and erlang-base-hipe prerm scripts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
-module(next_perm).
 
2
 
 
3
-export([next_perm/1, prev_perm/1, load/0, all_perm/1]).
 
4
 
 
5
load() ->
 
6
    case whereis(next_perm) of
 
7
        undefined ->
 
8
            case erl_ddll:load_driver(".", "next_perm") of
 
9
                ok -> ok;
 
10
                {error, already_loaded} -> ok;
 
11
                E -> exit(E)
 
12
            end,
 
13
            Port = open_port({spawn, "next_perm"}, []),
 
14
            register(next_perm, Port);
 
15
        _ ->
 
16
            ok
 
17
    end.
 
18
 
 
19
list_to_integer_binaries(L) ->
 
20
    [<<I:32/integer-native>> || I <- L].
 
21
 
 
22
next_perm(L) ->
 
23
    next_perm(L, 1).
 
24
 
 
25
prev_perm(L) ->
 
26
    next_perm(L, 2).
 
27
 
 
28
next_perm(L, Nxt) ->
 
29
    load(),
 
30
    B = list_to_integer_binaries(L),
 
31
    Port = whereis(next_perm),
 
32
    port_command(Port, [Nxt, B]),
 
33
    receive
 
34
        [Port | Result] ->
 
35
            Result
 
36
    end.
 
37
 
 
38
all_perm(L) ->
 
39
    New = prev_perm(L),
 
40
    all_perm(New, L, [New]).
 
41
 
 
42
all_perm(L, L, Acc) ->
 
43
    Acc;
 
44
all_perm(L, Orig, Acc) ->
 
45
    New = prev_perm(L),
 
46
    all_perm(New, Orig, [New | Acc]).
 
47
 
 
48