ROOT logo
// $Id: GledTypes.h 2743 2012-04-26 19:17:02Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#ifndef GledCore_GledTypes_H
#define GledCore_GledTypes_H

#include <Rtypes.h>
#include <TObject.h>
#include <TString.h>

#include <iostream>
#include <assert.h>

#include <vector>
#include <list>
#include <set>
#include <map>

#include <memory>
#include <exception>

#include <stdarg.h>

using namespace std;

#include <gled-config.h>

// String type and collections of TStrings
typedef list<TString>			lStr_t;
typedef list<TString>::iterator		lStr_i;
typedef list<TString>::const_iterator	lStr_ci;
typedef set<TString>			sStr_t;
typedef set<TString>::iterator		sStr_i;
typedef map<TString,TString>            mStr2Str_t;
typedef map<TString,TString>::iterator  mStr2Str_i;

typedef ULong_t				TimeStamp_t;

/**************************************************************************/
// Glass typedefs
/**************************************************************************/

class ZGlass;
typedef list<ZGlass*>				lpZGlass_t;
typedef list<ZGlass*>::iterator			lpZGlass_i;
typedef list<ZGlass*>::const_iterator		lpZGlass_ci;
typedef list<ZGlass*>::reverse_iterator		lpZGlass_ri;
typedef list<ZGlass*>::const_reverse_iterator	lpZGlass_cri;
typedef list<ZGlass**>				lppZGlass_t;
typedef list<ZGlass**>::iterator		lppZGlass_i;

typedef vector<ZGlass*>				vpZGlass_t;
typedef vector<ZGlass*>::iterator		vpZGlass_i;

typedef UInt_t					ID_t;
typedef UShort_t				LID_t;
typedef UShort_t				CID_t;
typedef UShort_t				MID_t;

typedef	list<ID_t>				lID_t;
typedef	list<ID_t>::iterator			lID_i;
typedef set<ID_t>				sID_t;
typedef set<ID_t>::iterator			sID_i;

#ifndef __CINT__

typedef map<ID_t, ZGlass*>			mID2pZGlass_t;
typedef map<ID_t, ZGlass*>::iterator		mID2pZGlass_i;
typedef hash_map<ID_t, ZGlass*>			hID2pZGlass_t;
typedef hash_map<ID_t, ZGlass*>::iterator	hID2pZGlass_i;
typedef hash_map<ZGlass*, Int_t>		hpZGlass2Int_t;
typedef hash_map<ZGlass*, Int_t>::iterator	hpZGlass2Int_i;
typedef hash_map<ID_t, ID_t>			IdiOm_t;
typedef hash_map<ID_t, ID_t>::iterator		IdiOm_i;

#endif

/**************************************************************************/
// FID_t : Full libset/class ID & FMID_t: Full-method ID
/**************************************************************************/

class FID_t
{
public:
  LID_t	fLid;
  CID_t	fCid;

  FID_t(LID_t l=0, CID_t c=0) : fLid(l), fCid(c) {}
  virtual ~FID_t() {}
  bool operator==(FID_t r) const { return (fLid == r.fLid && fCid == r.fCid); }
  bool operator!=(FID_t r) const { return (fLid != r.fLid || fCid != r.fCid); }
  bool is_null()  const { return fLid == 0 && fCid == 0; }
  bool is_basic() const { return is_null() || (fLid == 1 && fCid == 1); }
  void clear() { fLid = 0; fCid = 0; }

  ClassDef(FID_t, 1);
};

namespace __gnu_cxx {
  template<>
  struct hash<FID_t>
  {
    size_t operator()(const FID_t& fid) const
    { size_t i = fid.fLid; i <<= 16; i |= fid.fCid; return i; }
  };
}

inline TBuffer &operator>>(TBuffer& b, FID_t& fid)
{ b >> fid.fLid >> fid.fCid; return b; }

inline TBuffer &operator<<(TBuffer& b, FID_t fid)
{ b << fid.fLid << fid.fCid; return b; }

class FMID_t : public FID_t
{
public:
  MID_t	fMid;

