6 #define forever for(;;)
23 typedef __int64
int64;
24 #elif defined(GLib_GLIBC)
25 typedef int64_t
int64;
34 typedef unsigned __int64
uint64;
35 #elif defined(GLib_GLIBC)
41 #if (!defined(__ssize_t_defined) && !defined(GLib_MACOSX))
45 #if defined(GLib_UNIX)
46 #define _isnan(x) isnan(x)
47 #if defined(GLib_MACOSX)
48 #define _finite(x) isfinite(x)
50 #define _finite(x) finite(x)
54 #if defined(GLib_WIN32)
55 #define _vsnprintf vsnprintf
59 #define TSizeMx SIZE_MAX
67 void WrNotify(
const char* CaptionCStr,
const char* NotifyCStr);
71 WrNotify(
"Information", NotifyCStr);}
81 #if defined (GLib_WIN)
82 #define snprintf _snprintf
83 #define vsnprintf _vsnprintf
85 #pragma warning(disable: 4786)
92 #pragma warning(disable: 4996)
95 #if defined (GLib_GCC)
101 #if defined(_CONSOLE)||defined(__CONSOLE__)
106 #if defined(GLib_Console) && (! (defined(__CONSOLE__)||defined(_CONSOLE)))
107 #define GLib_CreateConsole
112 #define ClassT(TNm) \
115 #define ClassTV(TNm, TNmV) \
117 typedef TVec<TNm> TNmV; \
120 #define ClassTVQ(TNm, TNmV, TNmQ) \
122 typedef TVec<TNm> TNmV; \
123 typedef TQQueue<TNm> TNmQ; \
126 #define ClassTP(TNm, PNm) \
128 typedef TPt<TNm> PNm; \
133 friend class TPt<TNm>;
135 #define ClassHdTP(TNm, PNm) \
137 typedef TPt<TNm> PNm;
139 #define ClassTPE(TNm, PNm, ENm) \
141 typedef TPt<TNm> PNm; \
142 class TNm: public ENm{ \
146 friend class TPt<TNm>;
148 #define ClassTPEE(TNm, PNm, ENm1, ENm2) \
150 typedef TPt<TNm> PNm; \
151 class TNm: public ENm1, public ENm2{ \
155 friend class TPt<TNm>;
157 #define ClassTE(TNm, ENm) \
159 class TNm: public ENm{ \
162 #define ClassTPV(TNm, PNm, TNmV) \
164 typedef TPt<TNm> PNm; \
165 typedef TVec<PNm> TNmV; \
170 friend class TPt<TNm>;
172 #define ClassHdTPV(TNm, PNm, TNmV) \
174 typedef TPt<TNm> PNm; \
175 typedef TVec<PNm> TNmV;
177 #define ClassTPVL(TNm, PNm, TNmV, TNmL, TNmLN) \
179 typedef TPt<TNm> PNm; \
180 typedef TVec<PNm> TNmV; \
181 typedef TLst<PNm> TNmL; \
182 typedef TLstNd<PNm>* TNmLN; \
187 friend class TPt<TNm>;
196 template <
class TRec>
class TPt;
203 #define UndefDefaultCopyAssign(TNm) \
207 TNm& operator=(const TNm&)
209 #define UndefCopyAssign(TNm) \
212 TNm& operator=(const TNm&)
214 #define UndefCopy(TNm) \
218 #define UndefAssign(TNm) \
220 TNm& operator=(const TNm&)
235 const char* MsgStr,
const char* ReasonStr,
236 const char* CondStr,
const char* FNm,
const int& LnN);
238 #define Fail ExeStop(NULL, NULL, "Fail", __FILE__, __LINE__)
240 #define FailR(Reason) ExeStop((Reason), NULL, "Fail", __FILE__, __LINE__)
241 #define FailRA(Reason, ArgStr) \
242 ExeStop((TStr(Reason)+" ("+ArgStr+")").CStr(), NULL, "Fail", __FILE__, __LINE__)
244 #define EFail TExcept::ThrowFull("", TStr("[")+ TStr(__FILE__) + " line " + TInt::GetStr(__LINE__) + "]")
246 #define EFailR(Reason) TExcept::ThrowFull(Reason, TStr("[")+TStr(__FILE__)+" line "+TInt::GetStr(__LINE__)+"]")
251 #define Assert(Cond) \
252 ((Cond) ? static_cast<void>(0) : ExeStop(NULL, NULL, #Cond, __FILE__, __LINE__))
256 #define AssertR(Cond, Reason)
258 #define AssertR(Cond, Reason) ((Cond) ? static_cast<void>(0) : \
259 ExeStop(NULL, TStr(Reason).CStr(), #Cond, __FILE__, __LINE__))
262 #define IAssert(Cond) \
263 ((Cond) ? static_cast<void>(0) : ExeStop(NULL, NULL, #Cond, __FILE__, __LINE__))
265 #define IAssertR(Cond, Reason) \
266 ((Cond) ? static_cast<void>(0) : ExeStop(NULL, TStr(Reason).CStr(), #Cond, __FILE__, __LINE__))
268 #define WAssert(Cond, MsgCStr) \
269 ((Cond) ? static_cast<void>(0) : WarnNotify(MsgCStr))
271 #define SAssert(Cond) \
272 ((Cond) ? static_cast<void>(0) : ExeStop(TSysStr::GetLastMsgCStr(), NULL, #Cond, __FILE__, __LINE__))
274 #define FAssert(Cond, MsgCStr) \
275 ((Cond) ? static_cast<void>(0) : ExeStop(TStr(MsgCStr).CStr(), NULL, NULL, __FILE__, __LINE__))
277 #define FSAssert(Cond) \
278 ((Cond) ? static_cast<void>(0) : ExeStop(TSysStr::GetLastMsgCStr(), NULL, NULL, __FILE__, __LINE__))
280 #define EAssert(Cond) \
281 ((Cond) ? static_cast<void>(0) : TExcept::ThrowFull(#Cond, TStr(__FILE__) + " line " + TInt::GetStr(__LINE__) +": "+ TStr(#Cond)))
283 #define EAssertR(Cond, MsgStr) \
284 ((Cond) ? static_cast<void>(0) : TExcept::ThrowFull(MsgStr, TStr(__FILE__)+" line "+TInt::GetStr(__LINE__)+": "+TStr(#Cond)))
286 #define EAssertRA(Cond, MsgStr, ArgStr) \
287 ((Cond) ? static_cast<void>(0) : TExcept::Throw(MsgStr, ArgStr))
289 #define EAssertRAA(Cond, MsgStr, ArgStr1, ArgStr2) \
290 ((Cond) ? static_cast<void>(0) : TExcept::Throw(MsgStr, ArgStr1, ArgStr2))
292 #define ESAssert(Cond) \
293 ((Cond) ? static_cast<void>(0) : TExcept::Throw(TSysStr::GetLastMsgCStr(), \
294 TStr(__FILE__) + " line " + TInt::GetStr(__LINE__) +": "+ TStr(#Cond)))
302 #define CAssert(Cond) \
307 template <
class TRec>
309 template <
class TRec>
312 #define XLoadHd(Nm) \
313 {TStr TypeNm=TXmlObjSer::GetTagNm(TStr(typeid(*this).name())); \
314 TXmlObjSer::AssertXmlHd(XmlTok, Nm, TypeNm);}
316 Nm.LoadXml(XmlTok->GetTagTok(#Nm), #Nm);
318 #define XSaveHd(Nm) \
319 TStr _TypeNm=TXmlObjSer::GetTagNm(TStr(typeid(*this).name())); \
320 TXmlObjSerTagNm XmlObjSerTagNm(SOut, false, Nm, _TypeNm);
321 #define XSaveHdArg(Nm, ArgNm, ArgVal) \
322 TStr _TypeNm=TXmlObjSer::GetTagNm(TStr(typeid(*this).name())); \
323 TXmlObjSerTagNm XmlObjSerTagNm(SOut, false, Nm, _TypeNm, ArgNm, ArgVal);
324 #define XSaveBETag(Nm) \
325 TStr _TypeNm=TXmlObjSer::GetTagNm(TStr(typeid(*this).name())); \
326 TXmlObjSerTagNm XmlObjSerTagNm(SOut, true, Nm, _TypeNm);
327 #define XSaveBETagArg(Nm, ArgNm, ArgVal) \
328 TStr _TypeNm=TXmlObjSer::GetTagNm(TStr(typeid(*this).name())); \
329 TXmlObjSerTagNm XmlObjSerTagNm(SOut, true, Nm, _TypeNm, ArgNm, ArgVal);
330 #define XSaveBETagArg4(Nm, ArgNm1, ArgVal1, ArgNm2, ArgVal2, ArgNm3, ArgVal3, ArgNm4, ArgVal4) \
331 TStr _TypeNm=TXmlObjSer::GetTagNm(TStr(typeid(*this).name())); \
332 TXmlObjSerTagNm XmlObjSerTagNm(SOut, true, Nm, _TypeNm, ArgNm1, ArgVal1, ArgNm2, ArgVal2, ArgNm3, ArgVal3, ArgNm4, ArgVal4);
334 Nm.SaveXml(SOut, #Nm)
335 #define XSaveToFile(Nm, FNm) \
336 {TFOut SOut(FNm); Nm.SaveXml(SOut, #Nm);}
346 #define MIN(a,b) ((a)<(b)?(a):(b))
350 #define MAX(a,b) ((a)>(b)?(a):(b))
371 int Cmp(
const T& d1,
const T& d2)
const {
372 if (d1<d2){
return -1;}
373 else if (d2<d1){
return 1;}
387 bool operator() (
const T& x,
const T& y)
const {
return x>y; }
388 int Cmp(
const T& d1,
const T& d2)
const {
389 if (d1<d2){
return 1;}
390 else if (d2<d1){
return -1;}
405 if (x < y){
return -1;}
406 else if (x > y){
return 1;}
413 template <
class TRec>
414 bool operator!=(
const TRec& Rec1,
const TRec& Rec2){
return !(Rec1==Rec2);}
416 template <
class TRec>
417 bool operator>(
const TRec& Rec1,
const TRec& Rec2){
return Rec2<Rec1;}
419 template <
class TRec>
420 bool operator<=(
const TRec& Rec1,
const TRec& Rec2){
return !(Rec2<Rec1);}
422 template <
class TRec>
423 bool operator>=(
const TRec& Rec1,
const TRec& Rec2){
return !(Rec1<Rec2);}
425 template <
class TRec>
426 bool Cmp(
const int& RelOp,
const TRec& Rec1,
const TRec& Rec2){
428 case roLs:
return Rec1<Rec2;
429 case roLEq:
return Rec1<=Rec2;
430 case roEq:
return Rec1==Rec2;
431 case roNEq:
return Rec1!=Rec2;
432 case roGEq:
return Rec1>=Rec2;
433 case roGt:
return Rec1>Rec2;
434 default:
Fail;
return false;
452 bool NoRef()
const {
return Refs==0;}
458 template <
class TRec>
472 if (Addr->CRef.NoRef()){
delete Addr;}
482 explicit TPt(
TSIn& SIn,
void* ThisPt);
496 Assert(Addr!=NULL);
return Addr[RecN];}
501 bool Empty()
const {
return Addr==NULL;}
504 if (Addr==NULL){
return -1;}
else {
return Addr->CRef.GetRefs();}}
519 Bf=
new char[0+1]; Bf[0]=0;}
521 Bf=
new char[strlen(SStr.
Bf)+1]; strcpy(Bf, SStr.
Bf);}
523 Bf=
new char[strlen(_Bf)+1]; strcpy(Bf, _Bf);}
528 delete[]
Bf; Bf=
new char[strlen(SStr.
Bf)+1]; strcpy(Bf, SStr.
Bf);}
533 bool Empty()
const {
return Bf[0]==0;}
534 int Len()
const {
return int(strlen(Bf));}
549 Val.Pt=0;
Val.UInt32.Ms=0;
Val.UInt32.Ls=0;}
567 template <
class TRec>
568 void Swap(TRec& Rec1, TRec& Rec2){
569 TRec Rec=Rec1; Rec1=Rec2; Rec2=Rec;
579 static inline int GetHashCd(
const int hc1,
const int hc2) {
580 unsigned long long sum = ((
unsigned long long) hc1) + ((
unsigned long long) hc2);
581 unsigned long long c = ((sum * (sum + 1)) >> 1) + hc1;
582 return (
int) (c % 0x7fffffffULL); }
590 static inline int GetHashCd(
const int hc1,
const int hc2) {
591 unsigned long long sum = ((
unsigned long long) hc1) + ((
unsigned long long) hc2);
592 unsigned long long c = ((sum * (sum + 1)) >> 1) + hc1;
593 unsigned int R = (
unsigned int) (c >> 31), Q = (
unsigned int) (c & 0x7fffffffULL);
594 if ((R & 0x80000000U) != 0) R -= 0x7fffffffU;
595 unsigned int RQ = R + Q;
596 if (RQ < 0x7fffffffU)
return (
int) RQ;
598 return (RQ == 0x7fffffffU) ? 0 : (int) RQ; }
602 #if (defined(GLib_64Bit)) && ! (defined(DEBUG) || defined(_DEBUG))
void PutLsUInt32(const uint &Ls)
bool(* TOnExeStopF)(char *MsgCStr)
UndefCopyAssign(TConv_Pt64Ints32)
void XLoadFromFile(const TStr &FNm, const TStr &Nm, TRec &Rec)
const char * CStr() const
TPairHashImpl2 TPairHashImpl
static int GetHashCd(const int hc1, const int hc2)
bool operator!=(const TPt &Pt) const
#define ClassHdTP(TNm, PNm)
TPt & operator=(const TPt &Pt)
static void PutOnExeStopF(TOnExeStopF _OnExeStopF)
void ExeStop(const char *MsgStr, const char *ReasonStr, const char *CondStr, const char *FNm, const int &LnN)
void SaveXml(TSOut &SOut, const TStr &Nm) const
TRec * operator->() const
bool operator()(const T &x, const T &y) const
bool operator()(const T &x, const T &y) const
int Cmp(const T &d1, const T &d2) const
bool IsXLoadFromFileOk(const TStr &FNm, const TStr &Nm, TRec &Rec, TStr &MsgStr)
void ErrNotify(const char *NotifyCStr)
bool operator!=(const TRec &Rec1, const TRec &Rec2)
void SaveToErrLog(const char *MsgCStr)
void WarnNotify(const char *NotifyCStr)
TConv_Pt64Ints32(const uint &Ms, const uint &Ls)
struct TConv_Pt64Ints32::@1::@2 UInt32
unsigned long long uint64
TSStr & operator=(const TSStr &SStr)
void PutMsUInt32(const uint &Ms)
TRec & operator[](const int &RecN) const
bool operator>=(const TRec &Rec1, const TRec &Rec2)
TRec * operator()() const
static int GetHashCd(const int hc1, const int hc2)
bool operator==(const TPt &Pt) const
static TOnExeStopF OnExeStopF
bool operator<=(const TRec &Rec1, const TRec &Rec2)
void InfoNotify(const char *NotifyCStr)
static bool IsOnExeStopF()
bool operator()(const T &x, const T &y) const
TCRef & operator=(const TCRef &)
Computes a hash code from a pair of hash codes.
void Save(TSOut &SOut) const
TConv_Pt64Ints32(void *Pt)
void StatNotify(const char *NotifyCStr)
bool Cmp(const int &RelOp, const TRec &Rec1, const TRec &Rec2)
bool operator<(const TPt &Pt) const
void WrNotify(const char *CaptionCStr, const char *NotifyCStr)
bool operator()(const T &x, const T &y) const
int operator()(const T &x, const T &y) const
bool operator()(const T &x, const T &y) const
void PutUInt64(const uint64 &_UInt64)
Computes a hash code from a pair of hash codes.
void LoadXml(const TPt< TXmlTok > &XmlTok, const TStr &Nm)
static TOnExeStopF GetOnExeStopF()
int GetPrimHashCd() const
union TConv_Pt64Ints32::@1 Val
bool operator()(const T &x, const T &y) const
void Swap(TRec &Rec1, TRec &Rec2)
int Cmp(const T &d1, const T &d2) const
bool operator>(const TRec &Rec1, const TRec &Rec2)