aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/test/opaque_tests_SUITE_data/src/wings/wings_io.erl
blob: 39002c675d535c4a267e26892a2fc6286b094384 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
%%
%%  wings_io.erl --
%%
%%     This module contains most of the low-level GUI for Wings.
%%

-module(wings_io).

-export([get_matching_events/1]).

-define(EVENT_QUEUE, wings_io_event_queue).

%%%
%%% Input.
%%%

get_matching_events(Filter) ->
    Eq = get(?EVENT_QUEUE),
    get_matching_events_1(Filter, Eq, [], []).

get_matching_events_1(Filter, Eq0, Match, NoMatch) ->
    case queue:out(Eq0) of
	{{value,Ev},Eq} ->
	    case Filter(Ev) of
		false ->
		    get_matching_events_1(Filter, Eq, Match, [Ev|NoMatch]);
		true ->
		    get_matching_events_1(Filter, Eq, [Ev|Match], NoMatch)
	    end;
	{empty,{In,Out}} ->
	    case Match of
		[] -> [];
		_ ->
		    put(?EVENT_QUEUE, {In, lists:reverse(NoMatch, Out)}),
		    Match
	    end
    end.