[thin_ls] rationalise the field names by using a static array of names

This commit is contained in:
Joe Thornber 2016-01-19 14:11:31 +00:00
parent d65bf29eb7
commit c5a1a814f3

View File

@ -22,15 +22,16 @@
#include <libgen.h> #include <libgen.h>
#include "base/disk_units.h" #include "base/disk_units.h"
#include "boost/lexical_cast.hpp"
#include "boost/optional.hpp"
#include "boost/range.hpp"
#include "persistent-data/file_utils.h"
#include "thin-provisioning/commands.h"
#include "thin-provisioning/human_readable_format.h" #include "thin-provisioning/human_readable_format.h"
#include "thin-provisioning/metadata_dumper.h"
#include "thin-provisioning/metadata.h" #include "thin-provisioning/metadata.h"
#include "thin-provisioning/metadata_dumper.h"
#include "thin-provisioning/xml_format.h" #include "thin-provisioning/xml_format.h"
#include "version.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 base;
using namespace boost; using namespace boost;
@ -161,85 +162,41 @@ namespace {
SNAPSHOT_TIME SNAPSHOT_TIME
}; };
char const *field_names[] = {
"DEV",
"MAPPED_BLOCKS",
"MAPPED_EXCL_BLOCKS",
"MAPPED_SHARED_BLOCKS",
"MAPPED",
"EXCLUSIVE",
"SHARED",
"TRANSACTION_ID",
"CREATION_TIME",
"SNAPSHOT_TIME"
};
output_field string_to_field(string const &str) { output_field string_to_field(string const &str) {
if (str == "DEV_ID") for (unsigned i = 0; i < size(field_names); i++)
return DEV_ID; if (str == field_names[i])
return static_cast<output_field>(i);
else if (str == "MAPPED_BLOCKS")
return MAPPED_BLOCKS;
else if (str == "MAPPED_EXCL_BLOCKS")
return MAPPED_EXCL_BLOCKS;
else if (str == "MAPPED_SHARED_BLOCKS")
return MAPPED_SHARED_BLOCKS;
else if (str == "MAPPED")
return MAPPED;
else if (str == "EXCLUSIVE")
return EXCLUSIVE;
else if (str == "SHARED")
return SHARED;
else if (str == "TRANSACTION_ID")
return TRANSACTION_ID;
else if (str == "CREATION_TIME")
return CREATION_TIME;
else if (str == "SNAPSHOT_TIME")
return SNAPSHOT_TIME;
throw runtime_error("unknown field"); throw runtime_error("unknown field");
return DEV_ID; return DEV_ID;
} }
string header(output_field const &f) { string field_to_string(output_field const &f) {
switch (f) { return field_names[static_cast<unsigned>(f)];
case DEV_ID:
return "DEV";
case MAPPED_BLOCKS:
return "BLOCKS";
case MAPPED_EXCL_BLOCKS:
return "BLOCKS_EXCL";
case MAPPED_SHARED_BLOCKS:
return "BLOCKS_SHARED";
case MAPPED:
return "MAPPED";
case EXCLUSIVE:
return "EXCLUSIVE";
case SHARED:
return "SHARED";
case TRANSACTION_ID:
return "TRANSACTION";
case CREATION_TIME:
return "CREATION";
case SNAPSHOT_TIME:
return "SNAPSHOT";
}
return "<unknown>";
} }
void print_headers(grid_layout &out, vector<output_field> const &fields) { void print_headers(grid_layout &out, vector<output_field> const &fields) {
vector<output_field>::const_iterator it; vector<output_field>::const_iterator it;
for (it = fields.begin(); it != fields.end(); ++it) for (it = fields.begin(); it != fields.end(); ++it)
out.field(header(*it)); out.field(field_to_string(*it));
out.new_row(); out.new_row();
} }
//------------------------------------------------
struct flags { struct flags {
flags() flags()
@ -501,8 +458,6 @@ thin_ls_cmd::usage(std::ostream &out) const
<< endl; << endl;
} }
vector<output_field> parse_fields(string const &str) vector<output_field> parse_fields(string const &str)
{ {
vector<output_field> fields; vector<output_field> fields;