]>
git.proxmox.com Git - rustc.git/blob - src/test/run-pass/pipe-presentation-examples.rs
4 // XFAIL'd because this is going to be revamped, and it's not compatible as
5 // written with the new mutability rules.
7 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
8 // file at the top-level directory of this distribution and at
9 // http://rust-lang.org/COPYRIGHT.
11 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
12 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
13 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
14 // option. This file may not be copied, modified, or distributed
15 // except according to those terms.
17 // Examples from Eric's internship final presentation.
19 // Code is easier to write in emacs, and it's good to be sure all the
20 // code samples compile (or not) as they should.
22 use double_buffer
::client
::*;
23 use double_buffer
::give_buffer
;
24 use std
::comm
::Selectable
;
26 macro_rules
! select_if (
31 $
($message
:path$
(($
($x
: ident
),+))dont_type_this
*
32 -> $next
:ident $e
:expr
),+
35 $
($messages
:path$
(($
($xs
: ident
),+))dont_type_this
*
36 -> $nexts
:ident $es
:expr
),+
40 match std
::pipes
::try_recv($port
) {
41 $
(Some($
message($
($
($x
,)+)* next
)) => {
52 $
($messages$
(($
($xs
),+))dont_type_this
*
70 $
($message
:path$
(($
($x
: ident
),+))dont_type_this
*
71 -> $next
:ident $e
:expr
),+
74 let index
= std
::comm
::selecti([$
(($port
).header()),+]);
75 select_if
!(index
, 0, $
( $port
=> [
76 $
($message$
(($
($x
),+))dont_type_this
* -> $next $e
),+
81 // Types and protocols
87 impl Drop
for Buffer
{
91 proto
! double_buffer (
93 request
-> wait_buffer
97 give_buffer(::Buffer
) -> release
101 release(::Buffer
) -> acquire
106 fn render(_buffer
: &Buffer
) {
110 fn draw_frame(+channel
: double_buffer
::client
::acquire
) {
111 let channel
= request(channel
);
114 give_buffer(buffer
) -> channel
{
116 release(channel
, buffer
)
122 fn draw_two_frames(+channel
: double_buffer
::client
::acquire
) {
123 let channel
= request(channel
);
124 let channel
= select
! (
126 give_buffer(buffer
) -> channel
{
128 release(channel
, buffer
)
132 let channel
= request(channel
);
135 give_buffer(buffer
) -> channel
{
137 release(channel
, buffer
)
144 fn draw_two_frames_bad1(+channel
: double_buffer
::client
::acquire
) {
145 let channel
= request(channel
);
148 give_buffer(buffer
) -> channel
{
153 let channel
= request(channel
);
156 give_buffer(buffer
) -> channel
{
158 release(channel
, buffer
)
165 fn draw_two_frames_bad2(+channel
: double_buffer
::client
::acquire
) {
166 let channel
= request(channel
);
169 give_buffer(buffer
) -> channel
{
171 release(channel
, buffer
);
173 release(channel
, buffer
);