1 // Item.h 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 #ifndef ITEM_H 23 #define ITEM_H 24 25 #include "endianess.h" 26 #include "reiserfs.h" 27 #include "Key.h" 28 29 class LeafNode; 30 31 // ItemHeader 32 class ItemHeader : private item_head { 33 public: 34 ItemHeader() {} 35 36 uint16 GetLen() const { return le2h(ih_item_len); } 37 uint16 GetLocation() const { return le2h(ih_item_location); } 38 uint16 GetVersion() const { return le2h(ih_version); } 39 const Key *GetKey() const { return Key::CastFrom(&ih_key); } 40 VKey *GetKey(VKey *k) const { k->SetTo(GetKey(), GetVersion()); return k; } 41 42 // indirect item only 43 uint16 GetFreeSpaceReserved() const 44 { 45 return (GetVersion() == KEY_FORMAT_3_6 46 ? 0 : le2h(u.ih_free_space_reserved)); 47 } 48 49 // directory item only 50 uint16 GetEntryCount() const { return le2h(u.ih_entry_count); } 51 52 uint32 GetDirID() const { return GetKey()->GetDirID(); } 53 uint32 GetObjectID() const { return GetKey()->GetObjectID(); } 54 uint64 GetOffset() const { return GetKey()->GetOffset(GetVersion()); } 55 uint16 GetType() const { return GetKey()->GetType(GetVersion()); } 56 } _PACKED; 57 58 59 // Item 60 class Item { 61 public: 62 Item(); 63 Item(const Item &item); 64 Item(LeafNode *node, const ItemHeader *header); 65 ~Item(); 66 67 status_t SetTo(LeafNode *node, const ItemHeader *header); 68 status_t SetTo(LeafNode *node, int32 index); 69 void Unset(); 70 71 LeafNode *GetNode() const; 72 ItemHeader *GetHeader() const; 73 int32 GetIndex() const; 74 75 void *GetData() const; 76 uint16 GetLen() const; 77 uint16 GetType() const; 78 uint32 GetDirID() const; 79 uint32 GetObjectID() const; 80 uint64 GetOffset() const; 81 const Key *GetKey() const; 82 VKey *GetKey(VKey *k) const; 83 84 uint16 GetEntryCount() const; 85 86 status_t Check() const; 87 88 Item &operator=(const Item &item); 89 90 protected: 91 LeafNode *fNode; 92 ItemHeader *fHeader; 93 }; 94 95 #endif // ITEM_H 96