root/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/FileSystemInitializer.h
/*
 * Copyright 2001-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef USERLAND_FS_FILE_SYSTEM_INITIALIZER_H
#define USERLAND_FS_FILE_SYSTEM_INITIALIZER_H

#include <Referenceable.h>

#include "LazyInitializable.h"


namespace UserlandFSUtil {

class RequestPort;

}

using UserlandFSUtil::RequestPort;

class FileSystem;

class FileSystemInitializer : public LazyInitializable, public BReferenceable {
public:
                                                                FileSystemInitializer(const char* name);
                                                                ~FileSystemInitializer();

        inline  FileSystem*                     GetFileSystem() { return fFileSystem; }

protected:
        virtual status_t                        FirstTimeInit();

        virtual void                            LastReferenceReleased();

private:
                        status_t                        _Init(port_id port);

private:
                        const char*                     fName;          // valid only until FirstTimeInit()
                        FileSystem*                     fFileSystem;
};

#endif  // USERLAND_FS_FILE_SYSTEM_INITIALIZER_H