用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

195 lines
5.0 KiB

10 months ago
/*****************************************************************************
* Copyright [2019]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*****************************************************************************/
#ifndef CPPSRC_STARQUANT_COMMON_UTIL_H_
#define CPPSRC_STARQUANT_COMMON_UTIL_H_
#include <inttypes.h>
#include <sstream>
#include <iterator>
#include <atomic>
#include <chrono> // for msleep
#include <thread> // for msleep
#include <ctime>
#include <mutex>
#include <set>
#include <vector>
#include <string>
#include <boost/date_time/posix_time/ptime.hpp>
#include <boost/date_time/local_time/local_time_types.hpp>
#include <boost/date_time/local_time/local_time_io.hpp>
using std::string;
using std::vector;
using std::pair;
using std::mutex;
using std::set;
using std::locale;
using boost::posix_time::ptime;
namespace StarQuant {
// macros
#define PRINT_SHUTDOWN_MESSAGE \
printf("\n Thank you for using Star Quant. Goodbye! \n");
#if defined(_WIN32) || defined(_WIN64)
#include <Windows.h>
#elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__))
#include <unistd.h> /* POSIX flags */
#include <time.h> /* clock_gettime(), time() */
#include <sys/time.h> /* gethrtime(), gettimeofday() */
#if defined(__MACH__) && defined(__APPLE__)
#include <mach/mach.h>
#include <mach/mach_time.h>
#endif
#else
#error "Unable to define getRealTime( ) for an unknown OS."
#endif
#define __MILLI_MULTIPLE__ 1000
#define __MICRO_MULTIPLE__ 1000000
#define __NANOO_MULTIPLE__ 1000000000
#ifdef __linux__
#define LOCALTIME_S(x, y) localtime_r(y, x)
#else
#define LOCALTIME_S(x, y) localtime_s(x, y)
#endif
#define DATE_FORMAT "%Y-%m-%d"
#define DATE_FORMAT_COMPACT "%Y%m%d"
#define DATE_FORMAT_CLEAN "%4d-%02d-%02d"
#define DATE_TIME_FORMAT "%Y-%m-%d %H:%M:%S"
#define DATE_TIME_FORMAT_CLEAN "%4d-%02d-%02d %02d:%02d:%02d"
#define TIMEZONE_STRING(s) #s
#define NYC_TZ_OFFSET -04
#define NYC_TZ_STR "UTC" TIMEZONE_STRING(NYC_TZ_OFFSET) ":00:00"
#define EPSILON (1e-6)
#define DOUBLEMAX (1e16) // 一亿亿, 2018年A股总市值不到50万亿
// console ,control related
// std::atomic<bool>* setconsolecontrolhandler(void);
// int32_t check_gshutdown(bool force = true);
// except signal
#include <setjmp.h>
#include <string.h>
struct Except_frame {
jmp_buf env;
int32_t flag;
void clear() {
flag = 0;
bzero(env, sizeof(env));
}
bool isDef() {
return flag;
}
Except_frame() {
clear();
}
};
void errorDump();
void recvSignal(int32_t sig);
void ConsoleControlHandler(int32_t sig);
// string related
vector<string> stringsplit(const string &s, char delim);
bool startwith(const string&, const string&);
bool endwith(const std::string &str, const std::string &suffix);
string extractExchangeID(const std::string& fullsym);
string UTF8ToGBK(const std::string & strUTF8);
string GBKToUTF8(const std::string & strGBK);
// numerical
double rounded(double x, int32_t n = 3);
inline bool is_greater(double x, double y) {
return std::isgreater(x - y, EPSILON);
}
inline bool is_less(double x, double y) {
return std::isless(x - y, EPSILON * -1);
}
inline bool is_equal(double x, double y) {
return std::abs(x - y) <= EPSILON * std::abs(x);
}
inline bool is_greater_equal(double x, double y) {
return is_greater(x, y) || is_equal(x, y);
}
inline bool is_less_equal(double x, double y) {
return is_less(x, y) || is_equal(x, y);
}
inline bool is_zero(double x) {
return is_equal(x, 0.0);
}
inline bool is_too_large(double x) {
return is_greater(x, DOUBLEMAX);
}
// time related
uint64_t getMicroTime();
int32_t getMilliSeconds();
string ymd();
string ymdcompact();
string ymdhms();
string ymdhmsf();
string ymdhmsf6();
string hmsf();
int32_t hmsf2inttime(string hmsf);
void msleep(uint64_t _ms);
string nowMS();
string ptime2str(const ptime& pt);
time_t str2time_t(const string& s);
string time_t2str(time_t tt);
time_t ptime2time(ptime t);
int32_t tointdate();
int32_t tointtime();
int32_t tointdate(time_t time);
int32_t tointtime(time_t time);
int32_t inttimetointtimespan(int32_t time); // convert to # of seconds
int32_t inttimespantointtime(int32_t timespan); // # of seconds to int32_t time
int32_t inttimeadd(int32_t firsttime, int32_t timespaninseconds); // in seconds
int32_t inttimediff(int32_t firsttime, int32_t latertime); // in seconds
int64_t string2unixtimems(const string& s);
} // namespace StarQuant
#endif // CPPSRC_STARQUANT_COMMON_UTIL_H_