Library: reorder some pervasively used includes

reduce footprint of lib/util.hpp
 (Note: it is not possible to forward-declare std::string here)

define the shorthand "cStr()" in lib/symbol.hpp

reorder relevant includes to ensure std::hash is "hijacked" first
This commit is contained in:
Fischlurch 2024-03-16 00:01:49 +01:00
parent aa93bf9285
commit 59390cd2f8
41 changed files with 105 additions and 119 deletions

View file

@ -60,7 +60,6 @@
#include <string> #include <string>
using util::cStr;
using util::join; using util::join;
using std::string; using std::string;

View file

@ -30,9 +30,9 @@
*/ */
#include "lib/util.hpp"
#include "lib/symbol.hpp"
#include "common/advice/binding.hpp" #include "common/advice/binding.hpp"
#include "lib/symbol.hpp"
#include "lib/util.hpp"
#include <boost/functional/hash.hpp> #include <boost/functional/hash.hpp>
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>

View file

@ -48,7 +48,6 @@ extern "C" {
#include "lib/util.hpp" #include "lib/util.hpp"
using util::cStr;
using lib::Literal; using lib::Literal;
using std::unique_ptr; using std::unique_ptr;

View file

@ -70,7 +70,6 @@ extern "C" {
namespace lumiera { namespace lumiera {
using util::cStr;
using util::isnil; using util::isnil;
using lib::Literal; using lib::Literal;
@ -135,7 +134,6 @@ extern "C" { /* ==== implementation C interface for accessing setup.ini =======
using lumiera::Config; using lumiera::Config;
using lib::SearchPathSplitter; using lib::SearchPathSplitter;
using util::isnil; using util::isnil;
using util::cStr;

View file

@ -39,7 +39,6 @@ typedef boost::program_options::variables_map VarMap;
namespace op = boost::program_options; namespace op = boost::program_options;
using lib::VectS; using lib::VectS;
using util::cStr;
namespace lumiera { namespace lumiera {

View file

@ -66,7 +66,6 @@ namespace lumiera {
using std::vector; using std::vector;
using std::string; using std::string;
using util::_Fmt; using util::_Fmt;
using util::cStr;
using util::isnil; using util::isnil;
using util::and_all; using util::and_all;
using util::for_each; using util::for_each;

View file

@ -128,7 +128,6 @@
#include "lib/error.hpp" #include "lib/error.hpp"
#include "lib/util.hpp" #include "lib/util.hpp"
using util::cStr;
namespace lumiera { namespace lumiera {
namespace facade { namespace facade {

View file

@ -27,8 +27,8 @@
#include "lib/util.hpp"
#include "include/logging.h" #include "include/logging.h"
#include "lib/hash-standard.hpp"
#include "lib/cmdline.hpp" #include "lib/cmdline.hpp"
#include "lib/format-util.hpp" #include "lib/format-util.hpp"

View file

@ -177,7 +177,6 @@ namespace diff{
void void
applyTo (Interpreter& interpreter) applyTo (Interpreter& interpreter)
{ {
using util::cStr;
TRACE (diff, "verb %4s(%s)", cStr(verb()), cStr(elm()) ); TRACE (diff, "verb %4s(%s)", cStr(verb()), cStr(elm()) );
verb().applyTo (interpreter, elm()); verb().applyTo (interpreter, elm());
} }

View file

@ -244,7 +244,6 @@ namespace diff{
/* ======= Implementation of Tree Diff Application via TreeMutator ======= */ /* ======= Implementation of Tree Diff Application via TreeMutator ======= */
using util::unConst; using util::unConst;
using util::cStr;
using util::_Fmt; using util::_Fmt;
using std::move; using std::move;
using std::swap; using std::swap;

View file

@ -59,7 +59,6 @@ namespace diff{
/* ======= Implementation of Tree Diff Application via TreeMutator ======= */ /* ======= Implementation of Tree Diff Application via TreeMutator ======= */
using util::unConst; using util::unConst;
using util::cStr;
using util::_Fmt; using util::_Fmt;
using std::move; using std::move;
using std::swap; using std::swap;

View file

@ -41,7 +41,6 @@
#include <typeinfo> #include <typeinfo>
#include <iostream> #include <iostream>
using util::cStr;
using util::isnil; using util::isnil;
using std::exception; using std::exception;

View file

@ -117,7 +117,7 @@
namespace std { // forward declaration to avoid including <iostream> namespace std {// forward declaration to avoid including <iostream>
template<typename C> template<typename C>
struct char_traits; struct char_traits;

View file

@ -31,7 +31,6 @@
#include "lib/lifecycleregistry.hpp" #include "lib/lifecycleregistry.hpp"
#include "lib/util.hpp" #include "lib/util.hpp"
using util::cStr;

View file

@ -36,13 +36,10 @@
#include "lib/symbol.hpp" #include "lib/symbol.hpp"
#include "lib/symbol-table.hpp" #include "lib/symbol-table.hpp"
#include "include/limits.hpp"
extern "C" {
#include "lib/safeclib.h"
}
#include <boost/functional/hash.hpp> #include <boost/functional/hash.hpp>
#include <cstddef> #include <cstddef>
#include <cstring>
#include <string> #include <string>
using std::size_t; using std::size_t;
@ -66,6 +63,12 @@ namespace lib {
static SymbolTable theSymbolTable; static SymbolTable theSymbolTable;
return theSymbolTable; // Meyer's Singleton return theSymbolTable; // Meyer's Singleton
} }
inline int
strNcmp (CStr a, CStr b, size_t len)
{
return a == b ? 0 : std::strncmp (a?a:"", b?b:"", len);
}
} }
@ -96,9 +99,9 @@ namespace lib {
/** equality on Literal and Symbol values is defined /** equality on Literal and Symbol values is defined
* based on the content, not the address. */ * based on the content, not the address. */
bool bool
Literal::operator== (const char* cString) const Literal::operator== (CStr charPtr) const
{ {
return !lumiera_strncmp (this->str_, cString, STRING_MAX_RELEVANT); return 0 == strNcmp (this->str_, charPtr, STRING_MAX_RELEVANT);
} }

View file

@ -60,6 +60,16 @@
#include <string> #include <string>
#include <cstring> #include <cstring>
using CStr = const char*;
/** convenience shortcut: forced conversion to c-String via string.
* usable for printf with objects providing to-string conversion. */
inline CStr
cStr (std::string const& rendered)
{
return rendered.c_str();
}
namespace lib { namespace lib {
@ -74,7 +84,7 @@ namespace lib {
*/ */
class Literal class Literal
{ {
const char * str_; CStr str_;
public: public:
/** empty string by default */ /** empty string by default */
@ -88,8 +98,8 @@ namespace lib {
: str_(o.str_) : str_(o.str_)
{ } { }
operator const char* () const { return str_; } operator CStr() const { return str_; }
const char* c() const { return str_; } const char* c() const { return str_; }
bool bool
empty() const empty() const
@ -97,11 +107,11 @@ namespace lib {
return !str_ || 0 == std::strlen(str_); return !str_ || 0 == std::strlen(str_);
} }
bool operator== (const char* cString) const; bool operator== (CStr cString) const;
protected: protected:
/** Assignment generally prohibited */ /** Assignment generally prohibited */
Literal& operator= (const char* newStr) noexcept Literal& operator= (CStr newStr) noexcept
{ {
str_ = newStr; str_ = newStr;
return *this; return *this;
@ -122,7 +132,7 @@ namespace lib {
static Symbol BOTTOM; static Symbol BOTTOM;
static Symbol FAILURE; static Symbol FAILURE;
Symbol (const char* lit =NULL) Symbol (CStr lit =NULL)
: Symbol{std::string(lit? lit : BOTTOM.c())} : Symbol{std::string(lit? lit : BOTTOM.c())}
{ } { }
@ -137,7 +147,7 @@ namespace lib {
: Symbol{std::string(base)+"."+ext} : Symbol{std::string(base)+"."+ext}
{ } { }
Symbol (Literal const& base, const char* ext) Symbol (Literal const& base, CStr ext)
: Symbol{base, std::string(ext)} : Symbol{base, std::string(ext)}
{ } { }
@ -180,9 +190,9 @@ namespace lib {
/* === mixed comparisons === */ /* === mixed comparisons === */
inline bool operator== (const char* s1, Literal s2) { return s2.operator== (s1); } inline bool operator== (CStr s1, Literal s2) { return s2.operator== (s1); }
inline bool operator== (Symbol s1, const char* s2) { return s1.operator== (s2); } inline bool operator== (Symbol s1, CStr s2) { return s1.operator== (s2); }
inline bool operator== (const char* s1, Symbol s2) { return s2.operator== (s1); } inline bool operator== (CStr s1, Symbol s2) { return s2.operator== (s1); }
inline bool operator== (Literal s1, Symbol s2) { return s1.operator== (s2.c()); } inline bool operator== (Literal s1, Symbol s2) { return s1.operator== (s2.c()); }
inline bool operator== (Symbol s1, Literal s2) { return s2.operator== (s1.c()); } inline bool operator== (Symbol s1, Literal s2) { return s2.operator== (s1.c()); }
inline bool operator== (Literal s1, std::string s2) { return s1.operator== (s2.c_str()); } inline bool operator== (Literal s1, std::string s2) { return s1.operator== (s2.c_str()); }
@ -194,10 +204,10 @@ namespace lib {
inline bool operator!= (Literal const& s1, Literal const& s2) { return not s1.operator== (s2.c()); } inline bool operator!= (Literal const& s1, Literal const& s2) { return not s1.operator== (s2.c()); }
inline bool operator!= (Symbol const& s1, Symbol const& s2) { return not (s1.c() == s2.c()); } inline bool operator!= (Symbol const& s1, Symbol const& s2) { return not (s1.c() == s2.c()); }
inline bool operator!= (Literal s1, const char* s2) { return not s1.operator== (s2); } inline bool operator!= (Literal s1, CStr s2) { return not s1.operator== (s2); }
inline bool operator!= (const char* s1, Literal s2) { return not s2.operator== (s1); } inline bool operator!= (CStr s1, Literal s2) { return not s2.operator== (s1); }
inline bool operator!= (Symbol s1, const char* s2) { return not s1.operator== (s2); } inline bool operator!= (Symbol s1, CStr s2) { return not s1.operator== (s2); }
inline bool operator!= (const char* s1, Symbol s2) { return not s2.operator== (s1); } inline bool operator!= (CStr s1, Symbol s2) { return not s2.operator== (s1); }
inline bool operator!= (Literal s1, Symbol s2) { return not s1.operator== (s2.c()); } inline bool operator!= (Literal s1, Symbol s2) { return not s1.operator== (s2.c()); }
inline bool operator!= (Symbol s1, Literal s2) { return not s2.operator== (s1.c()); } inline bool operator!= (Symbol s1, Literal s2) { return not s2.operator== (s1.c()); }
inline bool operator!= (Literal s1, std::string s2) { return not s1.operator== (s2.c_str()); } inline bool operator!= (Literal s1, std::string s2) { return not s1.operator== (s2.c_str()); }
@ -211,14 +221,14 @@ namespace lib {
inline std::string inline std::string
operator+ (std::string str, Literal const& sym) operator+ (std::string str, Literal const& sym)
{ {
const char* symP (sym); CStr symP (sym);
return str + symP; return str + symP;
} }
inline std::string inline std::string
operator+ (Literal const& sym, std::string str) operator+ (Literal const& sym, std::string str)
{ {
const char* symP (sym); CStr symP (sym);
return symP + str; return symP + str;
} }

View file

@ -52,7 +52,6 @@ namespace test {
using std::shared_ptr; using std::shared_ptr;
using boost::algorithm::trim; using boost::algorithm::trim;
using util::cStr;
using util::isnil; using util::isnil;
using util::contains; using util::contains;
using util::typeStr; using util::typeStr;

View file

@ -84,11 +84,10 @@ namespace time {
namespace digxel { namespace digxel {
using util::cStr;
using lib::Literal; using lib::Literal;
using boost::lexical_cast; using boost::lexical_cast;
typedef const char* CBuf; using CBuf = CStr;
/** /**

View file

@ -40,15 +40,30 @@
#include "include/limits.hpp" #include "include/limits.hpp"
#include "lib/hash-standard.hpp" #include "lib/hash-standard.hpp"
#include <set>
#include <string> #include <string>
#include <algorithm>
namespace std {// forward declarations to avoid pervasive includes
template<typename T>
class allocator;
template<typename K, typename CMP, class ALLO>
class set;
template<typename IT, typename V>
IT find (IT, IT, V const&);
template<typename IT, typename V>
IT remove (IT, IT, V const&);
}
const char* cStr (std::string const&);
namespace util { namespace util {
using std::string; using std::string;
using CStr = const char*;
template <class NUM> template <class NUM>
@ -101,31 +116,33 @@ namespace util {
* @return always a number, 0 in case of unparseable text, * @return always a number, 0 in case of unparseable text,
* limited to 0 <= num <= LUMIERA_MAX_ORDINAL_NUMBER */ * limited to 0 <= num <= LUMIERA_MAX_ORDINAL_NUMBER */
inline uint inline uint
uNum (const char* pCStr) uNum (CStr charPtr)
{ {
if (!pCStr) return 0; if (!charPtr) return 0;
int parsedNumber(std::atoi (pCStr)); int parsedNumber (std::atoi (charPtr));
return limited (0, parsedNumber, LUMIERA_MAX_ORDINAL_NUMBER); return limited (0, parsedNumber, LUMIERA_MAX_ORDINAL_NUMBER);
} }
inline int inline int
sNum (const char* pCStr) sNum (CStr charPtr)
{ {
if (!pCStr) return 0; if (!charPtr) return 0;
int parsedNumber(std::atoi (pCStr)); int parsedNumber (std::atoi (charPtr));
return limited (-LUMIERA_MAX_ORDINAL_NUMBER, parsedNumber, LUMIERA_MAX_ORDINAL_NUMBER); return limited (-LUMIERA_MAX_ORDINAL_NUMBER, parsedNumber, LUMIERA_MAX_ORDINAL_NUMBER);
} }
template<class OBJ>
inline uint inline uint
uNum (string const& spec) uNum (OBJ const& spec)
{ {
return uNum (spec.c_str()); return uNum (cStr(spec));
} }
template<class OBJ>
inline int inline int
sNum (string const& spec) sNum (OBJ const& spec)
{ {
return sNum (spec.c_str()); return sNum (cStr(spec));
} }
@ -156,9 +173,9 @@ namespace util {
} }
inline bool inline bool
isnil (const char* pCStr) isnil (CStr charPtr)
{ {
return !pCStr or !(*pCStr); return !charPtr or !(*charPtr);
} }
@ -167,13 +184,13 @@ namespace util {
inline bool inline bool
startsWith (string const& str, string const& prefix) startsWith (string const& str, string const& prefix)
{ {
return 0 == str.rfind(prefix, 0); return 0 == str.rfind (prefix, 0);
} }
inline bool inline bool
startsWith (string const& str, const char* prefix) startsWith (string const& str, CStr prefix)
{ {
return 0 == str.rfind(prefix, 0); return 0 == str.rfind (prefix, 0);
} }
/** check if string ends with the given suffix */ /** check if string ends with the given suffix */
@ -183,11 +200,11 @@ namespace util {
size_t l = suffix.length(); size_t l = suffix.length();
if (l > str.length()) return false; if (l > str.length()) return false;
size_t pos = str.length() - l; size_t pos = str.length() - l;
return pos == str.find(suffix, pos); return pos == str.find (suffix, pos);
} }
inline bool inline bool
endsWith (string const& str, const char* suffix) endsWith (string const& str, CStr suffix)
{ {
return endsWith (str, string(suffix)); return endsWith (str, string(suffix));
} }
@ -216,9 +233,9 @@ namespace util {
} }
/** shortcut for set value containment test */ /** shortcut for set value containment test */
template <typename T> template <typename T, class CMP, class ALO>
inline bool inline bool
contains (std::set<T> const& set, T const& val) contains (std::set<T,CMP,ALO> const& set, T const& val)
{ {
return set.end() != set.find (val); return set.end() != set.find (val);
} }
@ -448,19 +465,6 @@ namespace util {
*/ */
bool isYes (string const&) noexcept; bool isYes (string const&) noexcept;
/** convenience shortcut: conversion to c-String via string.
* usable for printf with objects providing to-string conversion.
*/
inline const char*
cStr (string const& org)
{
return org.c_str();
}
} // namespace util } // namespace util

View file

@ -45,7 +45,6 @@
#include <gdlmm.h> #include <gdlmm.h>
using util::cStr;
using util::isnil; using util::isnil;

View file

@ -37,7 +37,6 @@
#include <memory> #include <memory>
#include <list> #include <list>
using util::cStr;
using util::isnil; using util::isnil;
using std::list; using std::list;

View file

@ -78,7 +78,6 @@ using lib::diff::TreeMutator;
using lib::diff::MutationMessage; using lib::diff::MutationMessage;
using stage::ctrl::UiDispatcher; using stage::ctrl::UiDispatcher;
using stage::ctrl::BusTerm; using stage::ctrl::BusTerm;
using util::cStr;
using util::_Fmt; using util::_Fmt;
using std::string; using std::string;

View file

@ -44,7 +44,6 @@
using Gtk::IconSize; using Gtk::IconSize;
using Gtk::IconFactory; using Gtk::IconFactory;
using util::cStr;
namespace stage { namespace stage {

View file

@ -44,7 +44,6 @@ using util::removeall;
using util::for_each; using util::for_each;
using util::and_all; using util::and_all;
using util::isnil; using util::isnil;
using util::cStr;
using util::_Fmt; using util::_Fmt;

View file

@ -38,7 +38,6 @@
#include <string> #include <string>
using util::_Fmt; using util::_Fmt;
using util::cStr;
using util::isnil; using util::isnil;
using std::string; using std::string;

View file

@ -84,7 +84,6 @@ namespace control {
using std::placeholders::_1; using std::placeholders::_1;
using std::tuple_size; using std::tuple_size;
using lib::Symbol; using lib::Symbol;
using util::cStr;
using lib::meta::_Fun; using lib::meta::_Fun;
using lib::meta::NullType; using lib::meta::NullType;

View file

@ -39,7 +39,6 @@
*/ */
#include "lib/util.hpp"
#include "lib/error.hpp" #include "lib/error.hpp"
#include "lib/symbol.hpp" #include "lib/symbol.hpp"
#include "lib/format-string.hpp" #include "lib/format-string.hpp"
@ -49,6 +48,7 @@
#include "steam/control/command-registry.hpp" #include "steam/control/command-registry.hpp"
#include "steam/control/command-impl-clone-builder.hpp" #include "steam/control/command-impl-clone-builder.hpp"
#include "steam/control/handling-pattern.hpp" #include "steam/control/handling-pattern.hpp"
#include "lib/util.hpp"
#include <utility> #include <utility>
#include <sstream> #include <sstream>
@ -57,7 +57,6 @@
using std::ostringstream; using std::ostringstream;
using std::string; using std::string;
using std::move; using std::move;
using util::cStr;
using util::_Fmt; using util::_Fmt;

View file

@ -36,7 +36,6 @@
using util::isnil; using util::isnil;
using util::cStr;
using util::_Fmt; using util::_Fmt;

View file

@ -52,7 +52,6 @@ namespace control {
using lib::Symbol; using lib::Symbol;
using std::string; using std::string;
using util::cStr;
Symbol Symbol

View file

@ -315,7 +315,7 @@ namespace control {
} }
if (cmd) if (cmd)
{ {
INFO (command, "+++ dispatch %s", util::cStr(cmd)); ///////////////////////////////TICKET #211 actually use a command logging and execution strategy here INFO (command, "+++ dispatch %s", cStr(cmd)); ////////////////////////////////////////TICKET #211 actually use a command logging and execution strategy here
//////////////////////////////////////////////////////TODO : magic to invoke commands from unit tests //////////////////////////////////////////////////////TODO : magic to invoke commands from unit tests
if (util::startsWith (string(cmd.getID()), "test")) if (util::startsWith (string(cmd.getID()), "test"))

View file

@ -35,7 +35,6 @@
** **
*/ */
#include "lib/util.hpp"
//#include "lib/symbol.hpp" //#include "lib/symbol.hpp"
//#include "include/logging.h" //#include "include/logging.h"
#include "steam/mobject/session/dummy-session-connection.hpp" #include "steam/mobject/session/dummy-session-connection.hpp"

View file

@ -106,13 +106,13 @@
#ifndef STEAM_MOBJECT_PLACEMENT_INDEX_H #ifndef STEAM_MOBJECT_PLACEMENT_INDEX_H
#define STEAM_MOBJECT_PLACEMENT_INDEX_H #define STEAM_MOBJECT_PLACEMENT_INDEX_H
#include "lib/util.hpp"
#include "lib/error.hpp" #include "lib/error.hpp"
#include "lib/symbol.hpp" #include "lib/symbol.hpp"
#include "lib/itertools.hpp" #include "lib/itertools.hpp"
#include "steam/mobject/placement.hpp" #include "steam/mobject/placement.hpp"
#include "steam/mobject/placement-ref.hpp" #include "steam/mobject/placement-ref.hpp"
#include "lib/nocopy.hpp" #include "lib/nocopy.hpp"
#include "lib/util.hpp"
#include <unordered_map> #include <unordered_map>
#include <memory> #include <memory>

View file

@ -53,7 +53,6 @@
#include <cstdlib> #include <cstdlib>
using util::_Fmt; using util::_Fmt;
using util::cStr;
using std::string; using std::string;
using std::rand; using std::rand;

View file

@ -34,7 +34,6 @@
#include "lib/util.hpp" #include "lib/util.hpp"
using lib::Symbol; using lib::Symbol;
using util::cStr;
namespace lib { namespace lib {

View file

@ -47,7 +47,6 @@
#include <chrono> #include <chrono>
using util::isnil; using util::isnil;
using util::cStr;
using test::Test; using test::Test;
using lib::Literal; using lib::Literal;
using lib::query::extractID; using lib::query::extractID;

View file

@ -38,7 +38,6 @@
#include "lib/format-cout.hpp" #include "lib/format-cout.hpp"
#include "lib/util.hpp" #include "lib/util.hpp"
using util::cStr;
using std::string; using std::string;

View file

@ -50,7 +50,6 @@ namespace mobject {
namespace session { namespace session {
namespace test { namespace test {
using util::cStr;
using lib::Symbol; using lib::Symbol;
using asset::ID; using asset::ID;
using asset::Asset; using asset::Asset;

View file

@ -48,7 +48,6 @@ namespace test {
using std::bind; using std::bind;
using std::string; using std::string;
using util::cStr;
using util::contains; using util::contains;

View file

@ -235,31 +235,33 @@ namespace test {
void void
checkPrefixSuffix() checkPrefixSuffix()
{ {
CHECK (startsWith ("abcdef", "abcdef")); string abcdef{"abcdef"};
CHECK (startsWith ("abcdef", "abcde")); CHECK (startsWith (abcdef, "abcdef"));
CHECK (startsWith ("abcdef", "abcd")); CHECK (startsWith (abcdef, "abcde"));
CHECK (startsWith ("abcdef", "abc")); CHECK (startsWith (abcdef, "abcd"));
CHECK (startsWith ("abcdef", "ab")); CHECK (startsWith (abcdef, "abc"));
CHECK (startsWith ("abcdef", "a")); CHECK (startsWith (abcdef, "ab"));
CHECK (startsWith ("abcdef", "")); CHECK (startsWith (abcdef, "a"));
CHECK (startsWith ("", "")); CHECK (startsWith (abcdef, ""));
CHECK (not startsWith ("abc", "abcd")); CHECK (endsWith (abcdef, "abcdef"));
CHECK (not startsWith ("a", "ä")); CHECK (endsWith (abcdef, "bcdef"));
CHECK (not startsWith ("ä", "a")); CHECK (endsWith (abcdef, "cdef"));
CHECK (endsWith (abcdef, "def"));
CHECK (endsWith (abcdef, "ef"));
CHECK (endsWith (abcdef, "f"));
CHECK (endsWith (abcdef, ""));
CHECK (endsWith ("abcdef", "abcdef")); CHECK (startsWith (string{}, ""));
CHECK (endsWith ("abcdef", "bcdef")); CHECK (endsWith (string{}, ""));
CHECK (endsWith ("abcdef", "cdef"));
CHECK (endsWith ("abcdef", "def"));
CHECK (endsWith ("abcdef", "ef"));
CHECK (endsWith ("abcdef", "f"));
CHECK (endsWith ("abcdef", ""));
CHECK (endsWith ("", ""));
CHECK (not endsWith ("abc", " abc")); CHECK (not startsWith (string{"abc"}, "abcd"));
CHECK (not endsWith ("a", "ä")); CHECK (not startsWith (string{"a"}, "ä"));
CHECK (not endsWith ("ä", "a")); CHECK (not startsWith (string{"ä"}, "a"));
CHECK (not endsWith (string{"abc"}, " abc"));
CHECK (not endsWith (string{"a"}, "ä"));
CHECK (not endsWith (string{"ä"}, "a"));
string abc{"abcdef"}; string abc{"abcdef"};
removePrefix(abc, "ab"); removePrefix(abc, "ab");

View file

@ -52,7 +52,6 @@ namespace test{
using lib::test::randStr; using lib::test::randStr;
using lib::test::randTime; using lib::test::randTime;
using util::isnil; using util::isnil;
using util::cStr;
using std::make_pair; using std::make_pair;
using std::string; using std::string;
using std::list; using std::list;

View file

@ -43,7 +43,6 @@
namespace lib { namespace lib {
namespace test{ namespace test{
using util::cStr;
using util::for_each; using util::for_each;
using std::bind; using std::bind;
using std::placeholders::_1; using std::placeholders::_1;