haiku/headers/private/storage/CopyEngine.h

104 lines
2.4 KiB
C++

/*
* Copyright 2013, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <ingo_weinhold@gmx.de>
*/
#ifndef _COPY_ENGINE_H
#define _COPY_ENGINE_H
#include <stdarg.h>
#include <EntryOperationEngineBase.h>
class BFile;
class BNode;
namespace BPrivate {
class BCopyEngine : public BEntryOperationEngineBase {
public:
class BController;
enum {
COPY_RECURSIVELY = 0x01,
MERGE_EXISTING_DIRECTORIES = 0x02,
UNLINK_DESTINATION = 0x04,
};
public:
BCopyEngine(uint32 flags = 0);
~BCopyEngine();
BController* Controller() const;
void SetController(BController* controller);
uint32 Flags() const;
BCopyEngine& SetFlags(uint32 flags);
BCopyEngine& AddFlags(uint32 flags);
BCopyEngine& RemoveFlags(uint32 flags);
status_t CopyEntry(const Entry& sourceEntry,
const Entry& destEntry);
private:
status_t _CopyEntry(const char* sourcePath,
const char* destPath);
status_t _CopyFileData(const char* sourcePath,
BFile& source, const char* destPath,
BFile& destination);
status_t _CopyAttributes(const char* sourcePath,
BNode& source, const char* destPath,
BNode& destination);
void _NotifyError(status_t error, const char* format,
...);
void _NotifyErrorVarArgs(status_t error,
const char* format, va_list args);
status_t _HandleEntryError(const char* path,
status_t error, const char* format, ...);
status_t _HandleAttributeError(const char* path,
const char* attribute, uint32 attributeType,
status_t error, const char* format, ...);
private:
BController* fController;
uint32 fFlags;
char* fBuffer;
size_t fBufferSize;
};
class BCopyEngine::BController {
public:
BController();
virtual ~BController();
virtual bool EntryStarted(const char* path);
virtual bool EntryFinished(const char* path, status_t error);
virtual bool AttributeStarted(const char* path,
const char* attribute,
uint32 attributeType);
virtual bool AttributeFinished(const char* path,
const char* attribute,
uint32 attributeType, status_t error);
virtual void ErrorOccurred(const char* message,
status_t error);
};
} // namespace BPrivate
using ::BPrivate::BCopyEngine;
#endif // _COPY_ENGINE_H