root/src/add-ons/kernel/file_systems/bfs/Index.h
/*
 * Copyright 2001-2025, Axel Dörfler, axeld@pinc-software.de.
 * This file may be used under the terms of the MIT License.
 */
#ifndef INDEX_H
#define INDEX_H


#include "system_dependencies.h"


class Transaction;
class Volume;
class Inode;


class Index {
public:
                                                        Index(Volume* volume);
                                                        ~Index();

                        status_t                SetTo(const char* name);
                        void                    Unset();

                        Inode*                  Node() const { return fNode; };
                        uint32                  Type();
                        size_t                  KeySize();

                        status_t                Create(Transaction& transaction, const char* name,
                                                                uint32 type);

                        status_t                Update(Transaction& transaction, const char* name,
                                                                int32 type, const uint8* oldKey,
                                                                uint16 oldLength, const uint8* newKey,
                                                                uint16 newLength, Inode* inode,
                                                                bool updateLiveQueries = true);

                        status_t                InsertName(Transaction& transaction,
                                                                const char* name, Inode* inode);
                        status_t                RemoveName(Transaction& transaction,
                                                                const char* name, Inode* inode);
                        status_t                UpdateName(Transaction& transaction,
                                                                const char* oldName, const char* newName,
                                                                Inode* inode, bool updateLiveQueries = true);

                        status_t                InsertSize(Transaction& transaction, Inode* inode);
                        status_t                RemoveSize(Transaction& transaction, Inode* inode);
                        status_t                UpdateSize(Transaction& transaction, Inode* inode);

                        status_t                InsertLastModified(Transaction& transaction,
                                                                Inode* inode);
                        status_t                RemoveLastModified(Transaction& transaction,
                                                                Inode* inode);
                        status_t                UpdateLastModified(Transaction& transaction,
                                                                Inode* inode, bigtime_t modified = -1);

                        status_t                UpdateNodeID(Transaction& transaction, const uint8* key, uint16 length,
                                                                off_t oldInodeID, off_t newInodeID);

private:
                                                        Index(const Index& other);
                                                        Index& operator=(const Index& other);
                                                                // no implementation

private:
                        Volume*                 fVolume;
                        Inode*                  fNode;
                        const char*             fName;
};


#endif  // INDEX_H