Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef ITEMPTR_H
00015 #define ITEMPTR_H
00016
00017 #include "storage/block.h"
00018 #include "storage/off.h"
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 typedef struct ItemPointerData
00038 {
00039 BlockIdData ip_blkid;
00040 OffsetNumber ip_posid;
00041 }
00042
00043 #ifdef __arm__
00044 __attribute__((packed))
00045 #endif
00046 ItemPointerData;
00047
00048 #define SizeOfIptrData \
00049 (offsetof(ItemPointerData, ip_posid) + sizeof(OffsetNumber))
00050
00051 typedef ItemPointerData *ItemPointer;
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 #define ItemPointerIsValid(pointer) \
00063 ((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
00064
00065
00066
00067
00068
00069 #define ItemPointerGetBlockNumber(pointer) \
00070 ( \
00071 AssertMacro(ItemPointerIsValid(pointer)), \
00072 BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
00073 )
00074
00075
00076
00077
00078
00079 #define ItemPointerGetOffsetNumber(pointer) \
00080 ( \
00081 AssertMacro(ItemPointerIsValid(pointer)), \
00082 (pointer)->ip_posid \
00083 )
00084
00085
00086
00087
00088
00089 #define ItemPointerSet(pointer, blockNumber, offNum) \
00090 ( \
00091 AssertMacro(PointerIsValid(pointer)), \
00092 BlockIdSet(&((pointer)->ip_blkid), blockNumber), \
00093 (pointer)->ip_posid = offNum \
00094 )
00095
00096
00097
00098
00099
00100 #define ItemPointerSetBlockNumber(pointer, blockNumber) \
00101 ( \
00102 AssertMacro(PointerIsValid(pointer)), \
00103 BlockIdSet(&((pointer)->ip_blkid), blockNumber) \
00104 )
00105
00106
00107
00108
00109
00110 #define ItemPointerSetOffsetNumber(pointer, offsetNumber) \
00111 ( \
00112 AssertMacro(PointerIsValid(pointer)), \
00113 (pointer)->ip_posid = (offsetNumber) \
00114 )
00115
00116
00117
00118
00119
00120 #define ItemPointerCopy(fromPointer, toPointer) \
00121 ( \
00122 AssertMacro(PointerIsValid(toPointer)), \
00123 AssertMacro(PointerIsValid(fromPointer)), \
00124 *(toPointer) = *(fromPointer) \
00125 )
00126
00127
00128
00129
00130
00131 #define ItemPointerSetInvalid(pointer) \
00132 ( \
00133 AssertMacro(PointerIsValid(pointer)), \
00134 BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
00135 (pointer)->ip_posid = InvalidOffsetNumber \
00136 )
00137
00138
00139
00140
00141
00142
00143 extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);
00144 extern int32 ItemPointerCompare(ItemPointer arg1, ItemPointer arg2);
00145
00146 #endif