@@ -146,6 +146,7 @@ template <
146
146
typename Value,
147
147
typename Generator,
148
148
typename Properties = void ,
149
+ typename Stats = void ,
149
150
typename Sizer = DefaultSizer<Value>,
150
151
typename Comparator = std::equal_to<Key>,
151
152
typename Hash = std::hash<Key>>
@@ -178,7 +179,8 @@ class CachedFactory {
178
179
// / will probably mess with your memory model, so really try to avoid it.
179
180
CachedPtr<Key, Value, Comparator, Hash> generate (
180
181
const Key& key,
181
- const Properties* properties = nullptr );
182
+ const Properties* properties = nullptr ,
183
+ Stats* ioStats = nullptr );
182
184
183
185
// / Looks up the cache entry of the given key if it exists, otherwise returns
184
186
// / null.
@@ -358,17 +360,25 @@ template <
358
360
typename Value,
359
361
typename Generator,
360
362
typename Properties,
363
+ typename Stats,
361
364
typename Sizer,
362
365
typename Comparator,
363
366
typename Hash>
364
- CachedPtr<Key, Value, Comparator, Hash>
365
- CachedFactory<Key, Value, Generator, Properties, Sizer, Comparator, Hash>::
366
- generate (const Key& key, const Properties* properties) {
367
+ CachedPtr<Key, Value, Comparator, Hash> CachedFactory<
368
+ Key,
369
+ Value,
370
+ Generator,
371
+ Properties,
372
+ Stats,
373
+ Sizer,
374
+ Comparator,
375
+ Hash>::
376
+ generate (const Key& key, const Properties* properties, Stats* ioStats) {
367
377
process::TraceContext trace (" CachedFactory::generate" );
368
378
if (cache_ == nullptr ) {
369
379
return CachedPtr<Key, Value, Comparator, Hash>{
370
380
/* fromCache=*/ false ,
371
- (*generator_)(key, properties).release (),
381
+ (*generator_)(key, properties, ioStats ).release (),
372
382
nullptr ,
373
383
std::make_unique<Key>(key)};
374
384
}
@@ -408,7 +418,8 @@ CachedFactory<Key, Value, Generator, Properties, Sizer, Comparator, Hash>::
408
418
pendingCv_.notify_all ();
409
419
};
410
420
411
- std::unique_ptr<Value> generatedValue = (*generator_)(key, properties);
421
+ std::unique_ptr<Value> generatedValue =
422
+ (*generator_)(key, properties, ioStats);
412
423
const uint64_t valueSize = Sizer ()(*generatedValue);
413
424
Value* rawValue = generatedValue.release ();
414
425
const bool inserted = addCache (key, rawValue, valueSize);
@@ -433,12 +444,19 @@ template <
433
444
typename Value,
434
445
typename Generator,
435
446
typename Properties,
447
+ typename Stats,
436
448
typename Sizer,
437
449
typename Comparator,
438
450
typename Hash>
439
- CachedPtr<Key, Value, Comparator, Hash>
440
- CachedFactory<Key, Value, Generator, Properties, Sizer, Comparator, Hash>::get(
441
- const Key& key) {
451
+ CachedPtr<Key, Value, Comparator, Hash> CachedFactory<
452
+ Key,
453
+ Value,
454
+ Generator,
455
+ Properties,
456
+ Stats,
457
+ Sizer,
458
+ Comparator,
459
+ Hash>::get(const Key& key) {
442
460
if (cache_ == nullptr ) {
443
461
return {};
444
462
}
@@ -460,10 +478,19 @@ template <
460
478
typename Value,
461
479
typename Generator,
462
480
typename Properties,
481
+ typename Stats,
463
482
typename Sizer,
464
483
typename Comparator,
465
484
typename Hash>
466
- void CachedFactory<Key, Value, Generator, Properties, Sizer, Comparator, Hash>::
485
+ void CachedFactory<
486
+ Key,
487
+ Value,
488
+ Generator,
489
+ Properties,
490
+ Stats,
491
+ Sizer,
492
+ Comparator,
493
+ Hash>::
467
494
retrieveCached (
468
495
const std::vector<Key>& keys,
469
496
std::vector<std::pair<Key, CachedPtr<Key, Value, Comparator, Hash>>>&
0 commit comments