root/src/add-ons/kernel/file_systems/reiserfs/VNode.cpp
// VNode.cpp
//
// Copyright (c) 2003, Ingo Weinhold (bonefish@cs.tu-berlin.de)
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// You can alternatively use *this file* under the terms of the the MIT
// license included in this package.

#include "VNode.h"

/*!
        \class VNode
        \brief Represents a vnode, i.e. an object in a file system.

        This class bundles all information relevant to a vnode, i.e. its ID,
        the ID of its parent node and its stat data (for fast and convenient
        access). VNode knows how to convert between the VFS ino_t
        and the object+dir ID representation in ReiserFS.
*/

// constructor
VNode::VNode()
        : fParentID(0),
          fDirID(0),
          fObjectID(0),
          fStatData()
{
}

// constructor
VNode::VNode(const VNode &node)
        : fParentID(0),
          fDirID(0),
          fObjectID(0),
          fStatData()
{
        *this = node;
}

// constructor
VNode::VNode(ino_t id)
        : fParentID(0),
          fDirID(GetDirIDFor(id)),
          fObjectID(GetObjectIDFor(id)),
          fStatData()
{
}

// constructor
VNode::VNode(uint32 dirID, uint32 objectID)
        : fParentID(0),
          fDirID(dirID),
          fObjectID(objectID),
          fStatData()
{
}

// destructor
VNode::~VNode()
{
}

// SetTo
status_t
VNode::SetTo(ino_t id)
{
        return SetTo(GetDirIDFor(id), GetObjectIDFor(id));
}

// SetTo
status_t
VNode::SetTo(uint32 dirID, uint32 objectID)
{
        fParentID = 0;
        fDirID = dirID;
        fObjectID = objectID;
        fStatData.Unset();
        return B_OK;
}

// GetID
ino_t
VNode::GetID() const
{
        return GetIDFor(fDirID, fObjectID);
}

// SetParentID
void
VNode::SetParentID(uint32 dirID, uint32 objectID)
{
        SetParentID(GetIDFor(dirID, objectID));
}

// =
VNode &
VNode::operator=(const VNode &node)
{
        if (&node != this) {
                fParentID = node.fParentID;
                fDirID = node.fDirID;
                fObjectID = node.fObjectID;
                fStatData = node.fStatData;
        }
        return *this;
}