Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: frog/lib/node/nodeimpl.dart

Issue 9034014: Add support for the node net module. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: new version of minfrog Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 // Utilities used by the node library.
6
7 #library('nodeimpl');
8
9 // Helpers for read-only collections of native objects
10
11 // Takes a JavaScript object, returns a dart object
12 // Used to wrap list elements and map values
13
14 typedef var NativeValueWrapper(var v);
15
16 class NativeListBase<E> implements List<E>{
17 var _list;
18 NativeListBase(this._list);
19 int get length() => _length(_list);
20 int _length(var list) native "return list.length;";
21 abstract E operator[](int index);
22
23 bool isEmpty() => length == 0;
24
25 void forEach(void f(E e)) {
26 int len = length;
27 for (int i = 0; i < len; i++) {
28 f(this[i]);
29 }
30 }
31 }
32
33 class NativeList<E> extends NativeListBase<E> {
34 NativeValueWrapper _ctor;
35 NativeList(var list, this._ctor) : super(list);
36 E operator[](int index) => _ctor(_at(_list, index));
37 var _at(var list, int index) native "return list[index];";
38 }
39
40 class NativeListPrimitiveElement<E> extends NativeListBase<E> {
41 NativeListPrimitiveElement(var list) : super(list);
42 E operator[](int index) => _at(_list, index);
43 E _at(var list, int index) native "return list[index];";
44 }
45
46 class NativeMapBase<V> implements Map<String, V> {
47 var _map;
48 NativeMapBase(this._map);
49 int get length() => _length(_map);
50 int _length(var map) native "return map.length;";
51
52 bool isEmpty() => length == 0;
53
54 abstract V operator[](String key);
55
56 Collection<String> getKeys() {
57 List<String> keys = new List<String>();
58 _forEachKey(_map, (String key) => keys.add(key));
59 return keys;
60 }
61
62 Collection<V> getValues() {
63 List<V> values = new List<V>();
64 _forEachKey(_map, (String key) => values.add(this[key]));
65 return values;
66 }
67
68 void forEach(void f(String key, V value)) =>
69 _forEachKey(_map, (String k) => f(k, this[k]));
70
71 void _forEachKey(var map, void f(String key))
72 native """
73 for (var i in map) {
74 if (map.hasOwnProperty(i)) {
75 f(i);
76 }
77 }
78 """;
79 }
80
81 class NativeMap<V> extends NativeMapBase<V> {
82 NativeValueWrapper _ctor;
83 NativeMap(var map, this._ctor) : super(map);
84 V operator[](String key) => _ctor(_at(_map, key));
85 var _at(var map, String key) native "return map[key];";
86 }
87
88 class NativeMapPrimitiveValue<V> extends NativeMapBase<V> {
89 NativeMapPrimitiveValue(map) : super(map);
90 V operator[](String key) => _at(_map, key);
91 var _at(var map, String key) native "return map[key];";
92 }
93
94 String NativeGetStringProperty(var object, String key)
95 native "var v = object[key];return v == undefined ? null : v;";
96
97 bool NativeGetBoolProperty(var object, String key)
98 native "var v = object[key];return v == undefined ? null : v;";
99
100 int NativeGetIntProperty(var object, String key)
101 native "var v = object[key];return v == undefined ? null : v;";
102
103 double NativeGetDoubleProperty(var object, String key)
104 native "var v = object[key];return v == undefined ? null : v;";
105
106
107 // Fixed size List utilities
108
109 class FixedLists {
110 static void getRangeCheck(int srcLength, int start, int length) {
111 if (length < 0) {
112 throw new IllegalArgumentException();
113 }
114 int end = start + length;
115 if (start < 0 || start >= srcLength) {
116 throw new IndexOutOfRangeException(start);
117 }
118 if (end < 0 || end > srcLength) {
119 throw new IndexOutOfRangeException(end);
120 }
121 }
122
123 static int indexOf(List list, var element, int start) {
124 if (start == null) {
125 start = 0;
126 }
127 int end = list.length;
128 for (int i = start; i < end; i++) {
129 if (list[i] == element) {
130 return i;
131 }
132 }
133 return -1;
134 }
135
136 static int lastIndexOf(List list, var element, int start) {
137 int end = start == null ? list.length : start;
138 for (int i = end-1; i >= 0; i--) {
139 if (list[i] == element) {
140 return i;
141 }
142 }
143 return -1;
144 }
145
146 static num last(List list) {
147 int end = list.length;
148 if (end <= 0) {
149 throw new IndexOutOfRangeException(0);
150 }
151 return list[end-1];
152 }
153
154 static void forEach(List list, void f(var element)) {
155 int len = list.length;
156 for (int i = 0; i < len; i++) {
157 f(list[i]);
158 }
159 }
160
161 static Collection filter(List list, bool f(element), List ctor(int length)) {
162 // Assume computation is more expensive than allocation, so use a
163 // temporary growable list to store the filtered results.
164 // (The alternative would be to make two passes through the list.)
165 List filtered = [];
166 int len = list.length;
167 for (int i = 0; i < len; i++) {
168 var e = list[i];
169 if (f(e)) {
170 filtered.add(e);
171 }
172 }
173 int filteredLength = filtered.length;
174 List result = ctor(filteredLength);
175 for (int i = 0; i < len; i++) {
176 result[i] = filtered[i];
177 }
178 return result;
179 }
180
181 static bool every(List list, bool f(int element)) {
182 int len = list.length;
183 for (int i = 0; i < len; i++) {
184 if (! f(list[i])) {
185 return false;
186 }
187 }
188 return true;
189 }
190
191 static Collection map(List list, f(element), List result) {
192 int len = list.length;
193 for (int i = 0; i < len; i++) {
194 result[i] = f(list[i]);
195 }
196 return result;
197 }
198
199
200 static bool some(List list, bool f(num element)) {
201 int len = list.length;
202 for (int i = 0; i < len; i++) {
203 if (f(list[i])) {
204 return true;
205 }
206 }
207 return false;
208 }
209
210 static bool isEmpty(List list) => list.length == 0;
211 }
OLDNEW
« frog/lib/node/net.dart ('K') | « frog/lib/node/node.dart ('k') | frog/lib/node/os.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698