| 2154 | }; |
| 2155 | |
| 2156 | struct RemappedPage { |
| 2157 | enum Type { NONE = 'N', REMAP = 'R', FREE = 'F', DETACH = 'D' }; |
| 2158 | RemappedPage(Version v = invalidVersion, |
| 2159 | LogicalPageID o = invalidLogicalPageID, |
| 2160 | LogicalPageID n = invalidLogicalPageID) |
| 2161 | : version(v), originalPageID(o), newPageID(n) {} |
| 2162 | |
| 2163 | Version version; |
| 2164 | LogicalPageID originalPageID; |
| 2165 | LogicalPageID newPageID; |
| 2166 | |
| 2167 | static Type getTypeOf(LogicalPageID newPageID) { |
| 2168 | if (newPageID == invalidLogicalPageID) { |
| 2169 | return FREE; |
| 2170 | } |
| 2171 | if (newPageID == 0) { |
| 2172 | return DETACH; |
| 2173 | } |
| 2174 | return REMAP; |
| 2175 | } |
| 2176 | |
| 2177 | Type getType() const { return getTypeOf(newPageID); } |
| 2178 | |
| 2179 | bool operator<(const RemappedPage& rhs) const { return version < rhs.version; } |
| 2180 | |
| 2181 | std::string toString() const { |
| 2182 | return format("RemappedPage(%c: %s -> %s %s}", |
| 2183 | getType(), |
| 2184 | ::toString(originalPageID).c_str(), |
| 2185 | ::toString(newPageID).c_str(), |
| 2186 | ::toString(version).c_str()); |
| 2187 | } |
| 2188 | }; |
| 2189 | |
| 2190 | struct ExtentUsedListEntry { |
| 2191 | QueueID queueID; |