i can't believe it's string functions
This commit is contained in:
parent
3c32001e4f
commit
9b267df5e8
7 changed files with 102 additions and 27 deletions
|
@ -1,4 +1,3 @@
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
|
|
||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 2.6)
|
||||||
project(server)
|
project(server)
|
||||||
|
|
||||||
|
@ -7,6 +6,8 @@ file(GLOB_RECURSE server_src
|
||||||
"src/*.cpp"
|
"src/*.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -static -g")
|
||||||
add_executable(server ${server_src})
|
add_executable(server ${server_src})
|
||||||
|
|
||||||
install(TARGETS server RUNTIME DESTINATION bin)
|
install(TARGETS server RUNTIME DESTINATION bin)
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,16 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
#include "sock/tcpsock.hpp"
|
#include "sock/tcpsock.hpp"
|
||||||
|
#include "utils/string.hpp"
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
//auto sock = sosc::TcpClient();
|
//auto sock = sosc::TcpClient();
|
||||||
|
|
||||||
std::cout << "compiled on windows" << std::endl;
|
std::string a = "this!!is!!a!!test";
|
||||||
|
auto b = sosc::str::split(a, "!!");
|
||||||
|
std::for_each(b.begin(), b.end(), [](std::string& i) {
|
||||||
|
std::cout << i << std::endl;
|
||||||
|
});
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "ip.hpp"
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
#ifndef SOSC_UTIL_IP_H
|
|
||||||
#define SOSC_UTIL_IP_H
|
|
||||||
|
|
||||||
namespace sosc {
|
|
||||||
class IpAddress {
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,10 +1,63 @@
|
||||||
#ifndef SOSC_UTIL_NET_H
|
#ifndef SOSC_UTIL_NET_H
|
||||||
#define SOSC_UTIL_NET_H
|
#define SOSC_UTIL_NET_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
#undef htons
|
||||||
|
#undef HTONS
|
||||||
|
#undef htonus
|
||||||
|
#undef HTONUS
|
||||||
|
#undef ntohs
|
||||||
|
#undef NTOHS
|
||||||
|
#undef ntohus
|
||||||
|
#undef NTOHUS
|
||||||
|
|
||||||
|
#undef htonl
|
||||||
|
#undef HTONL
|
||||||
|
#undef htonul
|
||||||
|
#undef HTONUL
|
||||||
|
#undef ntohl
|
||||||
|
#undef NTOHL
|
||||||
|
#undef ntohul
|
||||||
|
#undef NTOHUL
|
||||||
|
|
||||||
|
#undef htonll
|
||||||
|
#undef HTONLL
|
||||||
|
#undef htonull
|
||||||
|
#undef HTONULL
|
||||||
|
#undef ntohll
|
||||||
|
#undef NTOHLL
|
||||||
|
#undef ntohull
|
||||||
|
#undef NTOHULL
|
||||||
|
|
||||||
|
#define HTONS (X) sosc::net::htonv<int16_t>(X)
|
||||||
|
#define HTONUS(X) sosc::net::htonv<uint16_t>(X)
|
||||||
|
#define NTOHS (X) sosc::net::ntohv<int16_t>(X)
|
||||||
|
#define NTOHUS(X) sosc::net::ntohv<uint16_t>(X)
|
||||||
|
|
||||||
|
#define HTONL (X) sosc::net::htonv<int32_t>(X)
|
||||||
|
#define HTONUL(X) sosc::net::htonv<uint32_t>(X)
|
||||||
|
#define NTOHL (X) sosc::net::ntohv<int32_t>(X)
|
||||||
|
#define NTOHUL(X) sosc::net::ntohv<uint32_t>(X)
|
||||||
|
|
||||||
|
#define HTONLL (X) sosc::net::htonv<int64_t>(X)
|
||||||
|
#define HTONULL(X) sosc::net::htonv<uint64_t>(X)
|
||||||
|
#define NTOHLL (X) sosc::net::ntohv<int64_t>(X)
|
||||||
|
#define NTOHULL(X) sosc::net::ntohv<uint64_t>(X)
|
||||||
|
|
||||||
namespace sosc {
|
namespace sosc {
|
||||||
namespace util {
|
typedef std::chrono::system_clock time;
|
||||||
namespace net {
|
|
||||||
|
namespace net {
|
||||||
}}}
|
class IpAddress {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T = uint32_t>
|
||||||
|
std::string htonv(T host_var);
|
||||||
|
template<typename T = uint32_t>
|
||||||
|
T ntohv(std::string net_var, size_t offset);
|
||||||
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -14,9 +14,9 @@ std::string sosc::str::ltrim(std::string str) {
|
||||||
std::string* sosc::str::ltrim(std::string* str) {
|
std::string* sosc::str::ltrim(std::string* str) {
|
||||||
int marker = 0;
|
int marker = 0;
|
||||||
for(; marker < str->length(); ++marker)
|
for(; marker < str->length(); ++marker)
|
||||||
if((*str)[marker] < 0x21) break;
|
if((*str)[marker] > 0x20) break;
|
||||||
|
|
||||||
str->erase(0, marker - 1);
|
str->erase(0, marker);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,10 +26,10 @@ std::string sosc::str::rtrim(std::string str) {
|
||||||
|
|
||||||
std::string* sosc::str::rtrim(std::string *str) {
|
std::string* sosc::str::rtrim(std::string *str) {
|
||||||
int marker = 0;
|
int marker = 0;
|
||||||
for(; marker < str->length(); --marker)
|
for(; marker < str->length(); ++marker)
|
||||||
if((*str)[str->length() - marker - 1] < 0x21) break;
|
if((*str)[str->length() - marker - 1] > 0x20) break;
|
||||||
|
|
||||||
str->erase(str->length() - marker - 1, marker);
|
str->erase(str->length() - marker, marker);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ std::vector<std::string> sosc::str::split
|
||||||
while((chunk_end = str.find(delimiter, chunk_end))
|
while((chunk_end = str.find(delimiter, chunk_end))
|
||||||
!= std::string::npos && count != 0)
|
!= std::string::npos && count != 0)
|
||||||
{
|
{
|
||||||
parts.push_back(str.substr(chunk_start, chunk_start - chunk_end));
|
parts.push_back(str.substr(chunk_start, chunk_end - chunk_start));
|
||||||
chunk_start = (chunk_end += delimiter.length());
|
chunk_start = (chunk_end += delimiter.length());
|
||||||
--count;
|
--count;
|
||||||
}
|
}
|
||||||
|
@ -92,3 +92,25 @@ std::string sosc::str::join(const std::vector<std::string>& parts,
|
||||||
|
|
||||||
return assembled;
|
return assembled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool sosc::str::starts
|
||||||
|
(const std::string& str, const std::string& start)
|
||||||
|
{
|
||||||
|
if(start.length() > str.length())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return std::mismatch(
|
||||||
|
start.begin(), start.end(), str.begin()
|
||||||
|
).first == start.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sosc::str::ends
|
||||||
|
(const std::string& str, const std::string& end)
|
||||||
|
{
|
||||||
|
if(end.length() > str.length())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return std::mismatch(
|
||||||
|
end.begin(), end.end(), str.end() - end.length()
|
||||||
|
).first == end.end();
|
||||||
|
}
|
||||||
|
|
|
@ -6,8 +6,12 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#undef tostr
|
||||||
|
#undef TOSTR
|
||||||
|
#define TOSTR(X) std::to_string(X)
|
||||||
|
|
||||||
namespace sosc {
|
namespace sosc {
|
||||||
namespace str {
|
namespace str {
|
||||||
std::string trim (std::string str);
|
std::string trim (std::string str);
|
||||||
std::string* trim (std::string* str);
|
std::string* trim (std::string* str);
|
||||||
|
|
||||||
|
@ -26,6 +30,9 @@ std::string join(const std::vector<std::string>& parts,
|
||||||
char delimiter, int count = -1);
|
char delimiter, int count = -1);
|
||||||
std::string join(const std::vector<std::string>& parts,
|
std::string join(const std::vector<std::string>& parts,
|
||||||
std::string delimiter, int count = -1);
|
std::string delimiter, int count = -1);
|
||||||
|
|
||||||
|
bool starts(const std::string& str, const std::string& start);
|
||||||
|
bool ends(const std::string& str, const std::string& end);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue