Skip to content

Commit f4fc26e

Browse files
committed
clean
1 parent 6a2e18e commit f4fc26e

File tree

8 files changed

+69
-96
lines changed

8 files changed

+69
-96
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
build/
2-
.vscode/
2+
.vscode/
3+
.build/

apps/parser.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -128,21 +128,21 @@ int main(int argc, char* argv[])
128128

129129
if(parser.hasUnknown())
130130
{
131-
for(std::map<std::string, Terminfo::Capability::Type>::const_iterator it = parser.getUnknown().cbegin(); it != parser.getUnknown().cend(); ++it)
131+
for(std::map<std::string, Terminfo::Parser::Type>::const_iterator it = parser.getUnknown().cbegin(); it != parser.getUnknown().cend(); ++it)
132132
{
133133
switch(it->second)
134134
{
135-
case Terminfo::Capability::Type::boolean:
135+
case Terminfo::Parser::Type::Boolean:
136136
{
137137
std::cout << "boolean capability " << it->first << " unknown !" << std::endl;
138138
break;
139139
}
140-
case Terminfo::Capability::Type::integer:
140+
case Terminfo::Parser::Type::Integer:
141141
{
142142
std::cout << "integer capability " << it->first << " unknown !" << std::endl;
143143
break;
144144
}
145-
case Terminfo::Capability::Type::string:
145+
case Terminfo::Parser::Type::String:
146146
{
147147
std::cout << "string capability " << it->first << " unknown !" << std::endl;
148148
break;

include/cpp-terminfo/Capabilities.hpp

+20-26
Original file line numberDiff line numberDiff line change
@@ -21,33 +21,27 @@ namespace Terminfo
2121
class Capabilities
2222
{
2323
private:
24-
static const constexpr std::size_t m_booleans_size{37};
25-
static const std::array<Capability, m_booleans_size> m_booleans;
26-
static const constexpr std::size_t m_intergers_size{33};
27-
static const std::array<Capability, m_intergers_size> m_integers;
28-
static const constexpr std::size_t m_strings_size{405};
29-
static const std::array<Capability, m_strings_size> m_strings;
24+
static const constexpr std::size_t m_booleans_size{37};
25+
static const std::array<BooleanCapability, m_booleans_size> m_booleans;
26+
static const constexpr std::size_t m_intergers_size{33};
27+
static const std::array<IntegerCapability, m_intergers_size> m_integers;
28+
static const constexpr std::size_t m_strings_size{405};
29+
static const std::array<StringCapability, m_strings_size> m_strings;
3030

3131
public:
32-
using boolean_const_iterator = std::array<Capability, m_booleans_size>::const_iterator;
33-
using integer_const_iterator = std::array<Capability, m_intergers_size>::const_iterator;
34-
using string_const_iterator = std::array<Capability, m_strings_size>::const_iterator;
35-
Boolean getBoolean(const std::string& str);
36-
Integer getInteger(const std::string& str);
37-
String getString(const std::string& str);
38-
Capability get(const Boolean& boolean) const { return m_booleans[static_cast<std::size_t>(boolean)]; }
39-
Capability get(const Integer& integer) const { return m_integers[static_cast<std::size_t>(integer)]; }
40-
Capability get(const String& string) const { return m_strings[static_cast<std::size_t>(string)]; }
41-
inline bool know(const std::string& name) const noexcept { return std::find(m_booleans.begin(), m_booleans.end(), name) != m_booleans.end() || std::find(m_integers.begin(), m_integers.end(), name) != m_integers.end() || std::find(m_strings.begin(), m_strings.end(), name) != m_strings.end(); }
42-
inline Capability::Type type(const std::string& name)
43-
{
44-
if(std::find(m_booleans.begin(), m_booleans.end(), name) != m_booleans.end()) return Capability::Type::boolean;
45-
else if(std::find(m_integers.begin(), m_integers.end(), name) != m_integers.end())
46-
return Capability::Type::integer;
47-
else if(std::find(m_strings.begin(), m_strings.end(), name) != m_strings.end())
48-
return Capability::Type::string;
49-
else
50-
return Capability::Type::not_yet;
51-
}
32+
using boolean_const_iterator = std::array<BooleanCapability, m_booleans_size>::const_iterator;
33+
using integer_const_iterator = std::array<IntegerCapability, m_intergers_size>::const_iterator;
34+
using string_const_iterator = std::array<StringCapability, m_strings_size>::const_iterator;
35+
bool isBoolean(const std::string& name) const noexcept { return std::find(m_booleans.begin(), m_booleans.end(), name) != m_booleans.end(); }
36+
bool isInteger(const std::string& name) const noexcept { return std::find(m_integers.begin(), m_integers.end(), name) != m_integers.end(); }
37+
bool isString(const std::string& name) const noexcept { return std::find(m_strings.begin(), m_strings.end(), name) != m_strings.end(); }
38+
Boolean getBoolean(const std::string& str);
39+
Integer getInteger(const std::string& str);
40+
String getString(const std::string& str);
41+
BooleanCapability get(const Boolean& boolean) const { return m_booleans[static_cast<std::size_t>(boolean)]; }
42+
IntegerCapability get(const Integer& integer) const { return m_integers[static_cast<std::size_t>(integer)]; }
43+
StringCapability get(const String& string) const { return m_strings[static_cast<std::size_t>(string)]; }
44+
inline bool know(const std::string& name) const noexcept { return isBoolean(name) || isInteger(name) || isString(name); }
5245
};
46+
5347
} // namespace Terminfo

include/cpp-terminfo/Capability.hpp

+15-26
Original file line numberDiff line numberDiff line change
@@ -12,40 +12,29 @@
1212
#include "cpp-terminfo/Integer.hpp"
1313
#include "cpp-terminfo/String.hpp"
1414

15-
#include <cstdint>
1615
#include <string>
1716

1817
namespace Terminfo
1918
{
20-
class Capability
19+
20+
template<typename type_id> class Capability
2121
{
2222
public:
23-
enum class Type : std::uint8_t
24-
{
25-
boolean,
26-
integer,
27-
string,
28-
not_yet // ##FIXME
29-
};
3023
Capability() = default;
31-
inline explicit Capability(const Boolean& val, const std::string& name, const std::string& desc) : m_name(name), m_description(desc), m_type(Type::boolean), m_value(static_cast<std::uint8_t>(val)) {};
32-
inline explicit Capability(const Integer& val, const std::string& name, const std::string& desc) : m_name(name), m_description(desc), m_type(Type::integer), m_value(static_cast<std::uint8_t>(val)) {};
33-
inline explicit Capability(const String& val, const std::string& name, const std::string& desc) : m_name(name), m_description(desc), m_type(Type::string), m_value(static_cast<std::uint16_t>(val)) {};
34-
inline std::string description() const noexcept { return m_description; }
35-
inline std::string name() const noexcept { return m_name; }
36-
inline std::uint16_t value() const noexcept { return m_value; }
37-
inline Type type() const noexcept { return m_type; }
38-
inline bool operator==(const std::string& str) const noexcept
39-
{
40-
if(m_name == str) return true;
41-
else
42-
return false;
43-
}
24+
inline explicit Capability(const type_id& id, const std::string& name, const std::string& description) : m_id(id), m_name(name), m_description(description) {};
25+
inline std::string description() const noexcept { return m_description; }
26+
inline std::string name() const noexcept { return m_name; }
27+
inline type_id id() const noexcept { return m_id; }
28+
inline bool operator==(const std::string& str) const noexcept { return m_name == str; }
4429

4530
private:
46-
std::string m_name;
47-
std::string m_description;
48-
Type m_type;
49-
std::uint16_t m_value;
31+
std::string m_name;
32+
std::string m_description;
33+
type_id m_id;
5034
};
35+
36+
using BooleanCapability = Capability<Boolean>;
37+
using IntegerCapability = Capability<Integer>;
38+
using StringCapability = Capability<String>;
39+
5140
} // namespace Terminfo

include/cpp-terminfo/Parser.hpp

+11-5
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,18 @@ namespace Terminfo
2222
class Parser
2323
{
2424
public:
25+
enum class Type : std::uint8_t
26+
{
27+
Boolean,
28+
Integer,
29+
String,
30+
};
2531
Parser() { m_infos.reserve(2 << 10); } // 1833 but use 2^x
2632
Parser(const std::string& file) : m_file(file) {};
27-
void parse();
28-
std::vector<Terminfo> getTerminfos() { return m_infos; }
29-
bool hasUnknown() { return !m_unknown.empty(); }
30-
const std::map<std::string, Capability::Type>& getUnknown() const noexcept { return m_unknown; };
33+
void parse();
34+
std::vector<Terminfo> getTerminfos() { return m_infos; }
35+
bool hasUnknown() { return !m_unknown.empty(); }
36+
const std::map<std::string, Type>& getUnknown() const noexcept { return m_unknown; };
3137

3238
private:
3339
void parseType(const std::string& line);
@@ -45,6 +51,6 @@ class Parser
4551
std::map<std::string, std::vector<std::string>> m_need_reparse;
4652
std::map<std::string, std::vector<std::string>> m_need_delete;
4753
std::vector<Terminfo> m_infos;
48-
std::map<std::string, Capability::Type> m_unknown;
54+
std::map<std::string, Type> m_unknown;
4955
};
5056
} // namespace Terminfo

include/cpp-terminfo/Type.hpp

+1-6
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,7 @@ class Type
2929
ret.erase(ret.begin());
3030
return ret;
3131
}
32-
bool isAlias(const std::string& str) const noexcept
33-
{
34-
if(std::find(m_aliases.begin(), m_aliases.end(), str) != m_aliases.end()) return true;
35-
else
36-
return false;
37-
}
32+
bool isAlias(const std::string& str) const noexcept { return std::find(m_aliases.begin(), m_aliases.end(), str) != m_aliases.end(); }
3833

3934
private:
4035
std::string m_descritpion;

src/Capabilities.cpp

+8-6
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99

1010
#include "cpp-terminfo/Capabilities.hpp"
1111

12+
#include "cpp-terminfo/Boolean.hpp"
13+
1214
#include <algorithm>
1315
#include <iostream>
1416
#include <stdexcept>
1517

16-
const std::array<Terminfo::Capability, Terminfo::Capabilities::m_booleans_size> Terminfo::Capabilities::m_booleans{
18+
const std::array<Terminfo::BooleanCapability, Terminfo::Capabilities::m_booleans_size> Terminfo::Capabilities::m_booleans{
1719
// Booleans
1820
Capability{Boolean::auto_left_margin, "bw", "cub1 wraps from column 0 to last column"},
1921
Capability{Boolean::auto_right_margin, "am", "terminal has automatic margins"},
@@ -54,7 +56,7 @@ const std::array<Terminfo::Capability, Terminfo::Capabilities::m_booleans_size>
5456
Capability{Boolean::lpi_changes_res, "lpix", "changing line pitch changes resolution"},
5557
};
5658

57-
const std::array<Terminfo::Capability, Terminfo::Capabilities::m_intergers_size> Terminfo::Capabilities::m_integers{
59+
const std::array<Terminfo::IntegerCapability, Terminfo::Capabilities::m_intergers_size> Terminfo::Capabilities::m_integers{
5860
// Integers
5961
Capability{Integer::columns, "cols", "number of columns in a line"},
6062
Capability{Integer::init_tabs, "it", "tabs initially every # spaces"},
@@ -91,7 +93,7 @@ const std::array<Terminfo::Capability, Terminfo::Capabilities::m_intergers_size>
9193
Capability{Integer::bit_image_type, "bitype", "type of bit-image device"},
9294
};
9395

94-
const std::array<Terminfo::Capability, Terminfo::Capabilities::m_strings_size> Terminfo::Capabilities::m_strings = {
96+
const std::array<Terminfo::StringCapability, Terminfo::Capabilities::m_strings_size> Terminfo::Capabilities::m_strings = {
9597
// Strings
9698
Capability{String::back_tab, "cbt", "back tab (P)"},
9799
Capability{String::bell, "bel", "audible signal (bell) (P)"},
@@ -504,20 +506,20 @@ const std::array<Terminfo::Capability, Terminfo::Capabilities::m_strings_size> T
504506
Terminfo::Boolean Terminfo::Capabilities::getBoolean(const std::string& str)
505507
{
506508
const boolean_const_iterator found = std::find(m_booleans.begin(), m_booleans.end(), str);
507-
if(found != m_booleans.end()) return static_cast<Terminfo::Boolean>(found->value());
509+
if(found != m_booleans.end()) return static_cast<Terminfo::Boolean>(found->id());
508510
throw std::out_of_range(str);
509511
}
510512

511513
Terminfo::Integer Terminfo::Capabilities::getInteger(const std::string& str)
512514
{
513515
const integer_const_iterator found = std::find(m_integers.begin(), m_integers.end(), str);
514-
if(std::find(m_integers.begin(), m_integers.end(), str) != m_integers.end()) return static_cast<Terminfo::Integer>(found->value());
516+
if(std::find(m_integers.begin(), m_integers.end(), str) != m_integers.end()) return static_cast<Terminfo::Integer>(found->id());
515517
throw std::out_of_range(str);
516518
}
517519

518520
Terminfo::String Terminfo::Capabilities::getString(const std::string& str)
519521
{
520522
const string_const_iterator found = std::find(m_strings.begin(), m_strings.end(), str);
521-
if(found != m_strings.end()) return static_cast<Terminfo::String>(found->value());
523+
if(found != m_strings.end()) return static_cast<Terminfo::String>(found->id());
522524
throw std::out_of_range(str);
523525
}

src/Parser.cpp

+8-22
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ void Terminfo::Parser::parseCapability(const std::string& line)
136136
m_infos[m_infos.size() - 1].addString(string, value);
137137
}
138138
else
139-
m_unknown[key] = Capability::Type::string;
139+
m_unknown[key] = Type::String;
140140
return;
141141
}
142142
pos = line.find('#');
@@ -150,7 +150,7 @@ void Terminfo::Parser::parseCapability(const std::string& line)
150150
m_infos[m_infos.size() - 1].addInteger(integer, stoi(value));
151151
}
152152
else
153-
m_unknown[key] = Capability::Type::integer;
153+
m_unknown[key] = Type::Integer;
154154
return;
155155
}
156156
pos = line.find('@'); // is a removed capability
@@ -162,7 +162,7 @@ void Terminfo::Parser::parseCapability(const std::string& line)
162162
// is a boolean
163163
if(capabilities.know(line)) m_infos[m_infos.size() - 1].addBoolean(capabilities.getBoolean(line));
164164
else
165-
m_unknown[line] = Capability::Type::string;
165+
m_unknown[line] = Type::Boolean;
166166
}
167167
catch(const std::out_of_range& exception)
168168
{
@@ -198,25 +198,11 @@ void Terminfo::Parser::resolveDeletes()
198198
{
199199
for(std::size_t j = 0; j != find->second.size(); ++j)
200200
{
201-
switch(capabilities.type(find->second[j]))
202-
{
203-
case Capability::Type::boolean:
204-
{
205-
m_infos[i].remove(capabilities.getBoolean(find->second[j]));
206-
break;
207-
}
208-
case Capability::Type::integer:
209-
{
210-
m_infos[i].remove(capabilities.getInteger(find->second[j]));
211-
break;
212-
}
213-
case Capability::Type::string:
214-
{
215-
m_infos[i].remove(capabilities.getString(find->second[j]));
216-
break;
217-
}
218-
default: break;
219-
}
201+
if(capabilities.isBoolean(find->second[j])) m_infos[i].remove(capabilities.getBoolean(find->second[j]));
202+
else if(capabilities.isInteger(find->second[j]))
203+
m_infos[i].remove(capabilities.getInteger(find->second[j]));
204+
else
205+
m_infos[i].remove(capabilities.getString(find->second[j]));
220206
}
221207
}
222208
}

0 commit comments

Comments
 (0)