35 #define secured_sprintf sprintf_s
37 #define secured_sprintf snprintf
38 #endif // defined( _MSC_VER )
59 inline MessageStream(std::ostream & out,
const char * prefix);
61 template <
typename T>
inline MessageStream operator<<(
const T & v);
63 inline MessageStream operator<<(std::ostream & (*fun)(std::ostream &));
74 MessageStream::MessageStream(std::ostream & out,
const char * prefix) : _out(out), _prefix(prefix) {}
76 template <
typename T> MessageStream MessageStream::operator<<(
const T & v)
83 return MessageStream(_out,
nullptr);
86 MessageStream MessageStream::operator<<(std::ostream & (*fun)(std::ostream &))
89 _out << _prefix << fun;
93 return MessageStream(_out,
nullptr);
96 inline void secured_strncpy(
char * dst,
const char * src,
size_t count);
98 inline void secured_ctime(
char * str,
const time_t * t,
size_t count);
100 bool base64encode(std::istream & in, std::ostream &,
int linesize = 80);
102 bool stringEndsWith(
const char * str,
const char * end, CaseSensitivity sensitivity = CaseSensitive);
104 void flushFile(
const char * filename, std::ostream & out);
106 void getEPSBoundingBox(
const char * filename, Rect & rect);
108 bool canCreateFile(
const char * filename);
110 bool canReadFile(
const char * filename);
112 const char * temporaryFilename(
const char * extension);
114 void initBoardRand(
unsigned long seed);
116 unsigned int boardRand();
118 double boardRandDouble();
120 double boardRandDouble(
double min,
double max);
122 inline bool almostEqual(
const double & a,
const double & b);
124 inline double mid(
const double & a,
const double & b,
const double & time)
126 return a + time * (b - a);
129 template <
typename T>
inline void unused(
const T &, ...) {}
133 void secured_strncpy(
char * dst,
const char * src,
size_t count)
135 #if defined(_MSC_VER)
136 strncpy_s(dst, count, src, _TRUNCATE);
138 strncpy(dst, src, count - 1);
139 #endif // defined( _MSC_VER )
142 void secured_ctime(
char * str,
const time_t * t,
size_t count)
144 #if defined(_MSC_VER)
145 ctime_s(str, count, t);
147 strncpy(str, ctime(t), count - 1);
148 #endif // defined( _MSC_VER )
151 inline bool almostEqual(
const double & a,
const double & b)
153 const double nothing = 1e-10;
154 return a > b ? ((a - b) < nothing) : (a < b) ? ((b - a) < nothing) : true;
157 template <
typename T>
void clamp(T & value,
const T & min,
const T & max)
169 template <
typename T>
inline T square(
const T & t)
174 bool solveQuadratic(
double a,
double b,
double c,
double & x1,
double & x2);
176 inline double rad2deg(
double angle)
178 return (angle / M_PI) * 180;
181 inline double deg2rad(
double angle)
183 return (angle / 180) * M_PI;