1 // VNode.cpp 2 // 3 // Copyright (c) 2003, Ingo Weinhold (bonefish@cs.tu-berlin.de) 4 // 5 // This program is free software; you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation; either version 2 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with this program; if not, write to the Free Software 17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 // 19 // You can alternatively use *this file* under the terms of the the MIT 20 // license included in this package. 21 22 #include "VNode.h" 23 24 /*! 25 \class VNode 26 \brief Represents a vnode, i.e. an object in a file system. 27 28 This class bundles all information relevant to a vnode, i.e. its ID, 29 the ID of its parent node and its stat data (for fast and convenient 30 access). VNode knows how to convert between the VFS ino_t 31 and the object+dir ID representation in ReiserFS. 32 */ 33 34 // constructor 35 VNode::VNode() 36 : fParentID(0), 37 fDirID(0), 38 fObjectID(0), 39 fStatData() 40 { 41 } 42 43 // constructor 44 VNode::VNode(const VNode &node) 45 : fParentID(0), 46 fDirID(0), 47 fObjectID(0), 48 fStatData() 49 { 50 *this = node; 51 } 52 53 // constructor 54 VNode::VNode(ino_t id) 55 : fParentID(0), 56 fDirID(GetDirIDFor(id)), 57 fObjectID(GetObjectIDFor(id)), 58 fStatData() 59 { 60 } 61 62 // constructor 63 VNode::VNode(uint32 dirID, uint32 objectID) 64 : fParentID(0), 65 fDirID(dirID), 66 fObjectID(objectID), 67 fStatData() 68 { 69 } 70 71 // destructor 72 VNode::~VNode() 73 { 74 } 75 76 // SetTo 77 status_t 78 VNode::SetTo(ino_t id) 79 { 80 return SetTo(GetDirIDFor(id), GetObjectIDFor(id)); 81 } 82 83 // SetTo 84 status_t 85 VNode::SetTo(uint32 dirID, uint32 objectID) 86 { 87 fParentID = 0; 88 fDirID = dirID; 89 fObjectID = objectID; 90 fStatData.Unset(); 91 return B_OK; 92 } 93 94 // GetID 95 ino_t 96 VNode::GetID() const 97 { 98 return GetIDFor(fDirID, fObjectID); 99 } 100 101 // SetParentID 102 void 103 VNode::SetParentID(uint32 dirID, uint32 objectID) 104 { 105 SetParentID(GetIDFor(dirID, objectID)); 106 } 107 108 // = 109 VNode & 110 VNode::operator=(const VNode &node) 111 { 112 if (&node != this) { 113 fParentID = node.fParentID; 114 fDirID = node.fDirID; 115 fObjectID = node.fObjectID; 116 fStatData = node.fStatData; 117 } 118 return *this; 119 } 120 121