@@ -50,15 +50,12 @@ TTLData::isDefault() const
5050
5151void
5252InMemorySorobanState::updateContractDataTTL (
53- std::unordered_set<InternalContractDataMapEntry,
54- InternalContractDataEntryHash>::iterator dataIt,
55- TTLData newTtlData)
53+ InternalContractDataMap::iterator dataIt, TTLData newTtlData)
5654{
5755 // Since entries are immutable, we must erase and re-insert
58- auto ledgerEntryPtr = dataIt->get (). ledgerEntry ;
56+ auto ledgerEntryPtr = dataIt->ledgerEntry ;
5957 mContractDataEntries .erase (dataIt);
60- mContractDataEntries .emplace (
61- InternalContractDataMapEntry (std::move (ledgerEntryPtr), newTtlData));
58+ mContractDataEntries .emplace (std::move (ledgerEntryPtr), newTtlData);
6259}
6360
6461void
@@ -72,7 +69,7 @@ InMemorySorobanState::updateTTL(LedgerEntry const& ttlEntry)
7269
7370 // TTL updates can apply to either ContractData or ContractCode entries.
7471 // First check if this TTL belongs to a stored ContractData entry.
75- auto dataIt = mContractDataEntries .find (InternalContractDataMapEntry (lk) );
72+ auto dataIt = mContractDataEntries .find (lk );
7673 if (dataIt != mContractDataEntries .end ())
7774 {
7875 updateContractDataTTL (dataIt, newTtlData);
@@ -94,19 +91,19 @@ InMemorySorobanState::updateContractData(LedgerEntry const& ledgerEntry)
9491
9592 // Entry must already exist since this is an update
9693 auto lk = LedgerEntryKey (ledgerEntry);
97- auto dataIt = mContractDataEntries .find (InternalContractDataMapEntry (lk) );
94+ auto dataIt = mContractDataEntries .find (lk );
9895 releaseAssertOrThrow (dataIt != mContractDataEntries .end ());
99- releaseAssertOrThrow (dataIt->get (). ledgerEntry != nullptr );
96+ releaseAssertOrThrow (dataIt->ledgerEntry != nullptr );
10097
101- uint32_t oldSize = xdr::xdr_size (*dataIt->get (). ledgerEntry );
98+ uint32_t oldSize = xdr::xdr_size (*dataIt->ledgerEntry );
10299 uint32_t newSize = xdr::xdr_size (ledgerEntry);
103100 updateStateSizeOnEntryUpdate (oldSize, newSize, /* isContractCode=*/ false );
104101
105102 // Preserve the existing TTL while updating the data
106- auto preservedTTL = dataIt->get (). ttlData ;
103+ auto preservedTTL = dataIt->ttlData ;
107104 mContractDataEntries .erase (dataIt);
108105 mContractDataEntries .emplace (
109- InternalContractDataMapEntry (ledgerEntry, preservedTTL) );
106+ std::make_shared<LedgerEntry const > (ledgerEntry) , preservedTTL);
110107}
111108
112109void
@@ -115,8 +112,7 @@ InMemorySorobanState::createContractDataEntry(LedgerEntry const& ledgerEntry)
115112 releaseAssertOrThrow (ledgerEntry.data .type () == CONTRACT_DATA);
116113
117114 // Verify entry doesn't already exist
118- auto dataIt = mContractDataEntries .find (
119- InternalContractDataMapEntry (LedgerEntryKey (ledgerEntry)));
115+ auto dataIt = mContractDataEntries .find (ledgerEntry);
120116 releaseAssertOrThrow (dataIt == mContractDataEntries .end ());
121117
122118 // Check if we've already seen this entry's TTL (can happen during
@@ -137,7 +133,7 @@ InMemorySorobanState::createContractDataEntry(LedgerEntry const& ledgerEntry)
137133 updateStateSizeOnEntryUpdate (0 , xdr::xdr_size (ledgerEntry),
138134 /* isContractCode=*/ false );
139135 mContractDataEntries .emplace (
140- InternalContractDataMapEntry (ledgerEntry, ttlData) );
136+ std::make_shared<LedgerEntry const > (ledgerEntry) , ttlData);
141137}
142138
143139bool
@@ -158,12 +154,12 @@ InMemorySorobanState::createTTL(LedgerEntry const& ttlEntry)
158154
159155 // Check if the corresponding ContractData entry already exists
160156 // (can happen during initialization when entries arrive out of order)
161- auto dataIt = mContractDataEntries .find (InternalContractDataMapEntry (lk) );
157+ auto dataIt = mContractDataEntries .find (lk );
162158 if (dataIt != mContractDataEntries .end ())
163159 {
164160 // ContractData exists but has no TTL yet - update it
165161 // Verify TTL hasn't been set yet (should be default initialized)
166- releaseAssertOrThrow (dataIt->get (). ttlData .isDefault ());
162+ releaseAssertOrThrow (dataIt->ttlData .isDefault ());
167163 updateContractDataTTL (dataIt, newTtlData);
168164 }
169165 else
@@ -191,11 +187,10 @@ void
191187InMemorySorobanState::deleteContractData (LedgerKey const & ledgerKey)
192188{
193189 releaseAssertOrThrow (ledgerKey.type () == CONTRACT_DATA);
194- auto it =
195- mContractDataEntries .find (InternalContractDataMapEntry (ledgerKey));
190+ auto it = mContractDataEntries .find (ledgerKey);
196191 releaseAssertOrThrow (it != mContractDataEntries .end ());
197- releaseAssertOrThrow (it->get (). ledgerEntry != nullptr );
198- updateStateSizeOnEntryUpdate (xdr::xdr_size (*it->get (). ledgerEntry ), 0 ,
192+ releaseAssertOrThrow (it->ledgerEntry != nullptr );
193+ updateStateSizeOnEntryUpdate (xdr::xdr_size (*it->ledgerEntry ), 0 ,
199194 /* isContractCode=*/ false );
200195 mContractDataEntries .erase (it);
201196}
@@ -207,13 +202,12 @@ InMemorySorobanState::get(LedgerKey const& ledgerKey) const
207202 {
208203 case CONTRACT_DATA:
209204 {
210- auto it =
211- mContractDataEntries .find (InternalContractDataMapEntry (ledgerKey));
205+ auto it = mContractDataEntries .find (ledgerKey);
212206 if (it == mContractDataEntries .end ())
213207 {
214208 return nullptr ;
215209 }
216- return it->get (). ledgerEntry ;
210+ return it->ledgerEntry ;
217211 }
218212 case CONTRACT_CODE:
219213 {
@@ -326,14 +320,13 @@ InMemorySorobanState::hasTTL(LedgerKey const& ledgerKey) const
326320 }
327321
328322 // Check if this is a ContractData TTL (stored with the data)
329- auto dataIt =
330- mContractDataEntries .find (InternalContractDataMapEntry (ledgerKey));
323+ auto dataIt = mContractDataEntries .find (ledgerKey);
331324 if (dataIt != mContractDataEntries .end ())
332325 {
333326 // Only return true if TTL has been set (non-zero)
334327 // During initialization, entries may exist with default constructed
335328 // TTLs
336- return !dataIt->get (). ttlData .isDefault ();
329+ return !dataIt->ttlData .isDefault ();
337330 }
338331
339332 // Check if this is a ContractCode TTL (stored with the code)
@@ -426,11 +419,10 @@ InMemorySorobanState::getTTL(LedgerKey const& ledgerKey) const
426419
427420 // Since the TTL key is the hash of the associated LedgerKey, we don't know
428421 // which map it could belong in, so check both.
429- auto dataIt =
430- mContractDataEntries .find (InternalContractDataMapEntry (ledgerKey));
422+ auto dataIt = mContractDataEntries .find (ledgerKey);
431423 if (dataIt != mContractDataEntries .end ())
432424 {
433- return constructTTLEntry (dataIt->get (). ttlData );
425+ return constructTTLEntry (dataIt->ttlData );
434426 }
435427
436428 auto codeIt = mContractCodeEntries .find (ledgerKey.ttl ().keyHash );
0 commit comments