pianod2
multisource multiuser scriptable networked music player
utility.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include <config.h>
12 
13 #include <cstdio>
14 #include <cassert>
15 #include <cstdint>
16 #include <cstring>
17 #include <cctype>
18 
19 #include <exception>
20 #include <stdexcept>
21 #include <string>
22 #include <algorithm>
23 #include <functional>
24 #include <vector>
25 
26 
27 extern int compare_title_order (const std::string &a, const std::string &b);
32 inline bool compare_titles (const std::string &astr, const std::string &bstr) {
33  return compare_title_order (astr, bstr) == 0;
34 }
35 
36 extern bool compare_person_or_title (const std::string &astr, const std::string &bstr);
37 
38 typedef uint32_t lamerkey_t;
39 extern lamerkey_t create_key_from_string (const char *source);
40 extern lamerkey_t compute_crc (const char *data, lamerkey_t divisor, lamerkey_t remainder = 0);
41 extern char *lamer_cipher (const char *keystr, const char *item);
42 std::string lamer_cipher (const std::string &keystr, const std::string &item);
43 inline lamerkey_t create_key_from_string (const std::string &source) {
44  return create_key_from_string (source.c_str());
45 }
46 
47 // Bring back strcasecmp, strncasecmp, strcasestr, strncasestr
48 inline int strcasecmp (const std::string &a, const char *b) {
49  return strcasecmp (a.c_str(), b);
50 }
51 inline int strcasecmp (const char *a, const std::string &b) {
52  return strcasecmp (a, b.c_str());
53 }
54 inline int strcasecmp (const std::string &a, const std::string &b) {
55  return strcasecmp (a.c_str(), b.c_str());
56 }
57 
58 inline int strncasecmp (const std::string &a, const char *b, size_t n) {
59  return strncasecmp (a.c_str(), b, n);
60 }
61 inline int strncasecmp (const char *a, const std::string &b, size_t n) {
62  return strncasecmp (a, b.c_str(), n);
63 }
64 inline int strncasecmp (const std::string &a, const std::string &b, size_t n) {
65  return strncasecmp (a.c_str(), b.c_str(), n);
66 }
67 
68 inline const char * strcasestr (const std::string &a, const char *b) {
69  return strcasestr (a.c_str(), b);
70 }
71 inline const char * strcasestr (const char *a, const std::string &b) {
72  return strcasestr (a, b.c_str());
73 }
74 inline const char * strcasestr (const std::string &a, const std::string &b) {
75  return strcasestr (a.c_str(), b.c_str());
76 }
77 inline std::string strtolower (std::string str) {
78  std::transform(str.begin(), str.end(), str.begin(), ::tolower);
79  return str;
80 }
81 
85 inline std::string &ltrim(std::string &s) {
86  s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) { return !std::isspace (ch); } ));
87  return s;
88 }
89 
93 inline std::string &rtrim(std::string &s) {
94  s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) {return !std::isspace (ch); }).base(), s.end());
95  return s;
96 }
97 
101 inline std::string &trim(std::string &s) {
102  return ltrim(rtrim(s));
103 }
104 
105 inline std::string trim (const std::string &s) {
106  std::string t {s};
107  return ltrim (rtrim (t));
108 }
109 
110 std::string makeIdentity (std::string s);
111 
112 std::vector<std::string> split_string (const std::string &value);
113 std::vector<std::string> split_string (const std::string &value, const std::string separator, bool include_empty_last = true);
114 
115 std::string join_strings (const std::vector<std::string> &list, const std::string joiner);
117 inline std::string join_strings (const std::vector<std::string> &list) {
118  return join_strings (list, " ");
119 }
120 
121 
uint32_t value
Definition: audiooutput.cpp:68
std::string & rtrim(std::string &s)
Trim whitespace from end of a string.
Definition: utility.h:93
std::vector< std::string > split_string(const std::string &value)
Split a string to words.
Definition: utility.cpp:146
int strncasecmp(const std::string &a, const char *b, size_t n)
Definition: utility.h:58
std::string strtolower(std::string str)
Definition: utility.h:77
std::string makeIdentity(std::string s)
Remove whitespace and other desireable characters, and make all lowercase for use as an ID.
Definition: utility.cpp:125
bool compare_person_or_title(const std::string &astr, const std::string &bstr)
Compare an artist's name, which might be a person's name or a band.
Definition: utility.cpp:67
lamerkey_t create_key_from_string(const char *source)
Generate a key from a string.
Definition: utility.cpp:316
lamerkey_t compute_crc(const char *data, lamerkey_t divisor, lamerkey_t remainder=0)
Compute a key from a string using a CRC algorithm.
Definition: utility.cpp:263
int compare_title_order(const std::string &a, const std::string &b)
Compare titles, ignoring 'a', 'an', or 'the'.
Definition: utility.cpp:35
char * lamer_cipher(const char *keystr, const char *item)
Encipher or decipher an item based on a key.
Definition: utility.cpp:328
int strcasecmp(const std::string &a, const char *b)
Definition: utility.h:48
uint32_t lamerkey_t
Definition: utility.h:38
bool compare_titles(const std::string &astr, const std::string &bstr)
Compare titles, ignoring 'a', 'an', or 'the'.
Definition: utility.h:32
std::string & ltrim(std::string &s)
Trim whitespace from beginning of a string.
Definition: utility.h:85
std::string join_strings(const std::vector< std::string > &list, const std::string joiner)
Join strings together.
Definition: utility.cpp:195
std::string & trim(std::string &s)
Trim whitespace from both ends of a string.
Definition: utility.h:101
const char * strcasestr(const std::string &a, const char *b)
Definition: utility.h:68