~ubuntu-branches/ubuntu/saucy/ricochet/saucy

« back to all changes in this revision

Viewing changes to ricochet-0.1/debian/ricochet/usr/share/ricochet/array.5c

  • Committer: Package Import Robot
  • Author(s): Keith Packard
  • Date: 2012-06-11 13:37:57 UTC
  • Revision ID: package-import@ubuntu.com-20120611133757-zn0ukd22vz56ymto
Tags: 0.3
* Improve appearance of board
* Fix user list when removing/adding same user

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * $Id$
3
 
 *
4
 
 * Copyright © 2003 Keith Packard
5
 
 *
6
 
 * Permission to use, copy, modify, distribute, and sell this software and its
7
 
 * documentation for any purpose is hereby granted without fee, provided that
8
 
 * the above copyright notice appear in all copies and that both that
9
 
 * copyright notice and this permission notice appear in supporting
10
 
 * documentation, and that the name of Keith Packard not be used in
11
 
 * advertising or publicity pertaining to distribution of the software without
12
 
 * specific, written prior permission.  Keith Packard makes no
13
 
 * representations about the suitability of this software for any purpose.  It
14
 
 * is provided "as is" without express or implied warranty.
15
 
 *
16
 
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17
 
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18
 
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19
 
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20
 
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21
 
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22
 
 * PERFORMANCE OF THIS SOFTWARE.
23
 
 */
24
 
 
25
 
namespace Array {
26
 
    public bool contains (&poly[*] a, poly v) {
27
 
        for (int i = 0; i < dim(a); i++)
28
 
            if (a[i] == v)
29
 
                return true;
30
 
        return false;
31
 
    }
32
 
 
33
 
    public poly append (&poly[*] a, poly v) {
34
 
        if (contains(&a, v))
35
 
            return v;
36
 
        a = (poly[dim(a)+1]) { [i] = i < dim(a) ? a[i] : v };
37
 
        return v;
38
 
    }
39
 
 
40
 
    public poly push (&poly[*] a, poly v) {
41
 
        a = (poly[dim(a)+1]) { [i] = i < dim(a) ? a[i] : v };
42
 
        return v;
43
 
    }
44
 
        
45
 
    public exception    empty (&poly[*] a);
46
 
    
47
 
    public poly pop (&poly[*] a) {
48
 
        if (dim(a) == 0)
49
 
            raise empty (a);
50
 
        poly v = a[dim(a)-1];
51
 
        a = (poly[dim(a)-1]) { [i] = a[i] };
52
 
        return v;
53
 
    }
54
 
 
55
 
    public void iterate (&poly[*] a, void (poly v) f) {
56
 
        for (int i = 0; i < dim (a); i++)
57
 
            f(a[i]);
58
 
    }
59
 
    
60
 
    public void remove (&poly[*] a, poly v) {
61
 
        if (!contains (&a, v))
62
 
            return;
63
 
        bool found = false;
64
 
        a = (poly[dim(a)-1]) { [i] = found ? a[i+1] :
65
 
            a[i] == v ? (found=true, a[i+1]) : a[i] };
66
 
    }
67
 
        
68
 
}