@@ -245,13 +245,28 @@ struct PtrIdentity {
245
245
}
246
246
};
247
247
248
- constexpr char kStringFormat [] = " /path/to/file/name-%07d-of-9999999.txt" ;
248
+ enum class StringSize { kSmall , kMedium , kLarge , kExtraLarge };
249
+ constexpr char kStringFormat [] = " %s/name-%07d-of-9999999.txt" ;
249
250
250
- template <bool small >
251
+ template <StringSize size >
251
252
struct String {
252
253
std::string value;
253
254
static std::string Make (uint32_t v) {
254
- return {small ? absl::StrCat (v) : absl::StrFormat (kStringFormat , v)};
255
+ switch (size) {
256
+ case StringSize::kSmall :
257
+ return absl::StrCat (v);
258
+ case StringSize::kMedium : // < 32 bytes
259
+ return absl::StrFormat (kStringFormat , " /path" , v);
260
+ case StringSize::kLarge : // 33-64 bytes
261
+ return absl::StrFormat (kStringFormat , " /path/to/file" , v);
262
+ case StringSize::kExtraLarge : // > 64 bytes
263
+ return absl::StrFormat (kStringFormat ,
264
+ " /path/to/a/very/long/file/name/so/that/total/"
265
+ " length/is/larger/than/64/bytes" ,
266
+ v);
267
+ default :
268
+ return " " ;
269
+ }
255
270
}
256
271
};
257
272
@@ -285,10 +300,9 @@ struct Sequential<Ptr<Align>*> {
285
300
mutable uintptr_t current = PointerForAlignment<Align>();
286
301
};
287
302
288
-
289
- template <bool small>
290
- struct Sequential <String<small>> {
291
- std::string operator ()() const { return String<small>::Make (current++); }
303
+ template <StringSize size>
304
+ struct Sequential <String<size>> {
305
+ std::string operator ()() const { return String<size>::Make (current++); }
292
306
mutable uint32_t current = 0 ;
293
307
};
294
308
@@ -389,10 +403,10 @@ struct Random<PtrIdentity<Align>, Dist> {
389
403
}
390
404
};
391
405
392
- template <class Dist , bool small >
393
- struct Random <String<small >, Dist> {
406
+ template <class Dist , StringSize size >
407
+ struct Random <String<size >, Dist> {
394
408
std::string operator ()() const {
395
- return String<small >::Make (Random<uint32_t , Dist>{}());
409
+ return String<size >::Make (Random<uint32_t , Dist>{}());
396
410
}
397
411
};
398
412
@@ -421,9 +435,20 @@ std::string Name(PtrIdentity<Align>*) {
421
435
return absl::StrCat (" PtrIdentity" , Align);
422
436
}
423
437
424
- template <bool small>
425
- std::string Name (String<small>*) {
426
- return small ? " StrS" : " StrL" ;
438
+ template <StringSize size>
439
+ std::string Name (String<size>*) {
440
+ switch (size) {
441
+ case StringSize::kSmall :
442
+ return " StrS" ;
443
+ case StringSize::kMedium :
444
+ return " StrM" ;
445
+ case StringSize::kLarge :
446
+ return " StrL" ;
447
+ case StringSize::kExtraLarge :
448
+ return " StrXL" ;
449
+ default :
450
+ return " " ;
451
+ }
427
452
}
428
453
429
454
template <class T , class U >
@@ -543,12 +568,18 @@ int main(int argc, char** argv) {
543
568
RunForType<PtrIdentity<32 >>(results);
544
569
RunForType<PtrIdentity<64 >>(results);
545
570
RunForType<std::pair<uint32_t , uint32_t >>(results);
546
- RunForType<String<true >>(results);
547
- RunForType<String<false >>(results);
548
- RunForType<std::pair<uint64_t , String<true >>>(results);
549
- RunForType<std::pair<String<true >, uint64_t >>(results);
550
- RunForType<std::pair<uint64_t , String<false >>>(results);
551
- RunForType<std::pair<String<false >, uint64_t >>(results);
571
+ RunForType<String<StringSize::kSmall >>(results);
572
+ RunForType<String<StringSize::kMedium >>(results);
573
+ RunForType<String<StringSize::kLarge >>(results);
574
+ RunForType<String<StringSize::kExtraLarge >>(results);
575
+ RunForType<std::pair<uint64_t , String<StringSize::kSmall >>>(results);
576
+ RunForType<std::pair<String<StringSize::kSmall >, uint64_t >>(results);
577
+ RunForType<std::pair<uint64_t , String<StringSize::kMedium >>>(results);
578
+ RunForType<std::pair<String<StringSize::kMedium >, uint64_t >>(results);
579
+ RunForType<std::pair<uint64_t , String<StringSize::kLarge >>>(results);
580
+ RunForType<std::pair<String<StringSize::kLarge >, uint64_t >>(results);
581
+ RunForType<std::pair<uint64_t , String<StringSize::kExtraLarge >>>(results);
582
+ RunForType<std::pair<String<StringSize::kExtraLarge >, uint64_t >>(results);
552
583
553
584
switch (output ()) {
554
585
case OutputStyle::kRegular :
0 commit comments