root/src/servers/package/VolumeState.h
/*
 * Copyright 2013-2014, Haiku, Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Ingo Weinhold <ingo_weinhold@gmx.de>
 */
#ifndef VOLUME_STATE_H
#define VOLUME_STATE_H


#include "Package.h"


class VolumeState {
public:
                                                                VolumeState();
                                                                ~VolumeState();

                        bool                            Init();

                        Package*                        FindPackage(const char* name) const;
                        Package*                        FindPackage(const node_ref& nodeRef) const;

                        PackageFileNameHashTable::Iterator ByFileNameIterator() const;
                        PackageNodeRefHashTable::Iterator ByNodeRefIterator() const;

                        void                            AddPackage(Package* package);
                        void                            RemovePackage(Package* package);

                        void                            SetPackageActive(Package* package, bool active);

                        void                            ActivationChanged(
                                                                        const PackageSet& activatedPackage,
                                                                        const PackageSet& deactivatePackages);

                        VolumeState*            Clone() const;

private:
                        void                            _RemovePackage(Package* package);

private:
                        PackageFileNameHashTable fPackagesByFileName;
                        PackageNodeRefHashTable fPackagesByNodeRef;
};


inline Package*
VolumeState::FindPackage(const char* name) const
{
        return fPackagesByFileName.Lookup(name);
}


inline Package*
VolumeState::FindPackage(const node_ref& nodeRef) const
{
        return fPackagesByNodeRef.Lookup(nodeRef);
}


inline PackageFileNameHashTable::Iterator
VolumeState::ByFileNameIterator() const
{
        return fPackagesByFileName.GetIterator();
}


inline PackageNodeRefHashTable::Iterator
VolumeState::ByNodeRefIterator() const
{
        return fPackagesByNodeRef.GetIterator();
}


#endif  // VOLUME_STATE_H