ebbc2020a2
Review URL: https://codereview.chromium.org//14341015 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22032 260f80e4-7a28-3924-810f-c04153c831b5
125 lines
3.2 KiB
C++
125 lines
3.2 KiB
C++
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#ifndef BIN_DIRECTORY_H_
|
|
#define BIN_DIRECTORY_H_
|
|
|
|
#include "bin/builtin.h"
|
|
#include "bin/dartutils.h"
|
|
#include "bin/native_service.h"
|
|
#include "platform/globals.h"
|
|
#include "platform/thread.h"
|
|
|
|
|
|
namespace dart {
|
|
namespace bin {
|
|
|
|
class DirectoryListing {
|
|
public:
|
|
virtual ~DirectoryListing() {}
|
|
virtual bool HandleDirectory(char* dir_name) = 0;
|
|
virtual bool HandleFile(char* file_name) = 0;
|
|
virtual bool HandleLink(char* file_name) = 0;
|
|
virtual bool HandleError(const char* dir_name) = 0;
|
|
};
|
|
|
|
|
|
class AsyncDirectoryListing : public DirectoryListing {
|
|
public:
|
|
enum Response {
|
|
kListFile = 0,
|
|
kListDirectory = 1,
|
|
kListLink = 2,
|
|
kListError = 3,
|
|
kListDone = 4
|
|
};
|
|
|
|
explicit AsyncDirectoryListing(Dart_Port response_port)
|
|
: response_port_(response_port) {}
|
|
virtual ~AsyncDirectoryListing() {}
|
|
virtual bool HandleDirectory(char* dir_name);
|
|
virtual bool HandleFile(char* file_name);
|
|
virtual bool HandleLink(char* file_name);
|
|
virtual bool HandleError(const char* dir_name);
|
|
|
|
private:
|
|
CObjectArray* NewResponse(Response response, char* arg);
|
|
Dart_Port response_port_;
|
|
|
|
DISALLOW_IMPLICIT_CONSTRUCTORS(AsyncDirectoryListing);
|
|
};
|
|
|
|
|
|
class SyncDirectoryListing: public DirectoryListing {
|
|
public:
|
|
explicit SyncDirectoryListing(Dart_Handle results)
|
|
: results_(results) {
|
|
add_string_ = DartUtils::NewString("add");
|
|
directory_class_ =
|
|
DartUtils::GetDartClass(DartUtils::kIOLibURL, "Directory");
|
|
file_class_ =
|
|
DartUtils::GetDartClass(DartUtils::kIOLibURL, "File");
|
|
link_class_ =
|
|
DartUtils::GetDartClass(DartUtils::kIOLibURL, "Link");
|
|
}
|
|
virtual ~SyncDirectoryListing() {}
|
|
virtual bool HandleDirectory(char* dir_name);
|
|
virtual bool HandleFile(char* file_name);
|
|
virtual bool HandleLink(char* file_name);
|
|
virtual bool HandleError(const char* dir_name);
|
|
|
|
private:
|
|
Dart_Handle results_;
|
|
Dart_Handle add_string_;
|
|
Dart_Handle directory_class_;
|
|
Dart_Handle file_class_;
|
|
Dart_Handle link_class_;
|
|
|
|
DISALLOW_IMPLICIT_CONSTRUCTORS(SyncDirectoryListing);
|
|
};
|
|
|
|
|
|
class Directory {
|
|
public:
|
|
enum ExistsResult {
|
|
UNKNOWN,
|
|
EXISTS,
|
|
DOES_NOT_EXIST
|
|
};
|
|
|
|
// This enum must be kept in sync with the request values in
|
|
// directory_impl.dart.
|
|
enum DirectoryRequest {
|
|
kCreateRequest = 0,
|
|
kDeleteRequest = 1,
|
|
kExistsRequest = 2,
|
|
kCreateTempRequest = 3,
|
|
kListRequest = 4,
|
|
kRenameRequest = 5
|
|
};
|
|
|
|
static bool List(const char* path,
|
|
bool recursive,
|
|
bool follow_links,
|
|
DirectoryListing* listing);
|
|
static ExistsResult Exists(const char* path);
|
|
static char* Current();
|
|
static bool Create(const char* path);
|
|
static char* CreateTemp(const char* const_template);
|
|
static bool Delete(const char* path, bool recursive);
|
|
static bool Rename(const char* path, const char* new_path);
|
|
static Dart_Port GetServicePort();
|
|
|
|
private:
|
|
static NativeService directory_service_;
|
|
|
|
DISALLOW_ALLOCATION();
|
|
DISALLOW_IMPLICIT_CONSTRUCTORS(Directory);
|
|
};
|
|
|
|
} // namespace bin
|
|
} // namespace dart
|
|
|
|
#endif // BIN_DIRECTORY_H_
|