git-svn-id: svn://db.shs.com.ru/pip@597 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2018-02-12 12:20:15 +00:00
parent da48575caa
commit 6c51e8edf3
43 changed files with 204 additions and 164 deletions

View File

@@ -104,6 +104,11 @@
# pragma comment(lib, "Ws2_32.lib")
# pragma comment(lib, "Iphlpapi.lib")
# pragma comment(lib, "Psapi.lib")
# ifdef ARCH_BITS_32
# define _X86_
# else
# define _IA64_
# endif
# else
# define SHUT_RDWR SD_BOTH
# endif
@@ -258,6 +263,22 @@ template<typename T> inline void piSwapBinary(T & f, T & s) {
}
}
template<> inline void piSwapBinary(const void *& f, const void *& s) {
static size_t j = (sizeof(void *) / sizeof(size_t)), bs = j * sizeof(size_t), bf = sizeof(void *);
size_t i = 0;
void * pf = const_cast<void*>(f), * ps = const_cast<void*>(s);
for (i = 0; i < j; ++i) {
((size_t*)(&pf))[i] ^= ((size_t*)(&ps))[i];
((size_t*)(&ps))[i] ^= ((size_t*)(&pf))[i];
((size_t*)(&pf))[i] ^= ((size_t*)(&ps))[i];
}
for (i = bs; i < bf; ++i) {
((uchar*)(&pf))[i] ^= ((uchar*)(&ps))[i];
((uchar*)(&ps))[i] ^= ((uchar*)(&pf))[i];
((uchar*)(&pf))[i] ^= ((uchar*)(&ps))[i];
}
}
/*! \brief Function for compare two values without "=" by raw content
* \details Example:\n \snippet piincludes.cpp compareBinary */
inline bool piCompareBinary(const void * f, const void * s, size_t size) {

View File

@@ -26,7 +26,7 @@
#include "pibytearray.h"
class PIChunkStream
class PIP_EXPORT PIChunkStream
{
public:

View File

@@ -44,16 +44,16 @@ extern lconv * currentLocale;
/*! \fn errorString()
* \brief Return readable error description in format "code <number> - <description>" */
PIString errorString();
PIP_EXPORT PIString errorString();
void errorClear();
PIP_EXPORT void errorClear();
void piqsort(void* base, size_t num, size_t size, int (*compar)(const void*,const void*));
PIP_EXPORT void piqsort(void* base, size_t num, size_t size, int (*compar)(const void*,const void*));
void randomize();
int randomi();
PIP_EXPORT void randomize();
PIP_EXPORT int randomi();
/// Return readable version of PIP
PIString PIPVersion();
PIP_EXPORT PIString PIPVersion();
#endif // PIINCLUDES_H

View File

@@ -25,8 +25,8 @@
# include <stdarg.h>
# include <windef.h>
# include <winbase.h>
typedef void(*PINtQueryTimerResolution)(PULONG, PULONG, PULONG);
typedef void(*PINtSetTimerResolution)(ULONG, BOOLEAN, PULONG);
typedef LONG(NTAPI*PINtQueryTimerResolution)(PULONG, PULONG, PULONG);
typedef LONG(NTAPI*PINtSetTimerResolution)(ULONG, BOOLEAN, PULONG);
#endif
#ifdef CC_GCC
# include <unistd.h>

View File

@@ -34,10 +34,12 @@
void __PISetTimerResolution() {
if (setTimerResolutionAddr == NULL || getTimerResolutionAddr == NULL)
return;
ULONG max(0), min(0), cur(0);
getTimerResolutionAddr(&max, &min, &cur);
//printf("getTimerResolution %lu %lu %lu\n", min, max, cur);
setTimerResolutionAddr(min, TRUE, &cur);
ULONG _max(0), _min(0), _cur(0);
//printf("getTimerResolution ...\n");
LONG q = getTimerResolutionAddr(&_max, &_min, &_cur);
//printf("getTimerResolution %d %lu %lu %lu\n", q, _min, _max, _cur);
if (q == 0)
setTimerResolutionAddr(_min, TRUE, &_cur);
//printf("setTimerResolution %lu\n", cur);
}
#else
@@ -149,8 +151,8 @@ PIInit::PIInit() {
if (PRIVATE->ntlib) {
getTimerResolutionAddr = (PINtQueryTimerResolution)GetProcAddress(PRIVATE->ntlib, "NtQueryTimerResolution");
setTimerResolutionAddr = (PINtSetTimerResolution)GetProcAddress(PRIVATE->ntlib, "NtSetTimerResolution");
__PISetTimerResolution();
}
__PISetTimerResolution();
/*if (setTimerResolution) setTimerResolutionAddr(1, TRUE, &(PRIVATE->prev_res));*/
# endif
//piDebug = true;

View File

@@ -30,7 +30,7 @@ class PIFile;
class PIStringList;
class __PIInit_Initializer__ {
class PIP_EXPORT __PIInit_Initializer__ {
public:
__PIInit_Initializer__();
~__PIInit_Initializer__();
@@ -39,7 +39,7 @@ public:
};
class PIInit {
class PIP_EXPORT PIInit {
friend class __PIInit_Initializer__;
friend class PIFile;
public:

View File

@@ -185,7 +185,11 @@
#define _PI_STR(x) #x
#define _PI_SSTR(x) _PI_STR(x)
#define LOCATION __FILE__ ":" _PI_SSTR(__LINE__)
#define __PTYPE(t) typename __PIVariantTypeInfo__<t>::PureType
#ifdef CC_GCC
# define __PTYPE(t) typename __PIVariantTypeInfo__<t>::PureType
#else
# define __PTYPE(t) __PIVariantTypeInfo__<t>::PureType
#endif
#define __VVALUE(t, v) v.value< __PTYPE(t) >()

View File

@@ -731,7 +731,7 @@ private:
//! \relatesalso PIString \relatesalso PICout \brief Output operator to PICout
PICout operator <<(PICout s, const PIString & v);
PIP_EXPORT PICout operator <<(PICout s, const PIString & v);
//! \relatesalso PIString \relatesalso PIByteArray \brief Output operator to PIByteArray

View File

@@ -31,7 +31,7 @@
#endif
//! \brief Sleep for "msecs" milliseconds
void msleep(int msecs);
PIP_EXPORT void msleep(int msecs);
/*! \brief Precise sleep for "usecs" microseconds
* \details This function consider \c "usleep" offset
@@ -39,7 +39,7 @@ void msleep(int msecs);
* \a pip_sys_test program. If there is correct
* offset value in system config, this function
* wait \b exactly "usecs" microseconds. */
void piUSleep(int usecs); // on !Windows consider constant "usleep" offset
PIP_EXPORT void piUSleep(int usecs); // on !Windows consider constant "usleep" offset
/*! \brief Precise sleep for "msecs" milliseconds
* \details This function exec \a piUSleep (msecs * 1000). */
@@ -202,7 +202,7 @@ inline PIByteArray & operator <<(PIByteArray & s, const PITime & v) {s << v.hour
inline PIByteArray & operator >>(PIByteArray & s, PITime & v) {s >> v.hours >> v.minutes >> v.seconds >> v.milliseconds; return s;}
//! \relatesalso PICout \relatesalso PICout \brief Output operator to PICout
PICout operator <<(PICout s, const PITime & v);
PIP_EXPORT PICout operator <<(PICout s, const PITime & v);
@@ -226,7 +226,7 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIDate & v) {s << v.year
inline PIByteArray & operator >>(PIByteArray & s, PIDate & v) {s >> v.year >> v.month >> v.day; return s;}
//! \relatesalso PICout \relatesalso PICout \brief Output operator to PICout
PICout operator <<(PICout s, const PIDate & v);
PIP_EXPORT PICout operator <<(PICout s, const PIDate & v);
@@ -271,12 +271,12 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIDateTime & v) {s << v.
inline PIByteArray & operator >>(PIByteArray & s, PIDateTime & v) {s >> v.year >> v.month >> v.day >> v.hours >> v.minutes >> v.seconds >> v.milliseconds; return s;}
//! \relatesalso PICout \relatesalso PICout \brief Output operator to PICout
PICout operator <<(PICout s, const PIDateTime & v);
PIP_EXPORT PICout operator <<(PICout s, const PIDateTime & v);
class PITimeMeasurer {
class PIP_EXPORT PITimeMeasurer {
public:
PITimeMeasurer();

View File

@@ -37,7 +37,7 @@
template<typename T>
class __PIVariantFunctions__ {
class PIP_EXPORT __PIVariantFunctions__ {
public:
static PIString typeNameHelper() {return PIStringAscii("");}
@@ -46,7 +46,7 @@ public:
template<typename C> static C castVariant(const T & v) {return C();}
};
struct __PIVariantInfo__ {
struct PIP_EXPORT __PIVariantInfo__ {
__PIVariantInfo__() {
simple = false;
}
@@ -57,7 +57,7 @@ struct __PIVariantInfo__ {
};
template<typename T>
struct __PIVariantTypeInfo__ {
struct PIP_EXPORT __PIVariantTypeInfo__ {
typedef T PureType;
typedef const T ConstPureType;
typedef T * PointerType;
@@ -84,7 +84,7 @@ struct __PIVariantTypeInfo__ {
//__TYPEINFO_SINGLE(T, const T *)
class __PIVariantInfoStorage__ {
class PIP_EXPORT __PIVariantInfoStorage__ {
public:
__PIVariantInfoStorage__() {if (!map) map = new PIMap<PIString, __PIVariantInfo__ * >();}
static __PIVariantInfoStorage__ * get() {static __PIVariantInfoStorage__ * r = new __PIVariantInfoStorage__(); return r;}
@@ -102,7 +102,7 @@ REGISTER_VARIANT_TYPEINFO(ns::classname)
#define REGISTER_VARIANT_CPP(classname) \
template <typename T> \
class __##classname##_PIVariantInitializer__ { \
class PIP_EXPORT __##classname##_PIVariantInitializer__ { \
public: \
__##classname##_PIVariantInitializer__(const PIString & name) { \
if (__PIVariantInfoStorage__::get()->map->contains(name)) \
@@ -115,7 +115,7 @@ public: \
#define REGISTER_NS_VARIANT_CPP(ns, classname) \
template <typename T> \
class __##ns##classname##_PIVariantInitializer__ { \
class PIP_EXPORT __##ns##classname##_PIVariantInitializer__ { \
public: \
__##ns##classname##_PIVariantInitializer__(const PIString & name) { \
if (__PIVariantInfoStorage__::get()->map->contains(name)) \
@@ -155,7 +155,7 @@ PIByteArray __PIVariantFunctions__<classname_from>::castHelper<classname_to>(PIB
PIByteArray ret; ret << t; \
return ret;} \
template <typename T, typename C> \
class __##classname_from##_##classname_to##_PIVariantCastInitializer__ { \
class PIP_EXPORT __##classname_from##_##classname_to##_PIVariantCastInitializer__ { \
public: \
__##classname_from##_##classname_to##_PIVariantCastInitializer__(const PIString & name, const PIString & cname) { \
__PIVariantInfo__ * vi(__PIVariantInfoStorage__::get()->map->value(name, 0)); \
@@ -206,7 +206,7 @@ class PIP_EXPORT PIVariant {
public:
//! Type of %PIVariant content
enum Type {
enum PIP_EXPORT Type {
pivInvalid /** Invalid type , default type of empty contructor */ = 0 ,
pivBool /** bool */ ,
pivChar /** char */ ,

View File

@@ -30,13 +30,13 @@
namespace PIVariantTypes {
struct Enumerator {
struct PIP_EXPORT Enumerator {
Enumerator(int v = 0, const PIString & n = PIString()): value(v), name(n) {}
int value;
PIString name;
};
struct Enum {
struct PIP_EXPORT Enum {
Enum(const PIString & n = PIString()): enum_name(n) {}
PIString toString() const {return selected;} // obsolete
int selectedValue() const;
@@ -55,7 +55,7 @@ namespace PIVariantTypes {
Enum & operator <<(const PIStringList & v);
};
struct File {
struct PIP_EXPORT File {
File(const PIString & p = PIString(), const PIString & f = PIString(), bool abs = false): file(p), filter(f), is_abs(abs) {}
PIString toString() const {return file;}
PIString file;
@@ -63,14 +63,14 @@ namespace PIVariantTypes {
bool is_abs;
};
struct Dir {
struct PIP_EXPORT Dir {
Dir(const PIString & d = PIString(), bool abs = false): dir(d), is_abs(abs) {}
PIString toString() const {return dir;}
PIString dir;
bool is_abs;
};
struct Color {
struct PIP_EXPORT Color {
Color(uint v = 0) {rgba = v;}
uint rgba;
};