@ -8,6 +8,7 @@
# include <cstdio>
# include <cstdio>
# include <cstdlib>
# include <cstdlib>
# include "esp_heap_caps.h"
# include "port/port.h"
# include "port/port.h"
# include "port/thread_annotations.h"
# include "port/thread_annotations.h"
# include "util/hash.h"
# include "util/hash.h"
@ -157,7 +158,9 @@ class LRUCache {
void SetCapacity ( size_t capacity ) { capacity_ = capacity ; }
void SetCapacity ( size_t capacity ) { capacity_ = capacity ; }
// Like Cache methods, but with an extra "hash" parameter.
// Like Cache methods, but with an extra "hash" parameter.
Cache : : Handle * Insert ( const Slice & key , uint32_t hash , void * value ,
Cache : : Handle * Insert ( const Slice & key ,
uint32_t hash ,
void * value ,
size_t charge ,
size_t charge ,
void ( * deleter ) ( const Slice & key , void * value ) ) ;
void ( * deleter ) ( const Slice & key , void * value ) ) ;
Cache : : Handle * Lookup ( const Slice & key , uint32_t hash ) ;
Cache : : Handle * Lookup ( const Slice & key , uint32_t hash ) ;
@ -264,14 +267,16 @@ void LRUCache::Release(Cache::Handle* handle) {
Unref ( reinterpret_cast < LRUHandle * > ( handle ) ) ;
Unref ( reinterpret_cast < LRUHandle * > ( handle ) ) ;
}
}
Cache : : Handle * LRUCache : : Insert ( const Slice & key , uint32_t hash , void * value ,
Cache : : Handle * LRUCache : : Insert ( const Slice & key ,
uint32_t hash ,
void * value ,
size_t charge ,
size_t charge ,
void ( * deleter ) ( const Slice & key ,
void ( * deleter ) ( const Slice & key ,
void * value ) ) {
void * value ) ) {
MutexLock l ( & mutex_ ) ;
MutexLock l ( & mutex_ ) ;
LRUHandle * e =
LRUHandle * e = reinterpret_cast < LRUHandle * > (
reinterpret_cast < LRUHandle * > ( malloc ( sizeof ( LRUHandle ) - 1 + key . size ( ) ) ) ;
heap_caps_ malloc( sizeof ( LRUHandle ) - 1 + key . size ( ) , MALLOC_CAP_SPIRAM ) ) ;
e - > value = value ;
e - > value = value ;
e - > deleter = deleter ;
e - > deleter = deleter ;
e - > charge = charge ;
e - > charge = charge ;
@ -356,7 +361,9 @@ class ShardedLRUCache : public Cache {
}
}
}
}
~ ShardedLRUCache ( ) override { }
~ ShardedLRUCache ( ) override { }
Handle * Insert ( const Slice & key , void * value , size_t charge ,
Handle * Insert ( const Slice & key ,
void * value ,
size_t charge ,
void ( * deleter ) ( const Slice & key , void * value ) ) override {
void ( * deleter ) ( const Slice & key , void * value ) ) override {
const uint32_t hash = HashSlice ( key ) ;
const uint32_t hash = HashSlice ( key ) ;
return shard_ [ Shard ( hash ) ] . Insert ( key , hash , value , charge , deleter ) ;
return shard_ [ Shard ( hash ) ] . Insert ( key , hash , value , charge , deleter ) ;
@ -396,6 +403,8 @@ class ShardedLRUCache : public Cache {
} // end anonymous namespace
} // end anonymous namespace
Cache * NewLRUCache ( size_t capacity ) { return new ShardedLRUCache ( capacity ) ; }
Cache * NewLRUCache ( size_t capacity ) {
return new ShardedLRUCache ( capacity ) ;
}
} // namespace leveldb
} // namespace leveldb