#ifndef UTIL_H_ #define UTIL_H_ #include "Common.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace Util { std::string Date(const char* format, bool utc = false); uint32 Date(bool utc = true); std::string FS(const char *str, ...); std::vector Explode(std::string input, std::string delim); template class SynchronisedQueue { public: SynchronisedQueue() : __endQueue(false) {} void Enqueue(const T& data) { boost::unique_lock lock(__mutex); __queue.push(data); __cond.notify_one(); } T Dequeue() { boost::unique_lock lock(__mutex); while (__queue.empty() && !__endQueue) __cond.wait(lock); if (__endQueue) return NULL; T result = __queue.front(); __queue.pop(); return result; } void Stop() { __endQueue = true; __cond.notify_all(); } uint32_t Size() { boost::unique_lock lock(__mutex); return __queue.size(); } private: bool __endQueue; std::queue __queue; boost::mutex __mutex; boost::condition_variable __cond; }; class GenericWorker { public: ~GenericWorker() { delete _thread; } void Activate() { _thread = new boost::thread(boost::bind(&GenericWorker::Work, this)); } private: virtual void Work() = 0; boost::thread* _thread; }; // Base64 encode/decode functions by http://stackoverflow.com/users/1132850/piquer typedef boost::archive::iterators::insert_linebreaks < boost::archive::iterators::base64_from_binary < boost::archive::iterators::transform_width >, 72 > it_base64_lb_t; typedef boost::archive::iterators::base64_from_binary < boost::archive::iterators::transform_width > it_base64_t; typedef boost::archive::iterators::transform_width < boost::archive::iterators::binary_from_base64, 8, 6 > it_binary_t; std::string ToBase64(std::string input, bool linebreaks = true); std::string FromBase64(std::string input); uint8 ASCIIToHex(char ch); std::vector ASCIIToBin(std::string str); std::string BinToASCII(std::vector data); std::vector Reverse(std::vector data); std::vector Join(std::vector v1, std::vector v2); } #endif