namespace Utils { std::string GetMimeType(std::string url); std::string ParseChallenge(std::string data); void OutputDebugLastError(); bool IsWineEnvironment(); template void Merge(std::vector* target, T* source, size_t length) { if (source) { for (size_t i = 0; i < length; ++i) { target->push_back(source[i]); } } } template void Merge(std::vector* target, std::vector source) { for (auto &entry : source) { target->push_back(entry); } } template using Slot = std::function; template class Signal { public: void connect(Slot slot) { slots.push_back(slot); } void clear() { slots.clear(); } template void operator()(Args&&... args) const { for (auto& slot : slots) { slot(std::forward(args)...); } } private: std::vector> slots; }; template class Value { public: Value() : hasValue(false) {} Value(T _value) { this->set(_value); } void set(T _value) { this->value = _value; this->hasValue = true; } bool isValid() { return this->hasValue; } T get() { return this->value; } private: bool hasValue; T value; }; }