#ifndef H_KINO_RAMFOLDER
#define H_KINO_RAMFOLDER 1

#include "KinoSearch/Store/Folder.r"

typedef struct kino_RAMFolder kino_RAMFolder;
typedef struct KINO_RAMFOLDER_VTABLE KINO_RAMFOLDER_VTABLE;

struct kino_Folder;
struct kino_Hash;

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

struct kino_RAMFolder {
    KINO_RAMFOLDER_VTABLE *_;
    KINO_FOLDER_MEMBER_VARS;
    struct kino_Hash *ram_files;
};

/* Constructor.
 */
kino_RAMFolder*
kino_RAMFolder_new(const struct kino_ByteBuf *path);

void
kino_RAMFolder_destroy(kino_RAMFolder *self);
KINO_METHOD("Kino_RAMFolder_Destroy");

struct kino_OutStream*
kino_RAMFolder_open_outstream(kino_RAMFolder *self, 
                              const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_RAMFolder_Open_OutStream");

struct kino_OutStream*
kino_RAMFolder_safe_open_outstream(kino_RAMFolder *self, 
                                   const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_RAMFolder_Safe_Open_OutStream");

struct kino_InStream*
kino_RAMFolder_open_instream(kino_RAMFolder *self,   
                             const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_RAMFolder_Open_InStream");

struct kino_VArray*
kino_RAMFolder_list(kino_RAMFolder *self);
KINO_METHOD("Kino_RAMFolder_List");

chy_bool_t
kino_RAMFolder_file_exists(kino_RAMFolder *self, 
                           const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_RAMFolder_File_Exists");

void
kino_RAMFolder_rename_file(kino_RAMFolder *self, 
                           const struct kino_ByteBuf* from, 
                           const struct kino_ByteBuf *to);
KINO_METHOD("Kino_RAMFolder_Rename_File");

void
kino_RAMFolder_delete_file(kino_RAMFolder *self, 
                           const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_RAMFolder_Delete_File");

struct kino_ByteBuf*
kino_RAMFolder_slurp_file(kino_RAMFolder *self, 
                          const struct kino_ByteBuf *filename);
KINO_METHOD("Kino_RAMFolder_Slurp_File");

void
kino_RAMFolder_close_f(kino_RAMFolder *self);
KINO_METHOD("Kino_RAMFolder_Close_F");

KINO_END_CLASS

#endif /* H_KINO_RAMFOLDER */

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