#ifndef H_KINO_FSFOLDER
#define H_KINO_FSFOLDER 1

#include "KinoSearch/Store/Folder.r"

typedef struct kino_FSFolder kino_FSFolder;
typedef struct KINO_FSFOLDER_VTABLE KINO_FSFOLDER_VTABLE;

struct kino_Folder;
struct kino_ByteBuf;
struct kino_InStream;
struct kino_OutStream;
struct kino_VArray;

KINO_CLASS("KinoSearch::Store::FSFolder", "FSFolder", 
    "KinoSearch::Store::Folder");

struct kino_FSFolder {
    KINO_FSFOLDER_VTABLE *_;
    KINO_FOLDER_MEMBER_VARS;
};

kino_FSFolder*
kino_FSFolder_new(const struct kino_ByteBuf *path);

void
kino_FSFolder_destroy(kino_FSFolder *self);
KINO_METHOD("Kino_FSFolder_Destroy");

struct kino_OutStream*
kino_FSFolder_open_outstream(kino_FSFolder *self, 
                             const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_FSFolder_Open_OutStream");

struct kino_OutStream*
kino_FSFolder_safe_open_outstream(kino_FSFolder *self, 
                                  const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_FSFolder_Safe_Open_OutStream");

struct kino_InStream*
kino_FSFolder_open_instream(kino_FSFolder *self,   
                            const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_FSFolder_Open_InStream");

struct kino_VArray*
kino_FSFolder_list(kino_FSFolder *self);
KINO_METHOD("Kino_FSFolder_List");

chy_bool_t
kino_FSFolder_file_exists(kino_FSFolder *self, 
                          const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_FSFolder_File_Exists");

void
kino_FSFolder_rename_file(kino_FSFolder *self, 
                          const struct kino_ByteBuf* from, 
                          const struct kino_ByteBuf *to);
KINO_METHOD("Kino_FSFolder_Rename_File");

void
kino_FSFolder_delete_file(kino_FSFolder *self, 
                          const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_FSFolder_Delete_File");

struct kino_ByteBuf*
kino_FSFolder_slurp_file(kino_FSFolder *self, 
                         const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_FSFolder_Slurp_File");

void
kino_FSFolder_close_f(kino_FSFolder *self);
KINO_METHOD("Kino_FSFolder_Close_F");

KINO_END_CLASS

#endif /* H_KINO_FSFOLDER */

/* Copyright 2006-2007 Marvin Humphrey
 *
 * This program is free software; you can redistribute it and/or modify
 * under the same terms as Perl itself.
 */