  FMID_t(LID_t l=0, CID_t c=0, MID_t m=0) : FID_t(l,c), fMid(m) {}
  virtual ~FMID_t() {}
  bool operator==(FMID_t r) { return FID_t::operator==(r) && fMid == r.fMid; }
  bool operator!=(FMID_t r) { return FID_t::operator!=(r) || fMid != r.fMid; }

  ClassDef(FMID_t, 1);
};

inline TBuffer &operator>>(TBuffer& b, FMID_t& fmid)
{ b >> (FID_t&)fmid >> fmid.fMid; return b; }

inline TBuffer &operator<<(TBuffer& b, FMID_t fmid)
{ b << (FID_t&)fmid << fmid.fMid; return b; }

/**************************************************************************/
// Defines
/**************************************************************************/

#define MAX_ID		((ID_t)(-1))
#define GLED_DEF_PORT	9061

/**************************************************************************/
// Exceptions, debug, warn, message stuff
/**************************************************************************/

class Exc_t : public std::exception, public TString
{
public:
   Exc_t() {}
   Exc_t(const TString& s) : TString(s) {}
   Exc_t(const char* s)    : TString(s) {}
   Exc_t(const std::string& s);

   virtual ~Exc_t() throw () {}

   virtual const char* what() const throw () { return Data(); }

   ClassDef(Exc_t, 1); // Exception-type thrown by Gled classes.
};

Exc_t operator+(const Exc_t &s1, const std::string& s2);
Exc_t operator+(const Exc_t &s1, const TString& s2);
Exc_t operator+(const Exc_t &s1, const char* s2);
Exc_t operator+(const Exc_t &s1,       char  c);

//==============================================================================

const char* GForm  (const char* fmt, ...);
const char* GFormVA(const char* fmt, va_list args);

TBuffer& operator<<(TBuffer& b, const string& s);
TBuffer& operator>>(TBuffer& b, string& s);

bool operator==(const TString& t, const string& s);
bool operator==(const string&  s, const TString& t);

extern int G_DEBUG;

enum InfoStream_e { ISinfo, ISmessage, ISwarning, ISerror };

const char* const ISnames[]   = { "info", "message", "warning", "error" };
const char* const ISnames3c[] = { "IBF", "MSG", "WRN", "ERR" };

void InfoStream(InfoStream_e, const char* s);
void InfoStream(InfoStream_e, const TString& s);
void InfoStream(InfoStream_e, const string& s);

#define ISinfo(_str_) { InfoStream(ISinfo, _str_); }
#define ISmess(_str_) { InfoStream(ISmessage, _str_); }
#define ISwarn(_str_) { InfoStream(ISwarning, _str_); }
#define ISerr(_str_)  { InfoStream(ISerror, _str_); }

#define D_STREAM	4
#define D_THRMUT	2

#ifdef DEBUG
#define ISdebug(A,B) 	{ if((A)<=G_DEBUG) ISinfo(B) }
#else
#define ISdebug(A,B)
#endif

