Skip to content

Commit 53fbe60

Browse files
committed
Wrap up move to C++14
- Minor constexpr additions - More auto (could have been used in C++11) - Trailing return types (could have been used in C++11)
1 parent 64d9101 commit 53fbe60

File tree

9 files changed

+71
-78
lines changed

9 files changed

+71
-78
lines changed

.clang-tidy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ Checks: "*,
66
-fuchsia-*,
77
-google-*,
88
-llvm*,
9-
-modernize-use-trailing-return-type,
109
-zircon-*,
1110
-readability-else-after-return,
1211
-readability-static-accessed-through-instance,

src/infiz/infiz.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
constexpr int max_line = 255;
99

10-
int main(int /*argc*/, char * /*args*/[])
10+
auto main(int /*argc*/, char * /*args*/[]) -> int
1111
{
1212
std::array<char, max_line> input{};
1313

src/libinfiz/Evaluator.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <cstdlib>
44

55

6-
int precedence(Operators input) noexcept
6+
constexpr auto precedence(Operators input) noexcept -> int
77
{
88
switch (input) {
99
case Operators::CLOSE_PAREN:
@@ -32,7 +32,7 @@ void evaluateStacks(Stack<RationalNumber> &numbers, Stack<Operators> &operators)
3232
operators.pop();
3333
}
3434

35-
while (!operators.empty() && cont && (operators.peek() != nullptr)) {
35+
while (operators.peek() != nullptr && cont) {
3636

3737
switch (*operators.peek()) {
3838
case Operators::OPEN_PAREN:
@@ -82,7 +82,7 @@ void evaluateStacks(Stack<RationalNumber> &numbers, Stack<Operators> &operators)
8282
}
8383

8484

85-
RationalNumber evaluateExpression(StringTokenizer &tokenizer)
85+
auto evaluateExpression(StringTokenizer &tokenizer) -> RationalNumber
8686
{
8787
Stack<Operators> operators;
8888
Stack<RationalNumber> numbers;

src/libinfiz/Evaluator.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
enum struct Operators { PLUS_SIGN, CLOSE_PAREN, OPEN_PAREN, MINUS_SIGN, DIVIDE_SIGN, MULTIPLY_SIGN };
99

1010

11-
RationalNumber evaluateExpression(StringTokenizer &tokenizer);
11+
auto evaluateExpression(StringTokenizer &tokenizer) -> RationalNumber;
1212
void evaluateStacks(Stack<RationalNumber> &numbers, Stack<Operators> &operators);
1313

1414
#endif

src/libinfiz/RationalNumber.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,40 @@ class RationalNumber
1515
: numerator(num), denominator(den)
1616
{}
1717

18-
constexpr RationalNumber operator/(const RationalNumber &rhs) const noexcept
18+
constexpr auto operator/(const RationalNumber &rhs) const noexcept -> RationalNumber
1919
{
2020
return { numerator * rhs.getDenominator(), denominator * rhs.getNumerator() };
2121
}
2222

23-
constexpr RationalNumber operator*(const RationalNumber &rhs) const noexcept
23+
constexpr auto operator*(const RationalNumber &rhs) const noexcept -> RationalNumber
2424
{
2525
return { numerator * rhs.getNumerator(), denominator * rhs.getDenominator() };
2626
}
2727

28-
constexpr RationalNumber operator+(const RationalNumber &rhs) const noexcept
28+
constexpr auto operator+(const RationalNumber &rhs) const noexcept -> RationalNumber
2929
{
3030
return { numerator * rhs.getDenominator() + (rhs.getNumerator() * denominator),
3131
denominator * rhs.getDenominator() };
3232
}
3333

34-
constexpr RationalNumber operator-(const RationalNumber &rhs) const noexcept
34+
constexpr auto operator-(const RationalNumber &rhs) const noexcept -> RationalNumber
3535
{
3636
return { numerator * rhs.getDenominator() - (rhs.getNumerator() * denominator),
3737
denominator * rhs.getDenominator() };
3838
}
3939

40-
constexpr int getDenominator() const noexcept { return denominator; }
40+
constexpr auto getDenominator() const noexcept -> int { return denominator; }
4141

42-
constexpr RationalNumber operator-() const { return { numerator * -1, denominator }; }
42+
constexpr auto operator-() const -> RationalNumber { return { numerator * -1, denominator }; }
4343

44-
constexpr int getNumerator() const noexcept { return numerator; }
44+
constexpr auto getNumerator() const noexcept -> int { return numerator; }
4545

46-
constexpr float getFloat() const noexcept
46+
constexpr auto getFloat() const noexcept -> float
4747
{
4848
return ((static_cast<float>(numerator)) / (static_cast<float>(denominator)));
4949
}
5050

51-
constexpr bool operator==(const RationalNumber &rhs) const noexcept {
51+
constexpr auto operator==(const RationalNumber &rhs) const noexcept -> bool {
5252
return numerator == rhs.numerator && denominator == rhs.denominator;
5353
}
5454

src/libinfiz/Stack.hpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,26 @@ template<typename Contained> class Stack
1717
public:
1818
Stack() = default;
1919

20-
bool empty() const noexcept {
21-
return data.empty();
22-
}
20+
auto empty() const noexcept -> bool { return data.empty(); }
2321

24-
Contained pop()
22+
auto pop() -> Contained
2523
{
24+
// TODO is an assert the best option here?
2625
assert(!data.empty());
2726
Contained toReturn = data.back();
2827
data.pop_back();
2928
return toReturn;
3029
}
3130

32-
template<typename ... Param>
33-
Contained &emplace( Param && ... param) {
31+
template<typename... Param> auto emplace(Param &&...param) -> Contained &
32+
{
3433
data.emplace_back(std::forward<Param>(param)...);
3534
return data.back();
3635
}
3736

3837
void push(const Contained &newElem) { data.push_back(newElem); }
3938

40-
const Contained *peek() const
39+
auto peek() const -> const Contained *
4140
{
4241
if (data.empty()) {
4342
return nullptr;

src/libinfiz/StringTokenizer.cpp

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,7 @@ StringTokenizer::StringTokenizer(std::string n_string) noexcept
88
: string(std::move(n_string)), currentOffset(0), moreTokens(true)
99
{}
1010

11-
12-
std::string StringTokenizer::nextToken()
13-
{
14-
while (currentOffset < string.size() && isWhiteSpace(string[currentOffset])) { ++currentOffset; }
15-
16-
const auto endOfToken = findTokenEnd(currentOffset, string);
17-
18-
std::string toReturn = string.substr(currentOffset, endOfToken - currentOffset);
19-
currentOffset = endOfToken;
20-
21-
moreTokens = currentOffset < string.size();
22-
23-
return toReturn;
24-
}
25-
26-
27-
std::size_t StringTokenizer::findTokenEnd(std::size_t start, const std::string &string)
11+
auto findTokenEnd(std::size_t start, const std::string &string) -> std::size_t
2812
{
2913
if (string.empty()) { return start; }
3014

@@ -39,40 +23,15 @@ std::size_t StringTokenizer::findTokenEnd(std::size_t start, const std::string &
3923
}
4024

4125

42-
bool StringTokenizer::isOperator(char input) noexcept
26+
auto StringTokenizer::nextToken() -> std::string
4327
{
44-
switch (input) {
45-
case '+':
46-
case '-':
47-
case '/':
48-
case '*':
49-
case '(':
50-
case ')':
51-
return true;
52-
default:
53-
return false;
54-
}
55-
}
28+
while (currentOffset < string.size() && isWhiteSpace(string[currentOffset])) { ++currentOffset; }
5629

30+
const auto endOfToken = findTokenEnd(currentOffset, string);
31+
auto returnValue = string.substr(currentOffset, endOfToken - currentOffset) ;
32+
currentOffset = endOfToken;
33+
moreTokens = endOfToken < string.size();
5734

58-
bool StringTokenizer::isNumber(char input) noexcept
59-
{
60-
switch (input) {
61-
case '1':
62-
case '2':
63-
case '3':
64-
case '4':
65-
case '5':
66-
case '6':
67-
case '7':
68-
case '8':
69-
case '9':
70-
case '0':
71-
return true;
72-
default:
73-
return false;
74-
}
35+
return returnValue;
7536
}
7637

77-
78-
bool StringTokenizer::isWhiteSpace(char input) noexcept { return !isNumber(input) && !isOperator(input); }

src/libinfiz/StringTokenizer.hpp

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,55 @@ class StringTokenizer
1515
public:
1616
explicit StringTokenizer(std::string n_string) noexcept;
1717

18-
bool hasMoreTokens() const noexcept { return moreTokens; }
18+
auto hasMoreTokens() const noexcept -> bool { return moreTokens; }
1919

20-
std::string nextToken();
20+
auto nextToken() -> std::string;
2121

2222
private:
2323
std::string string;
2424
std::size_t currentOffset;
2525
bool moreTokens;
2626

27-
static bool isNumber(char input) noexcept;
28-
static bool isOperator(char input) noexcept;
29-
static bool isWhiteSpace(char input) noexcept;
30-
static std::size_t findTokenEnd(std::size_t start, const std::string &);
3127
};
3228

29+
30+
constexpr auto isOperator(char input) noexcept -> bool
31+
{
32+
switch (input) {
33+
case '+':
34+
case '-':
35+
case '/':
36+
case '*':
37+
case '(':
38+
case ')':
39+
return true;
40+
default:
41+
return false;
42+
}
43+
}
44+
45+
46+
constexpr auto isNumber(char input) noexcept -> bool
47+
{
48+
switch (input) {
49+
case '1':
50+
case '2':
51+
case '3':
52+
case '4':
53+
case '5':
54+
case '6':
55+
case '7':
56+
case '8':
57+
case '9':
58+
case '0':
59+
return true;
60+
default:
61+
return false;
62+
}
63+
}
64+
65+
66+
constexpr auto isWhiteSpace(char input) noexcept -> bool { return !isNumber(input) && !isOperator(input); }
67+
68+
3369
#endif

test/tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "../src/libinfiz/Evaluator.hpp"
1010

1111

12-
RationalNumber evaluate(const std::string &input)
12+
auto evaluate(const std::string &input) -> RationalNumber
1313
{
1414
StringTokenizer tokenizer(input);
1515
return evaluateExpression(tokenizer);

0 commit comments

Comments
 (0)