[base, thin_ls] factor out disk_units code
This commit is contained in:
parent
47bd31da8d
commit
7ce4e451ff
@ -27,6 +27,7 @@ all: $(PROGRAMS)
|
|||||||
SOURCE=\
|
SOURCE=\
|
||||||
base/application.cc \
|
base/application.cc \
|
||||||
base/base64.cc \
|
base/base64.cc \
|
||||||
|
base/disk_units.cc \
|
||||||
base/endian_utils.cc \
|
base/endian_utils.cc \
|
||||||
base/error_state.cc \
|
base/error_state.cc \
|
||||||
base/error_string.cc \
|
base/error_string.cc \
|
||||||
|
72
base/disk_units.cc
Normal file
72
base/disk_units.cc
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#include "base/disk_units.h"
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
|
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<string>(numerator) + " " + extensions[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
34
base/disk_units.h
Normal file
34
base/disk_units.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef BASE_DISK_UNITS_H
|
||||||
|
#define BASE_DISK_UNITS_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
|
||||||
|
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
|
@ -21,16 +21,18 @@
|
|||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
#include "human_readable_format.h"
|
#include "base/disk_units.h"
|
||||||
#include "metadata_dumper.h"
|
#include "thin-provisioning/human_readable_format.h"
|
||||||
#include "metadata.h"
|
#include "thin-provisioning/metadata_dumper.h"
|
||||||
#include "xml_format.h"
|
#include "thin-provisioning/metadata.h"
|
||||||
|
#include "thin-provisioning/xml_format.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "thin-provisioning/commands.h"
|
#include "thin-provisioning/commands.h"
|
||||||
#include "persistent-data/file_utils.h"
|
#include "persistent-data/file_utils.h"
|
||||||
#include "boost/optional.hpp"
|
#include "boost/optional.hpp"
|
||||||
#include "boost/lexical_cast.hpp"
|
#include "boost/lexical_cast.hpp"
|
||||||
|
|
||||||
|
using namespace base;
|
||||||
using namespace boost;
|
using namespace boost;
|
||||||
using namespace persistent_data;
|
using namespace persistent_data;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -41,82 +43,6 @@ using namespace thin_provisioning;
|
|||||||
|
|
||||||
namespace {
|
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<string>(numerator) + " " + extensions[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------
|
//------------------------------------------------
|
||||||
|
|
||||||
// FIXME: move to own file
|
// FIXME: move to own file
|
||||||
|
Loading…
Reference in New Issue
Block a user