#endif
 GledTypes.h:1
 GledTypes.h:2
 GledTypes.h:3
 GledTypes.h:4
 GledTypes.h:5
 GledTypes.h:6
 GledTypes.h:7
 GledTypes.h:8
 GledTypes.h:9
 GledTypes.h:10
 GledTypes.h:11
 GledTypes.h:12
 GledTypes.h:13
 GledTypes.h:14
 GledTypes.h:15
 GledTypes.h:16
 GledTypes.h:17
 GledTypes.h:18
 GledTypes.h:19
 GledTypes.h:20
 GledTypes.h:21
 GledTypes.h:22
 GledTypes.h:23
 GledTypes.h:24
 GledTypes.h:25
 GledTypes.h:26
 GledTypes.h:27
 GledTypes.h:28
 GledTypes.h:29
 GledTypes.h:30
 GledTypes.h:31
 GledTypes.h:32
 GledTypes.h:33
 GledTypes.h:34
 GledTypes.h:35
 GledTypes.h:36
 GledTypes.h:37
 GledTypes.h:38
 GledTypes.h:39
 GledTypes.h:40
 GledTypes.h:41
 GledTypes.h:42
 GledTypes.h:43
 GledTypes.h:44
 GledTypes.h:45
 GledTypes.h:46
 GledTypes.h:47
 GledTypes.h:48
 GledTypes.h:49
 GledTypes.h:50
 GledTypes.h:51
 GledTypes.h:52
 GledTypes.h:53
 GledTypes.h:54
 GledTypes.h:55
 GledTypes.h:56
 GledTypes.h:57
 GledTypes.h:58
 GledTypes.h:59
 GledTypes.h:60
 GledTypes.h:61
 GledTypes.h:62
 GledTypes.h:63
 GledTypes.h:64
 GledTypes.h:65
 GledTypes.h:66
 GledTypes.h:67
 GledTypes.h:68
 GledTypes.h:69
 GledTypes.h:70
 GledTypes.h:71
 GledTypes.h:72
 GledTypes.h:73
 GledTypes.h:74
 GledTypes.h:75
 GledTypes.h:76
 GledTypes.h:77
 GledTypes.h:78
 GledTypes.h:79
 GledTypes.h:80
 GledTypes.h:81
 GledTypes.h:82
 GledTypes.h:83
 GledTypes.h:84
 GledTypes.h:85
 GledTypes.h:86
 GledTypes.h:87
 GledTypes.h:88
 GledTypes.h:89
 GledTypes.h:90
 GledTypes.h:91
 GledTypes.h:92
 GledTypes.h:93
 GledTypes.h:94
 GledTypes.h:95
 GledTypes.h:96
 GledTypes.h:97
 GledTypes.h:98
 GledTypes.h:99
 GledTypes.h:100
 GledTypes.h:101
 GledTypes.h:102
 GledTypes.h:103
 GledTypes.h:104
 GledTypes.h:105
 GledTypes.h:106
 GledTypes.h:107
 GledTypes.h:108
 GledTypes.h:109
 GledTypes.h:110
 GledTypes.h:111
 GledTypes.h:112
 GledTypes.h:113
 GledTypes.h:114
 GledTypes.h:115
 GledTypes.h:116
 GledTypes.h:117
 GledTypes.h:118
 GledTypes.h:119
 GledTypes.h:120
 GledTypes.h:121
 GledTypes.h:122
 GledTypes.h:123
 GledTypes.h:124
 GledTypes.h:125
 GledTypes.h:126
 GledTypes.h:127
 GledTypes.h:128
 GledTypes.h:129
 GledTypes.h:130
 GledTypes.h:131
 GledTypes.h:132
 GledTypes.h:133
 GledTypes.h:134
 GledTypes.h:135
 GledTypes.h:136
 GledTypes.h:137
 GledTypes.h:138
 GledTypes.h:139
 GledTypes.h:140
 GledTypes.h:141
 GledTypes.h:142
 GledTypes.h:143
 GledTypes.h:144
 GledTypes.h:145
 GledTypes.h:146
 GledTypes.h:147
 GledTypes.h:148
 GledTypes.h:149
 GledTypes.h:150
 GledTypes.h:151
 GledTypes.h:152
 GledTypes.h:153
 GledTypes.h:154
 GledTypes.h:155
 GledTypes.h:156
 GledTypes.h:157
 GledTypes.h:158
 GledTypes.h:159
 GledTypes.h:160
 GledTypes.h:161
 GledTypes.h:162
 GledTypes.h:163
 GledTypes.h:164
 GledTypes.h:165
 GledTypes.h:166
 GledTypes.h:167
 GledTypes.h:168
 GledTypes.h:169
 GledTypes.h:170
 GledTypes.h:171
 GledTypes.h:172
 GledTypes.h:173
 GledTypes.h:174
 GledTypes.h:175
 GledTypes.h:176
 GledTypes.h:177
 GledTypes.h:178
 GledTypes.h:179
 GledTypes.h:180
 GledTypes.h:181
 GledTypes.h:182
 GledTypes.h:183
 GledTypes.h:184
 GledTypes.h:185
 GledTypes.h:186
 GledTypes.h:187
 GledTypes.h:188
 GledTypes.h:189
 GledTypes.h:190
 GledTypes.h:191
 GledTypes.h:192
 GledTypes.h:193
 GledTypes.h:194
 GledTypes.h:195
 GledTypes.h:196
 GledTypes.h:197
 GledTypes.h:198
 GledTypes.h:199
 GledTypes.h:200
 GledTypes.h:201
 GledTypes.h:202
 GledTypes.h:203