]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Add si_t type for large-number "just the suffix, no space"
authorDan Mick <dan.mick@inktank.com>
Fri, 5 Oct 2012 21:12:16 +0000 (14:12 -0700)
committerDan Mick <dan.mick@inktank.com>
Fri, 5 Oct 2012 21:56:08 +0000 (14:56 -0700)
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
src/include/types.h

index 342ebd2f76cc3005ffc0c859d93599e7829c1eba..d7d2e2e5ceae54449d983db73da83e9d9489d842 100644 (file)
@@ -378,6 +378,29 @@ inline ostream& operator<<(ostream& out, const prettybyte_t& b)
   return out << b.v << " bytes";
 }
 
+struct si_t {
+  uint64_t v;
+  si_t(uint64_t _v) : v(_v) {}
+};
+
+inline ostream& operator<<(ostream& out, const si_t& b)
+{
+  uint64_t bump_after = 100;
+  if (b.v > bump_after << 60)
+    return out << (b.v >> 60) << "E";
+  if (b.v > bump_after << 50)
+    return out << (b.v >> 50) << "P";
+  if (b.v > bump_after << 40)
+    return out << (b.v >> 40) << "T";
+  if (b.v > bump_after << 30)
+    return out << (b.v >> 30) << "G";
+  if (b.v > bump_after << 20)
+    return out << (b.v >> 20) << "M";
+  if (b.v > bump_after << 10)
+    return out << (b.v >> 10) << "K";
+  return out;
+}
+
 struct kb_t {
   uint64_t v;
   kb_t(uint64_t _v) : v(_v) {}