]> git.sesse.net Git - cubemap/blobdiff - parse.h
Replace map with unordered_map nearly everywhere, for speed.
[cubemap] / parse.h
diff --git a/parse.h b/parse.h
index 3cfa09119458efbdd2d182bd09381e1111f8191c..1924cc08c9f3aab49c54bff4917ab38a6fb0a88d 100644 (file)
--- a/parse.h
+++ b/parse.h
@@ -1,17 +1,12 @@
 #ifndef _PARSE_H
 #define _PARSE_H
 
-// Various routines that deal with parsing; both configuration files and HTTP requests.
+// Various routines that deal with parsing; both HTTP requests and more generic text.
 
-#include <map>
-#include <vector>
+#include <stddef.h>
 #include <string>
-
-struct ConfigLine {
-       std::string keyword;
-       std::vector<std::string> arguments;
-       std::map<std::string, std::string> parameters;
-};
+#include <unordered_map>
+#include <vector>
 
 // Split a line on whitespace, e.g. "foo  bar baz" -> {"foo", "bar", "baz"}.
 std::vector<std::string> split_tokens(const std::string &line);
@@ -19,21 +14,10 @@ std::vector<std::string> split_tokens(const std::string &line);
 // Split a string on \n or \r\n, e.g. "foo\nbar\r\n\nbaz\r\n\r\n" -> {"foo", "bar", "baz"}.
 std::vector<std::string> split_lines(const std::string &str);
 
-// Parse the configuration file.
-std::vector<ConfigLine> parse_config(const std::string &filename);
-
-enum ParameterType {
-       PARAMETER_OPTIONAL,
-       PARAMATER_MANDATORY,
-};
-
-std::string fetch_config_string(const std::vector<ConfigLine> &config, const std::string &keyword,
-                                ParameterType parameter_type, const std::string &default_value = "");
-
-// Note: Limits are inclusive.
-int fetch_config_int(const std::vector<ConfigLine> &config, const std::string &keyword,
-                     int min_limit, int max_limit,
-                     ParameterType parameter_type, int default_value = -1);
+// Extract HTTP headers from a request or response. Ignores the first line,
+// where the verb or the return code is.
+std::unordered_multimap<std::string, std::string> extract_headers(
+       const std::vector<std::string> &lines, const std::string &log_context);
 
 // Add the new data to an existing string, looking for \r\n\r\n
 // (typical of HTTP requests and/or responses). Will return one