Skip to content

Commit 8737c0c

Browse files
committed
refactor: encapsulate flags setting with AddFlags and ClearFlags
No behavior change. This prepares moving the cache entry flags field to private access.
1 parent 9715d3b commit 8737c0c

File tree

4 files changed

+14
-9
lines changed

4 files changed

+14
-9
lines changed

src/coins.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ CCoinsMap::iterator CCoinsViewCache::FetchCoin(const COutPoint &outpoint) const
5151
if (ret->second.coin.IsSpent()) {
5252
// The parent only has an empty entry for this outpoint; we can consider our
5353
// version as fresh.
54-
ret->second.flags = CCoinsCacheEntry::FRESH;
54+
ret->second.AddFlags(CCoinsCacheEntry::FRESH);
5555
}
5656
cachedCoinsUsage += ret->second.coin.DynamicMemoryUsage();
5757
return ret;
@@ -96,7 +96,7 @@ void CCoinsViewCache::AddCoin(const COutPoint &outpoint, Coin&& coin, bool possi
9696
fresh = !it->second.IsDirty();
9797
}
9898
it->second.coin = std::move(coin);
99-
it->second.flags |= CCoinsCacheEntry::DIRTY | (fresh ? CCoinsCacheEntry::FRESH : 0);
99+
it->second.AddFlags(CCoinsCacheEntry::DIRTY | (fresh ? CCoinsCacheEntry::FRESH : 0));
100100
cachedCoinsUsage += it->second.coin.DynamicMemoryUsage();
101101
TRACE5(utxocache, add,
102102
outpoint.hash.data(),
@@ -141,7 +141,7 @@ bool CCoinsViewCache::SpendCoin(const COutPoint &outpoint, Coin* moveout) {
141141
if (it->second.IsFresh()) {
142142
cacheCoins.erase(it);
143143
} else {
144-
it->second.flags |= CCoinsCacheEntry::DIRTY;
144+
it->second.AddFlags(CCoinsCacheEntry::DIRTY);
145145
it->second.coin.Clear();
146146
}
147147
return true;
@@ -203,12 +203,12 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn
203203
entry.coin = it->second.coin;
204204
}
205205
cachedCoinsUsage += entry.coin.DynamicMemoryUsage();
206-
entry.flags = CCoinsCacheEntry::DIRTY;
206+
entry.AddFlags(CCoinsCacheEntry::DIRTY);
207207
// We can mark it FRESH in the parent if it was FRESH in the child
208208
// Otherwise it might have just been flushed from the parent's cache
209209
// and already exist in the grandparent
210210
if (it->second.IsFresh()) {
211-
entry.flags |= CCoinsCacheEntry::FRESH;
211+
entry.AddFlags(CCoinsCacheEntry::FRESH);
212212
}
213213
}
214214
} else {
@@ -238,7 +238,7 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlockIn
238238
itUs->second.coin = it->second.coin;
239239
}
240240
cachedCoinsUsage += itUs->second.coin.DynamicMemoryUsage();
241-
itUs->second.flags |= CCoinsCacheEntry::DIRTY;
241+
itUs->second.AddFlags(CCoinsCacheEntry::DIRTY);
242242
// NOTE: It isn't safe to mark the coin as FRESH in the parent
243243
// cache. If it already existed and was spent in the parent
244244
// cache then marking it FRESH would prevent that spentness
@@ -273,7 +273,7 @@ bool CCoinsViewCache::Sync()
273273
cachedCoinsUsage -= it->second.coin.DynamicMemoryUsage();
274274
it = cacheCoins.erase(it);
275275
} else {
276-
it->second.flags = 0;
276+
it->second.ClearFlags();
277277
++it;
278278
}
279279
}

src/coins.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ struct CCoinsCacheEntry
131131
explicit CCoinsCacheEntry(Coin&& coin_) : coin(std::move(coin_)), flags(0) {}
132132
CCoinsCacheEntry(Coin&& coin_, unsigned char flag) : coin(std::move(coin_)), flags(flag) {}
133133

134+
inline void AddFlags(unsigned char flags) noexcept { this->flags |= flags; }
135+
inline void ClearFlags() noexcept
136+
{
137+
flags = 0;
138+
}
134139
inline unsigned char GetFlags() const noexcept { return flags; }
135140
inline bool IsDirty() const noexcept { return flags & DIRTY; }
136141
inline bool IsFresh() const noexcept { return flags & FRESH; }

src/test/coins_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ static size_t InsertCoinsMapEntry(CCoinsMap& map, CAmount value, char flags)
584584
}
585585
assert(flags != NO_ENTRY);
586586
CCoinsCacheEntry entry;
587-
entry.flags = flags;
587+
entry.AddFlags(flags);
588588
SetCoinsValue(value, entry.coin);
589589
auto inserted = map.emplace(OUTPOINT, std::move(entry));
590590
assert(inserted.second);

src/test/fuzz/coins_view.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ FUZZ_TARGET(coins_view, .init = initialize_coins_view)
125125
LIMITED_WHILE(good_data && fuzzed_data_provider.ConsumeBool(), 10'000)
126126
{
127127
CCoinsCacheEntry coins_cache_entry;
128-
coins_cache_entry.flags = fuzzed_data_provider.ConsumeIntegral<unsigned char>();
128+
coins_cache_entry.AddFlags(fuzzed_data_provider.ConsumeIntegral<unsigned char>());
129129
if (fuzzed_data_provider.ConsumeBool()) {
130130
coins_cache_entry.coin = random_coin;
131131
} else {

0 commit comments

Comments
 (0)