~ubuntu-branches/ubuntu/maverick/haxe/maverick

« back to all changes in this revision

Viewing changes to haxe/std/haxe/FastList.hx

  • Committer: Bazaar Package Importer
  • Author(s): Jens Peter Secher
  • Date: 2008-06-15 11:04:09 UTC
  • mfrom: (2.1.6 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080615110409-7pyykgwmk5v0cues
Tags: 1:1.19-3
* Remove bashism in script.
  (Closes: #484390)
* Upgrade to Policy 3.8.0 by including a README.source explaining how to
  use dpatch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2005-2008, The haXe Project Contributors
 
3
 * All rights reserved.
 
4
 * Redistribution and use in source and binary forms, with or without
 
5
 * modification, are permitted provided that the following conditions are met:
 
6
 *
 
7
 *   - Redistributions of source code must retain the above copyright
 
8
 *     notice, this list of conditions and the following disclaimer.
 
9
 *   - Redistributions in binary form must reproduce the above copyright
 
10
 *     notice, this list of conditions and the following disclaimer in the
 
11
 *     documentation and/or other materials provided with the distribution.
 
12
 *
 
13
 * THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY
 
14
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 
15
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
16
 * DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR
 
17
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
18
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
19
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
20
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
21
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
22
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 
23
 * DAMAGE.
 
24
 */
 
25
package haxe;
 
26
 
 
27
class FastCell<T> #if flash9 implements haxe.rtti.Generic #end {
 
28
        public var elt : T;
 
29
        public var next : FastCell<T>;
 
30
        public function new(elt,next) { this.elt = elt; this.next = next; }
 
31
}
 
32
 
 
33
/**
 
34
        A linked-list of elements. A different class is created for each container used in platforms where it matters
 
35
**/
 
36
class FastList<T> #if flash9 implements haxe.rtti.Generic #end {
 
37
 
 
38
        public var head : FastCell<T>;
 
39
 
 
40
        /**
 
41
                Creates a new empty list.
 
42
        **/
 
43
        public function new() {
 
44
        }
 
45
 
 
46
        /**
 
47
                Add an element at the head of the list.
 
48
        **/
 
49
        public inline function add( item : T ) {
 
50
                head = new FastCell<T>(item,head);
 
51
        }
 
52
 
 
53
        /**
 
54
                Returns the first element of the list, or null
 
55
                if the list is empty.
 
56
        **/
 
57
        public inline function first() : Null<T> {
 
58
                return if( head == null ) null else head.elt;
 
59
        }
 
60
 
 
61
        /**
 
62
                Removes the first element of the list and
 
63
                returns it or simply returns null if the
 
64
                list is empty.
 
65
        **/
 
66
        public inline function pop() : Null<T> {
 
67
                var k = head;
 
68
                if( k== null )
 
69
                        return null;
 
70
                else {
 
71
                        head = k.next;
 
72
                        return k.elt;
 
73
                }
 
74
        }
 
75
 
 
76
        /**
 
77
                Tells if a list is empty.
 
78
        **/
 
79
        public inline function isEmpty() : Bool {
 
80
                return (head == null);
 
81
        }
 
82
 
 
83
        /**
 
84
                Remove the first element that is [== v] from the list.
 
85
                Returns [true] if an element was removed, [false] otherwise.
 
86
        **/
 
87
        public function remove( v : T ) : Bool {
 
88
                var prev = null;
 
89
                var l = head;
 
90
                while( l != null ) {
 
91
                        if( l.elt == v ) {
 
92
                                if( prev == null )
 
93
                                        head = l.next;
 
94
                                else
 
95
                                        prev.next = l.next;
 
96
                                break;
 
97
                        }
 
98
                        prev = l;
 
99
                        l = l.next;
 
100
                }
 
101
                return (l != null);
 
102
        }
 
103
 
 
104
        /**
 
105
                Returns an iterator on the elements of the list.
 
106
        **/
 
107
        public function iterator() : Iterator<T> {
 
108
                var l = head;
 
109
                return {
 
110
                        hasNext : function() {
 
111
                                return l != null;
 
112
                        },
 
113
                        next : function() {
 
114
                                var k = l;
 
115
                                l = k.next;
 
116
                                return k.elt;
 
117
                        }
 
118
                };
 
119
        }
 
120
 
 
121
        /**
 
122
                Returns a displayable representation of the String.
 
123
        **/
 
124
        public function toString() {
 
125
                var a = new Array();
 
126
                var l = head;
 
127
                while( l != null ) {
 
128
                        a.push(l.elt);
 
129
                        l = l.next;
 
130
                }
 
131
                return "{"+a.join(",")+"}";
 
132
        }
 
133
 
 
134
}