Parse suffixes without switch-fallthrough in huge-pages
[folly.git] / folly / experimental / io / HugePages.cpp
index fbbd77087624e131ac7901ce443d4830accbfc69..d59d587453e89bb68c48a49369e6a6cc88341d64 100644 (file)
@@ -98,14 +98,22 @@ size_t parsePageSizeValue(StringPiece value) {
     c = char(tolower(value[size_t(match.position(2))]));
   }
   StringPiece numStr(value.data() + match.position(1), size_t(match.length(1)));
-  size_t size = to<size_t>(numStr);
-  switch (c) {
-  case 't': size *= 1024; FOLLY_FALLTHROUGH;
-  case 'g': size *= 1024; FOLLY_FALLTHROUGH;
-  case 'm': size *= 1024; FOLLY_FALLTHROUGH;
-  case 'k': size *= 1024;
-  }
-  return size;
+  auto const size = to<size_t>(numStr);
+  auto const mult = [c] {
+    switch (c) {
+      case 't':
+        return 1ull << 40;
+      case 'g':
+        return 1ull << 30;
+      case 'm':
+        return 1ull << 20;
+      case 'k':
+        return 1ull << 10;
+      default:
+        return 1ull << 0;
+    }
+  }();
+  return size * mult;
 }
 
 /**