23 inline static const std::string EMPTY{};
24 inline static const std::string NUL{
"<null>"};
29DXFCPP_EXPORT std::string toString(
const char *chars)
noexcept;
31DXFCPP_EXPORT std::optional<std::string> toStringOpt(
const char *chars)
noexcept;
41template <
typename T,
typename U> std::string toString(
const std::pair<T, U> &p) {
42 return "{" + toStringAny(p.first) +
", " + toStringAny(p.second) +
"}";
46template <
typename T> std::string toStringAny(T &&t) {
47 if constexpr (requires { t.toString(); }) {
49 }
else if constexpr (requires { t->toString(); }) {
51 }
else if constexpr (requires { toString(t); }) {
53 }
else if constexpr (requires { std::to_string(t); }) {
54 return std::to_string(t);
55 }
else if constexpr (requires { std::string(t); }) {
56 return std::string(t);
62namespace to_string_any {
64template <
typename T,
typename =
void>
struct HasToStringMember : std::false_type {};
66template <
typename T>
struct HasToStringMember<T,
decltype(std::declval<T>().toString(),
void())> : std::true_type {};
68template <
typename T,
typename =
void>
struct HasToStringMemberByPointer : std::false_type {};
71struct HasToStringMemberByPointer<T,
decltype(std::declval<T>()->toString(),
void())> : std::true_type {};
73template <
typename T,
typename =
void>
struct HasFreeToString : std::false_type {};
75template <
typename T>
struct HasFreeToString<T,
decltype(toString(std::declval<T>()),
void())> : std::true_type {};
77template <
typename T,
typename =
void>
struct HasStdToString : std::false_type {};
79template <
typename T>
struct HasStdToString<T,
decltype(std::to_string(std::declval<T>()),
void())> : std::true_type {};
81template <
typename T,
typename =
void>
struct IsConvertibleToString : std::false_type {};
84struct IsConvertibleToString<T,
typename std::enable_if<std::is_convertible<T, std::string>::value>::type>
91typename std::enable_if<to_string_any::detail::HasToStringMember<T>::value, std::string>::type toStringAny(T &&t) {
96typename std::enable_if<to_string_any::detail::HasToStringMemberByPointer<T>::value &&
97 !to_string_any::detail::HasToStringMember<T>::value,
100 return t->toString();
104typename std::enable_if<to_string_any::detail::HasFreeToString<T>::value &&
105 !to_string_any::detail::HasToStringMember<T>::value &&
106 !to_string_any::detail::HasToStringMemberByPointer<T>::value,
113typename std::enable_if<to_string_any::detail::HasStdToString<T>::value &&
114 !to_string_any::detail::HasToStringMember<T>::value &&
115 !to_string_any::detail::HasToStringMemberByPointer<T>::value &&
116 !to_string_any::detail::HasFreeToString<T>::value,
119 return std::to_string(t);
123typename std::enable_if<
124 to_string_any::detail::IsConvertibleToString<T>::value && !to_string_any::detail::HasToStringMember<T>::value &&
125 !to_string_any::detail::HasToStringMemberByPointer<T>::value &&
126 !to_string_any::detail::HasFreeToString<T>::value && !to_string_any::detail::HasStdToString<T>::value,
129 return std::string(t);
134typename std::enable_if<!to_string_any::detail::HasToStringMember<T>::value &&
135 !to_string_any::detail::HasToStringMemberByPointer<T>::value &&
136 !to_string_any::detail::HasFreeToString<T>::value &&
137 !to_string_any::detail::HasStdToString<T>::value &&
138 !to_string_any::detail::IsConvertibleToString<T>::value,
146
147
148
149
150
154
155
156
157
158
159DXFCPP_EXPORT std::string utf16toUtf8String(std::int16_t in)
noexcept;
162
163
164
165
166
167DXFCPP_EXPORT std::string utf16toUtf8String(
const std::u16string &in)
noexcept;
170
171
172
173
174
175DXFCPP_EXPORT std::string utf16toUtf8String(
const std::vector<std::int16_t> &in)
noexcept;
178
179
180
181
182
185DXFCPP_EXPORT std::string formatTimeStamp(std::int64_t timestamp);
187DXFCPP_EXPORT std::string formatTimeStampWithTimeZone(std::int64_t timestamp);
189DXFCPP_EXPORT std::string formatTimeStampFast(std::int64_t timestamp);
191DXFCPP_EXPORT std::string formatTimeStampWithMillis(std::int64_t timestamp);
193DXFCPP_EXPORT std::string formatTimeStampWithMillisWithTimeZone(std::int64_t timestamp);
197DXFCPP_EXPORT char *createCString(
const std::optional<std::string> &s);
199template <
typename It>
200 requires requires { std::is_same_v<std::decay_t<
decltype(It {} -> getName())>, std::string>; }
201std::string namesToString(It begin, It end) {
202 std::string result{
"["};
204 for (
auto it = begin; it != end; it++) {
205 result += String::EMPTY +
"'" + it->getName() +
"'" + (std::next(it) == end ?
"" :
", ");
211template <
typename It>
212 requires requires { std::is_same_v<std::decay_t<
decltype(It {} -> get().getName())>, std::string>; }
213std::string namesToString(It begin, It end) {
214 std::string result{
"["};
216 for (
auto it = begin; it != end; it++) {
217 result += String::EMPTY +
"'" + it->get().getName() +
"'" + (std::next(it) == end ?
"" :
", ");
223template <
typename It>
224std::string elementsToString(It begin, It end,
const std::string &prefix =
"[",
const std::string &postfix =
"[",
225 const std::string &separator =
", ") {
226 std::string result{prefix};
228 for (
auto it = begin; it != end; it++) {
229 result += String::EMPTY + toStringAny(*it) + (std::next(it) == end ?
"" : separator);
232 return result + postfix;
237inline std::string encodeChar(
char c) {
238 return encodeChar(
static_cast<std::int16_t>(
static_cast<
unsigned char>(c)));
247 explicit IsIEqual(
const std::locale &locale = std::locale()) : locale_{locale} {
250 template <
typename T,
typename U>
bool operator()(
const T &t,
const U &u)
const {
251 return std::tolower<T>(t, locale_) == std::tolower<U>(u, locale_);
257template <
typename Range1,
typename Range2,
typename Predicate>
258inline bool equals(
const Range1 &first,
const Range2 &second, Predicate cmp) {
259 auto firstIt = std::begin(first);
260 auto secondIt = std::begin(second);
262 for (; firstIt != std::end(first) && secondIt != std::end(second); ++firstIt, ++secondIt) {
263 if (!cmp(*firstIt, *secondIt)) {
268 return (secondIt == std::end(second)) && (firstIt == std::end(first));
271DXFCPP_EXPORT inline bool iEquals(
const std::string &first,
const std::string &second)
noexcept {
272 const std::locale &locale = std::locale();
274 return equals(first, second, detail::IsIEqual(locale));
277DXFCPP_EXPORT inline bool iEquals(std::string_view first, std::string_view second)
noexcept {
278 const std::locale &locale = std::locale();
280 return equals(first, second, detail::IsIEqual(locale));
283DXFCPP_EXPORT inline std::size_t icHash(
const std::string &s)
noexcept {
284 const std::locale &locale = std::locale();
285 std::string result{};
288 result += std::tolower(c, locale);
291 return std::hash<std::string>()(result);
294DXFCPP_EXPORT std::string trimStr(
const std::string &s)
noexcept;
296DXFCPP_EXPORT std::vector<std::string> splitStr(
const std::string &s,
char sep =
',')
noexcept;
298DXFCPP_EXPORT std::string joinStr(
const std::vector<std::string> &v,
const std::string &sep =
", ")
noexcept;
#define DXFCXX_DISABLE_MSC_WARNINGS_POP()
Definition Conf.hpp:22
#define DXFCPP_END_NAMESPACE
Definition Conf.hpp:70
#define DXFCPP_BEGIN_NAMESPACE
Definition Conf.hpp:67
#define DXFCXX_DISABLE_GCC_WARNINGS_PUSH(warnings)
Definition Conf.hpp:38
#define DXFCXX_DISABLE_GCC_WARNINGS_POP()
Definition Conf.hpp:40
#define DXFCXX_DISABLE_MSC_WARNINGS_PUSH(warnings)
Definition Conf.hpp:21
#define DXFCPP_EXPORT
Definition api.h:35
Base abstract class for all dxFeed C++ API entities.
Definition Entity.hpp:13
Marks all event types that can be received via dxFeed API.
Definition EventType.hpp:31
A helper class needed to construct smart pointers to objects, and does not allow explicit constructio...
Definition SharedEntity.hpp:89
static auto createShared(Args &&...args)
Creates smart pointer to object.
Definition SharedEntity.hpp:103
Base abstract "shared entity" class. Has some helpers for dynamic polymorphism.
Definition SharedEntity.hpp:21
virtual std::string toString() const
Returns a string representation of the current object.
Definition SharedEntity.hpp:78
std::shared_ptr< T > sharedAs() const noexcept
Returns a pointer to the current object wrapped in a smart pointer to type T.
Definition SharedEntity.hpp:69
std::shared_ptr< T > sharedAs() noexcept
Returns a pointer to the current object wrapped in a smart pointer to type T.
Definition SharedEntity.hpp:56
bool is() const noexcept
Checks that pointer to the current type could be converted to type T* In other words: whether type T ...
Definition SharedEntity.hpp:35
Universal functional object that allows searching std::unordered_map for string-like keys.
Definition Common.hpp:911
A simple wrapper around strings or something similar to strings to reduce the amount of code for meth...
Definition Common.hpp:794