Skip to content
This repository was archived by the owner on Jun 12, 2018. It is now read-only.

Commit de23d67

Browse files
committed
Slight optimisation of status_code functions
1 parent c126eb7 commit de23d67

File tree

1 file changed

+12
-18
lines changed

1 file changed

+12
-18
lines changed

status_code.hpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ namespace SimpleWeb {
7272
server_error_network_authentication_required
7373
};
7474

75-
const inline std::vector<std::pair<StatusCode, std::string>> &status_codes() noexcept {
76-
const static std::vector<std::pair<StatusCode, std::string>> status_codes = {
75+
inline const std::map<StatusCode, std::string> &status_code_strings() {
76+
static const std::map<StatusCode, std::string> status_code_strings = {
7777
{StatusCode::unknown, ""},
7878
{StatusCode::information_continue, "100 Continue"},
7979
{StatusCode::information_switching_protocols, "101 Switching Protocols"},
@@ -136,36 +136,30 @@ namespace SimpleWeb {
136136
{StatusCode::server_error_loop_detected, "508 Loop Detected"},
137137
{StatusCode::server_error_not_extended, "510 Not Extended"},
138138
{StatusCode::server_error_network_authentication_required, "511 Network Authentication Required"}};
139-
return status_codes;
139+
return status_code_strings;
140140
}
141141

142-
inline StatusCode status_code(const std::string &status_code_str) noexcept {
142+
inline StatusCode status_code(const std::string &status_code_string) noexcept {
143143
class StringToStatusCode : public std::unordered_map<std::string, SimpleWeb::StatusCode> {
144144
public:
145145
StringToStatusCode() {
146-
for(auto &status_code : SimpleWeb::status_codes())
146+
for(auto &status_code : status_code_strings())
147147
emplace(status_code.second, status_code.first);
148148
}
149149
};
150150
static StringToStatusCode string_to_status_code;
151-
auto pos = string_to_status_code.find(status_code_str);
151+
auto pos = string_to_status_code.find(status_code_string);
152152
if(pos == string_to_status_code.end())
153153
return StatusCode::unknown;
154154
return pos->second;
155155
}
156156

157-
const inline std::string &status_code(StatusCode status_code_enum) noexcept {
158-
class StatusCodeToString : public std::map<SimpleWeb::StatusCode, std::string> {
159-
public:
160-
StatusCodeToString() {
161-
for(auto &status_code : SimpleWeb::status_codes())
162-
emplace(status_code.first, status_code.second);
163-
}
164-
};
165-
static StatusCodeToString status_code_to_string;
166-
auto pos = status_code_to_string.find(status_code_enum);
167-
if(pos == status_code_to_string.end())
168-
return status_codes()[0].second;
157+
inline const std::string &status_code(StatusCode status_code_enum) noexcept {
158+
auto pos = status_code_strings().find(status_code_enum);
159+
if(pos == status_code_strings().end()) {
160+
static std::string empty_string;
161+
return empty_string;
162+
}
169163
return pos->second;
170164
}
171165
} // namespace SimpleWeb

0 commit comments

Comments
 (0)