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

Side by Side Diff: runtime/bin/directory.h

Issue 2480793002: clang-format runtime/bin (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « runtime/bin/dartutils.cc ('k') | runtime/bin/directory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_BIN_DIRECTORY_H_ 5 #ifndef RUNTIME_BIN_DIRECTORY_H_
6 #define RUNTIME_BIN_DIRECTORY_H_ 6 #define RUNTIME_BIN_DIRECTORY_H_
7 7
8 #include "bin/builtin.h" 8 #include "bin/builtin.h"
9 #include "bin/dartutils.h" 9 #include "bin/dartutils.h"
10 #include "bin/reference_counting.h" 10 #include "bin/reference_counting.h"
(...skipping 20 matching lines...) Expand all
31 bool AddW(const wchar_t* name); 31 bool AddW(const wchar_t* name);
32 32
33 char* AsString() const; 33 char* AsString() const;
34 wchar_t* AsStringW() const; 34 wchar_t* AsStringW() const;
35 35
36 // Makes a scope allocated copy of the string. 36 // Makes a scope allocated copy of the string.
37 const char* AsScopedString() const; 37 const char* AsScopedString() const;
38 38
39 void Reset(intptr_t new_length); 39 void Reset(intptr_t new_length);
40 40
41 intptr_t length() const { 41 intptr_t length() const { return length_; }
42 return length_;
43 }
44 42
45 private: 43 private:
46 void* data_; 44 void* data_;
47 intptr_t length_; 45 intptr_t length_;
48 46
49 DISALLOW_COPY_AND_ASSIGN(PathBuffer); 47 DISALLOW_COPY_AND_ASSIGN(PathBuffer);
50 }; 48 };
51 49
52 class DirectoryListing; 50 class DirectoryListing;
53 51
54 struct LinkList; 52 struct LinkList;
55 53
56 // DirectoryListingEntry is used as a stack item, when performing recursive 54 // DirectoryListingEntry is used as a stack item, when performing recursive
57 // directory listing. By using DirectoryListingEntry as stack elements, a 55 // directory listing. By using DirectoryListingEntry as stack elements, a
58 // directory listing can be paused e.g. when a buffer is full, and resumed 56 // directory listing can be paused e.g. when a buffer is full, and resumed
59 // later on. 57 // later on.
60 // 58 //
61 // The stack is managed by the DirectoryListing's PathBuffer. Each 59 // The stack is managed by the DirectoryListing's PathBuffer. Each
62 // DirectoryListingEntry stored a entry-length, that it'll reset the PathBuffer 60 // DirectoryListingEntry stored a entry-length, that it'll reset the PathBuffer
63 // to on each call to Next. 61 // to on each call to Next.
64 class DirectoryListingEntry { 62 class DirectoryListingEntry {
65 public: 63 public:
66 explicit DirectoryListingEntry(DirectoryListingEntry* parent) 64 explicit DirectoryListingEntry(DirectoryListingEntry* parent)
67 : parent_(parent), lister_(0), done_(false), link_(NULL) {} 65 : parent_(parent), lister_(0), done_(false), link_(NULL) {}
68 66
69 ~DirectoryListingEntry(); 67 ~DirectoryListingEntry();
70 68
71 ListType Next(DirectoryListing* listing); 69 ListType Next(DirectoryListing* listing);
72 70
73 DirectoryListingEntry* parent() const { 71 DirectoryListingEntry* parent() const { return parent_; }
74 return parent_;
75 }
76 72
77 LinkList* link() { 73 LinkList* link() { return link_; }
78 return link_;
79 }
80 74
81 void set_link(LinkList* link) { 75 void set_link(LinkList* link) { link_ = link; }
82 link_ = link;
83 }
84 76
85 void ResetLink(); 77 void ResetLink();
86 78
87 private: 79 private:
88 DirectoryListingEntry* parent_; 80 DirectoryListingEntry* parent_;
89 intptr_t lister_; 81 intptr_t lister_;
90 bool done_; 82 bool done_;
91 int path_length_; 83 int path_length_;
92 LinkList* link_; 84 LinkList* link_;
93 85
94 DISALLOW_COPY_AND_ASSIGN(DirectoryListingEntry); 86 DISALLOW_COPY_AND_ASSIGN(DirectoryListingEntry);
95 }; 87 };
96 88
97 class DirectoryListing { 89 class DirectoryListing {
98 public: 90 public:
99 DirectoryListing(const char* dir_name, bool recursive, bool follow_links) 91 DirectoryListing(const char* dir_name, bool recursive, bool follow_links)
100 : top_(NULL), 92 : top_(NULL),
101 error_(false), 93 error_(false),
102 recursive_(recursive), 94 recursive_(recursive),
103 follow_links_(follow_links) { 95 follow_links_(follow_links) {
104 if (!path_buffer_.Add(dir_name)) { 96 if (!path_buffer_.Add(dir_name)) {
105 error_ = true; 97 error_ = true;
106 } 98 }
107 Push(new DirectoryListingEntry(NULL)); 99 Push(new DirectoryListingEntry(NULL));
108 } 100 }
109 101
110 virtual ~DirectoryListing() { 102 virtual ~DirectoryListing() { PopAll(); }
111 PopAll();
112 }
113 103
114 virtual bool HandleDirectory(const char* dir_name) = 0; 104 virtual bool HandleDirectory(const char* dir_name) = 0;
115 virtual bool HandleFile(const char* file_name) = 0; 105 virtual bool HandleFile(const char* file_name) = 0;
116 virtual bool HandleLink(const char* link_name) = 0; 106 virtual bool HandleLink(const char* link_name) = 0;
117 virtual bool HandleError() = 0; 107 virtual bool HandleError() = 0;
118 virtual void HandleDone() {} 108 virtual void HandleDone() {}
119 109
120 void Push(DirectoryListingEntry* directory) { 110 void Push(DirectoryListingEntry* directory) { top_ = directory; }
121 top_ = directory;
122 }
123 111
124 void Pop() { 112 void Pop() {
125 ASSERT(!IsEmpty()); 113 ASSERT(!IsEmpty());
126 DirectoryListingEntry* current = top_; 114 DirectoryListingEntry* current = top_;
127 top_ = top_->parent(); 115 top_ = top_->parent();
128 delete current; 116 delete current;
129 } 117 }
130 118
131 bool IsEmpty() const { 119 bool IsEmpty() const { return top_ == NULL; }
132 return top_ == NULL;
133 }
134 120
135 void PopAll() { 121 void PopAll() {
136 while (!IsEmpty()) { 122 while (!IsEmpty()) {
137 Pop(); 123 Pop();
138 } 124 }
139 } 125 }
140 126
141 DirectoryListingEntry* top() const { 127 DirectoryListingEntry* top() const { return top_; }
142 return top_;
143 }
144 128
145 bool recursive() const { 129 bool recursive() const { return recursive_; }
146 return recursive_;
147 }
148 130
149 bool follow_links() const { 131 bool follow_links() const { return follow_links_; }
150 return follow_links_;
151 }
152 132
153 const char* CurrentPath() { 133 const char* CurrentPath() { return path_buffer_.AsScopedString(); }
154 return path_buffer_.AsScopedString();
155 }
156 134
157 PathBuffer& path_buffer() { 135 PathBuffer& path_buffer() { return path_buffer_; }
158 return path_buffer_;
159 }
160 136
161 bool error() const { 137 bool error() const { return error_; }
162 return error_;
163 }
164 138
165 private: 139 private:
166 PathBuffer path_buffer_; 140 PathBuffer path_buffer_;
167 DirectoryListingEntry* top_; 141 DirectoryListingEntry* top_;
168 bool error_; 142 bool error_;
169 bool recursive_; 143 bool recursive_;
170 bool follow_links_; 144 bool follow_links_;
171 }; 145 };
172 146
173 147
174 class AsyncDirectoryListing : public ReferenceCounted<AsyncDirectoryListing>, 148 class AsyncDirectoryListing : public ReferenceCounted<AsyncDirectoryListing>,
175 public DirectoryListing { 149 public DirectoryListing {
176 public: 150 public:
177 enum Response { 151 enum Response {
178 kListFile = 0, 152 kListFile = 0,
179 kListDirectory = 1, 153 kListDirectory = 1,
180 kListLink = 2, 154 kListLink = 2,
181 kListError = 3, 155 kListError = 3,
182 kListDone = 4 156 kListDone = 4
183 }; 157 };
184 158
185 AsyncDirectoryListing(const char* dir_name, 159 AsyncDirectoryListing(const char* dir_name, bool recursive, bool follow_links)
186 bool recursive,
187 bool follow_links)
188 : ReferenceCounted(), 160 : ReferenceCounted(),
189 DirectoryListing(dir_name, recursive, follow_links), 161 DirectoryListing(dir_name, recursive, follow_links),
190 array_(NULL), 162 array_(NULL),
191 index_(0), 163 index_(0),
192 length_(0) {} 164 length_(0) {}
193 165
194 virtual bool HandleDirectory(const char* dir_name); 166 virtual bool HandleDirectory(const char* dir_name);
195 virtual bool HandleFile(const char* file_name); 167 virtual bool HandleFile(const char* file_name);
196 virtual bool HandleLink(const char* file_name); 168 virtual bool HandleLink(const char* file_name);
197 virtual bool HandleError(); 169 virtual bool HandleError();
198 virtual void HandleDone(); 170 virtual void HandleDone();
199 171
200 void SetArray(CObjectArray* array, intptr_t length) { 172 void SetArray(CObjectArray* array, intptr_t length) {
201 ASSERT(length % 2 == 0); 173 ASSERT(length % 2 == 0);
202 array_ = array; 174 array_ = array;
203 index_ = 0; 175 index_ = 0;
204 length_ = length; 176 length_ = length;
205 } 177 }
206 178
207 intptr_t index() const { 179 intptr_t index() const { return index_; }
208 return index_;
209 }
210 180
211 private: 181 private:
212 virtual ~AsyncDirectoryListing() {} 182 virtual ~AsyncDirectoryListing() {}
213 bool AddFileSystemEntityToResponse(Response response, const char* arg); 183 bool AddFileSystemEntityToResponse(Response response, const char* arg);
214 CObjectArray* array_; 184 CObjectArray* array_;
215 intptr_t index_; 185 intptr_t index_;
216 intptr_t length_; 186 intptr_t length_;
217 187
218 friend class ReferenceCounted<AsyncDirectoryListing>; 188 friend class ReferenceCounted<AsyncDirectoryListing>;
219 DISALLOW_IMPLICIT_CONSTRUCTORS(AsyncDirectoryListing); 189 DISALLOW_IMPLICIT_CONSTRUCTORS(AsyncDirectoryListing);
220 }; 190 };
221 191
222 192
223 class SyncDirectoryListing: public DirectoryListing { 193 class SyncDirectoryListing : public DirectoryListing {
224 public: 194 public:
225 SyncDirectoryListing(Dart_Handle results, 195 SyncDirectoryListing(Dart_Handle results,
226 const char* dir_name, 196 const char* dir_name,
227 bool recursive, 197 bool recursive,
228 bool follow_links) 198 bool follow_links)
229 : DirectoryListing(dir_name, recursive, follow_links), 199 : DirectoryListing(dir_name, recursive, follow_links), results_(results) {
230 results_(results) {
231 add_string_ = DartUtils::NewString("add"); 200 add_string_ = DartUtils::NewString("add");
232 directory_type_ = 201 directory_type_ = DartUtils::GetDartType(DartUtils::kIOLibURL, "Directory");
233 DartUtils::GetDartType(DartUtils::kIOLibURL, "Directory"); 202 file_type_ = DartUtils::GetDartType(DartUtils::kIOLibURL, "File");
234 file_type_ = 203 link_type_ = DartUtils::GetDartType(DartUtils::kIOLibURL, "Link");
235 DartUtils::GetDartType(DartUtils::kIOLibURL, "File");
236 link_type_ =
237 DartUtils::GetDartType(DartUtils::kIOLibURL, "Link");
238 } 204 }
239 virtual ~SyncDirectoryListing() {} 205 virtual ~SyncDirectoryListing() {}
240 virtual bool HandleDirectory(const char* dir_name); 206 virtual bool HandleDirectory(const char* dir_name);
241 virtual bool HandleFile(const char* file_name); 207 virtual bool HandleFile(const char* file_name);
242 virtual bool HandleLink(const char* file_name); 208 virtual bool HandleLink(const char* file_name);
243 virtual bool HandleError(); 209 virtual bool HandleError();
244 210
245 private: 211 private:
246 Dart_Handle results_; 212 Dart_Handle results_;
247 Dart_Handle add_string_; 213 Dart_Handle add_string_;
248 Dart_Handle directory_type_; 214 Dart_Handle directory_type_;
249 Dart_Handle file_type_; 215 Dart_Handle file_type_;
250 Dart_Handle link_type_; 216 Dart_Handle link_type_;
251 217
252 DISALLOW_ALLOCATION() 218 DISALLOW_ALLOCATION()
253 DISALLOW_IMPLICIT_CONSTRUCTORS(SyncDirectoryListing); 219 DISALLOW_IMPLICIT_CONSTRUCTORS(SyncDirectoryListing);
254 }; 220 };
255 221
256 222
257 class Directory { 223 class Directory {
258 public: 224 public:
259 enum ExistsResult { 225 enum ExistsResult { UNKNOWN, EXISTS, DOES_NOT_EXIST };
260 UNKNOWN,
261 EXISTS,
262 DOES_NOT_EXIST
263 };
264 226
265 static void List(DirectoryListing* listing); 227 static void List(DirectoryListing* listing);
266 static ExistsResult Exists(const char* path); 228 static ExistsResult Exists(const char* path);
267 229
268 // Returns the current working directory. The caller must call 230 // Returns the current working directory. The caller must call
269 // free() on the result. 231 // free() on the result.
270 static char* CurrentNoScope(); 232 static char* CurrentNoScope();
271 233
272 // Returns the current working directory. The returned string is allocated 234 // Returns the current working directory. The returned string is allocated
273 // with Dart_ScopeAllocate(). It lasts only as long as the current API scope. 235 // with Dart_ScopeAllocate(). It lasts only as long as the current API scope.
(...skipping 20 matching lines...) Expand all
294 private: 256 private:
295 static char* system_temp_path_override_; 257 static char* system_temp_path_override_;
296 DISALLOW_ALLOCATION(); 258 DISALLOW_ALLOCATION();
297 DISALLOW_IMPLICIT_CONSTRUCTORS(Directory); 259 DISALLOW_IMPLICIT_CONSTRUCTORS(Directory);
298 }; 260 };
299 261
300 } // namespace bin 262 } // namespace bin
301 } // namespace dart 263 } // namespace dart
302 264
303 #endif // RUNTIME_BIN_DIRECTORY_H_ 265 #endif // RUNTIME_BIN_DIRECTORY_H_
OLDNEW
« no previous file with comments | « runtime/bin/dartutils.cc ('k') | runtime/bin/directory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698