From 7ce4e451ffebb1ad155beb8a387d6ac88eebe980 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Tue, 19 Jan 2016 11:40:00 +0000 Subject: [PATCH] [base, thin_ls] factor out disk_units code --- Makefile.in | 1 + base/disk_units.cc | 72 ++++++++++++++++++++++++++++++ base/disk_units.h | 34 ++++++++++++++ thin-provisioning/thin_ls.cc | 86 +++--------------------------------- 4 files changed, 113 insertions(+), 80 deletions(-) create mode 100644 base/disk_units.cc create mode 100644 base/disk_units.h diff --git a/Makefile.in b/Makefile.in index d10cac6..0b47826 100644 --- a/Makefile.in +++ b/Makefile.in @@ -27,6 +27,7 @@ all: $(PROGRAMS) SOURCE=\ base/application.cc \ base/base64.cc \ + base/disk_units.cc \ base/endian_utils.cc \ base/error_state.cc \ base/error_string.cc \ diff --git a/base/disk_units.cc b/base/disk_units.cc new file mode 100644 index 0000000..b3e0244 --- /dev/null +++ b/base/disk_units.cc @@ -0,0 +1,72 @@ +#include "base/disk_units.h" + +#include +#include + +using namespace std; +using namespace boost; + +//---------------------------------------------------------------- + +unsigned long long +base::disk_unit_multiplier(disk_unit u) +{ + switch (u) { + case UNIT_BYTE: + return 1; + + case UNIT_SECTOR: + return 512; + + case UNIT_kB: + return 1000; + + case UNIT_MB: + return 1000000; + + case UNIT_GB: + return 1000000000ull; + + case UNIT_TB: + return 1000000000000ull; + + case UNIT_PB: + return 1000000000000000ull; + + case UNIT_KiB: + return 1024ull; + + case UNIT_MiB: + return 1024ull * 1024ull; + + case UNIT_GiB: + return 1024ull * 1024ull * 1024ull; + + case UNIT_TiB: + return 1024ull * 1024ull * 1024ull * 1024ull; + + case UNIT_PiB: + return 1024ull * 1024ull * 1024ull * 1024ull * 1024ull; + } + + throw runtime_error("unknown unit type"); + return 1; +} + +string +base::format_disk_unit(unsigned long long numerator, disk_unit u) +{ + numerator *= disk_unit_multiplier(u); + unsigned i; + for (i = 0; numerator >= 1024; i++) + numerator /= 1024; + + char const *extensions[] = { + "", "KiB", "MiB", "GiB", "TiB", "PiB" + }; + + // FIXME: check subscript of i + return lexical_cast(numerator) + " " + extensions[i]; +} + +//---------------------------------------------------------------- diff --git a/base/disk_units.h b/base/disk_units.h new file mode 100644 index 0000000..b29d0ca --- /dev/null +++ b/base/disk_units.h @@ -0,0 +1,34 @@ +#ifndef BASE_DISK_UNITS_H +#define BASE_DISK_UNITS_H + +#include + +//---------------------------------------------------------------- + +namespace base { + enum disk_unit { + UNIT_BYTE, + UNIT_SECTOR, + + // decimal multipliers + UNIT_kB, + UNIT_MB, + UNIT_GB, + UNIT_TB, + UNIT_PB, + + // binary multipliers + UNIT_KiB, + UNIT_MiB, + UNIT_GiB, + UNIT_TiB, + UNIT_PiB + }; + + unsigned long long disk_unit_multiplier(disk_unit u); + std::string format_disk_unit(unsigned long long numerator, disk_unit u); +} + +//---------------------------------------------------------------- + +#endif diff --git a/thin-provisioning/thin_ls.cc b/thin-provisioning/thin_ls.cc index 56e80fb..31f5e65 100644 --- a/thin-provisioning/thin_ls.cc +++ b/thin-provisioning/thin_ls.cc @@ -21,16 +21,18 @@ #include #include -#include "human_readable_format.h" -#include "metadata_dumper.h" -#include "metadata.h" -#include "xml_format.h" +#include "base/disk_units.h" +#include "thin-provisioning/human_readable_format.h" +#include "thin-provisioning/metadata_dumper.h" +#include "thin-provisioning/metadata.h" +#include "thin-provisioning/xml_format.h" #include "version.h" #include "thin-provisioning/commands.h" #include "persistent-data/file_utils.h" #include "boost/optional.hpp" #include "boost/lexical_cast.hpp" +using namespace base; using namespace boost; using namespace persistent_data; using namespace std; @@ -41,82 +43,6 @@ using namespace thin_provisioning; namespace { - enum disk_unit { - UNIT_BYTE, - UNIT_SECTOR, - - // decimal multipliers - UNIT_kB, - UNIT_MB, - UNIT_GB, - UNIT_TB, - UNIT_PB, - - // binary mulitpliers - UNIT_KiB, - UNIT_MiB, - UNIT_GiB, - UNIT_TiB, - UNIT_PiB - }; - - unsigned long long disk_unit_multiplier(disk_unit u) { - switch (u) { - case UNIT_BYTE: - return 1; - - case UNIT_SECTOR: - return 512; - - case UNIT_kB: - return 1000; - - case UNIT_MB: - return 1000000; - - case UNIT_GB: - return 1000000000ull; - - case UNIT_TB: - return 1000000000000ull; - - case UNIT_PB: - return 1000000000000000ull; - - case UNIT_KiB: - return 1024ull; - - case UNIT_MiB: - return 1024ull * 1024ull; - - case UNIT_GiB: - return 1024ull * 1024ull * 1024ull; - - case UNIT_TiB: - return 1024ull * 1024ull * 1024ull * 1024ull; - - case UNIT_PiB: - return 1024ull * 1024ull * 1024ull * 1024ull * 1024ull; - } - - throw runtime_error("unknown unit type"); - return 1; - } - - string format_disk_unit(unsigned long long numerator, disk_unit u) { - numerator *= disk_unit_multiplier(u); - unsigned i; - for (i = 0; numerator >= 1024; i++) - numerator /= 1024; - - char const *extensions[] = { - "", "KiB", "MiB", "GiB", "TiB", "PiB" - }; - - // FIXME: check subscript of i - return lexical_cast(numerator) + " " + extensions[i]; - } - //------------------------------------------------ // FIXME: move to own file