ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/*
$Log$
Revision 1.4  2006/09/04 17:42:34  hristov
Changes required by Effective C++

Revision 1.3  2006/07/20 09:43:46  jgrosseo
removing dynamic types

Revision 1.2  2006/07/04 14:58:11  jgrosseo
revision of AliDCSValue: Removed wrapper classes, reduced storage size per value by factor 2

Revision 1.1  2006/06/02 14:14:36  hristov
Separate library for CDB (Jan)

Revision 1.2  2006/03/07 07:52:34  hristov
New version (B.Yordanov)

Revision 1.2  2005/11/17 14:43:23  byordano
import to local CVS

Revision 1.1.1.1  2005/10/28 07:33:58  hristov
Initial import as subdirectory in AliRoot

Revision 1.1.1.1  2005/09/12 22:11:40  byordano
SHUTTLE package

Revision 1.2  2005/08/30 10:53:23  byordano
some more descriptions added

*/

//
// This class represents the value(s) of
// a DCS data point at a given timestamp.
// It stores different data types, the current implementation has a member for all of them.
// This is definitly not efficient, but the only way to use the automatic streamers generated by ROOT.
//
// Each element of this value series has two fields:
// fValue - primitive value which represents the real measured value
// fTimestamp - timestamp when the measurement was made
//

#include "AliDCSValue.h"
#include "AliLog.h"

#include "TTimeStamp.h"
#include <TString.h>

ClassImp(AliDCSValue)

AliDCSValue::AliDCSValue() :
  TObject(),
  fType(kInvalid),
  fBool(kFALSE),
  fChar(0),
  fInt(0),
  fUInt(0),
  fFloat(0),
  fTimeStamp(0)
{
  // default constructor
}

AliDCSValue::AliDCSValue(Bool_t value, UInt_t timeStamp) : 
  TObject(),
  fType(kBool),
  fBool(value),
  fChar(0),
  fInt(0),
  fUInt(0),
  fFloat(0),
  fTimeStamp(timeStamp)
{
  // constructor
}

AliDCSValue::AliDCSValue(Char_t value, UInt_t timeStamp) :
  TObject(),
  fType(kChar),
  fBool(kFALSE),
  fChar(value),
  fInt(0),
  fUInt(0),
  fFloat(0),
  fTimeStamp(timeStamp)
{
  // constructor
}

AliDCSValue::AliDCSValue(Int_t value, UInt_t timeStamp) :
  TObject(),
  fType(kInt),
  fBool(kFALSE),
  fChar(0),
  fInt(value),
  fUInt(0),
  fFloat(0),
  fTimeStamp(timeStamp)
{
  // constructor
}

AliDCSValue::AliDCSValue(UInt_t value, UInt_t timeStamp) :
  TObject(),
  fType(kUInt),
  fBool(kFALSE),
  fChar(0),
  fInt(0),
  fUInt(value),
  fFloat(0),
  fTimeStamp(timeStamp)
{
  // constructor
}

AliDCSValue::AliDCSValue(Float_t value, UInt_t timeStamp) :
  TObject(),
  fType(kFloat),
  fBool(kFALSE),
  fChar(0),
  fInt(0),
  fUInt(0),
  fFloat(value),
  fTimeStamp(timeStamp)
{
  // constructor

  Init();

  fTimeStamp = timeStamp;

  fType = kFloat;
  fFloat = value;
}

AliDCSValue::AliDCSValue(const AliDCSValue& c) :
  TObject(c),
  fType(c.fType),
  fBool(c.fBool),
  fChar(c.fChar),
  fInt(c.fInt),
  fUInt(c.fUInt),
  fFloat(c.fFloat),
  fTimeStamp(c.fTimeStamp)
{
  // copy constructor
}

void AliDCSValue::Init()
{
  // init helper, that initializes everything to 0

  fType = kInvalid;

  fBool = kFALSE;
  fChar = 0;
  fInt = 0;
  fUInt = 0;
  fFloat = 0;

  fTimeStamp = 0;
}

AliDCSValue::~AliDCSValue()
{
  // destructor
}

AliDCSValue &AliDCSValue::operator=(const AliDCSValue &c)
{
  // assigment operator

  if (this != &c) 
    ((AliDCSValue &) c).Copy(*this);

  return *this;
}

void AliDCSValue::Copy(TObject& c) const
{
  // copy function

  AliDCSValue& target = (AliDCSValue &) c;

  target.Init();

  target.fType = fType;

  target.fBool = fBool;
  target.fChar = fChar;
  target.fInt = fInt;
  target.fUInt = fUInt;
  target.fFloat = fFloat;

  target.fTimeStamp = fTimeStamp;
}

Int_t AliDCSValue::GetSize() const
{
  // returns size in bytes of stored structure

  Int_t size = sizeof(fTimeStamp);

  switch (fType)
  {
    case kBool:  size += sizeof(Bool_t);  break;
    case kChar:  size += sizeof(Char_t);  break;
    case kInt:   size += sizeof(Int_t);   break;
    case kUInt:  size += sizeof(UInt_t);  break;
    case kFloat: size += sizeof(Float_t); break;

    case kInvalid: break;
  }

  return size;
}

const Char_t* AliDCSValue::ToString() const
{
  TString str;

  switch (fType)
  {
    case kBool:  str = (fBool == kFALSE) ? "FALSE" : "TRUE"; break;
    case kChar:  str.Form("%d", fChar);  break;
    case kInt:   str.Form("%d", fInt);  break;
    case kUInt:  str.Form("%d", fUInt);  break;
    case kFloat: str.Form("%f", fFloat);  break;

    case kInvalid: break;
  }

  return Form("%s Timestamp: %s (%d)", str.Data(), TTimeStamp(fTimeStamp).AsString(), fTimeStamp);
}

void AliDCSValue::Print(Option_t* /*opt*/) const
{
  printf("%s\n", ToString());
}

Bool_t AliDCSValue::GetBool() const
{
  // return bool value
  if (fType!=kBool) AliError(Form("invalid request, object is not of type kBool (%d) but %d", kBool, fType));
  return fBool;
}

Char_t AliDCSValue::GetChar() const
{ 
  // return char value
  if (fType!=kChar) AliError(Form("invalid request, object is not of type kChar (%d) but %d", kChar, fType));
  return fChar;
}

Int_t AliDCSValue::GetInt() const
{
  // return int value
  if (fType!=kInt) AliError(Form("invalid request, object is not of type kInt (%d) but %d", kInt, fType));
  return fInt;
}

UInt_t AliDCSValue::GetUInt() const
{
  // return uint value
  if (fType!=kUInt) AliError(Form("invalid request, object is not of type kUInt (%d) but %d", kUInt, fType));
  return fUInt;
}

Float_t AliDCSValue::GetFloat() const
{
  // return float value
  if (fType!=kFloat) AliError(Form("invalid request, object is not of type kFloat (%d) but %d", kFloat, fType));
  return fFloat;
}
 AliDCSValue.cxx:1
 AliDCSValue.cxx:2
 AliDCSValue.cxx:3
 AliDCSValue.cxx:4
 AliDCSValue.cxx:5
 AliDCSValue.cxx:6
 AliDCSValue.cxx:7
 AliDCSValue.cxx:8
 AliDCSValue.cxx:9
 AliDCSValue.cxx:10
 AliDCSValue.cxx:11
 AliDCSValue.cxx:12
 AliDCSValue.cxx:13
 AliDCSValue.cxx:14
 AliDCSValue.cxx:15
 AliDCSValue.cxx:16
 AliDCSValue.cxx:17
 AliDCSValue.cxx:18
 AliDCSValue.cxx:19
 AliDCSValue.cxx:20
 AliDCSValue.cxx:21
 AliDCSValue.cxx:22
 AliDCSValue.cxx:23
 AliDCSValue.cxx:24
 AliDCSValue.cxx:25
 AliDCSValue.cxx:26
 AliDCSValue.cxx:27
 AliDCSValue.cxx:28
 AliDCSValue.cxx:29
 AliDCSValue.cxx:30
 AliDCSValue.cxx:31
 AliDCSValue.cxx:32
 AliDCSValue.cxx:33
 AliDCSValue.cxx:34
 AliDCSValue.cxx:35
 AliDCSValue.cxx:36
 AliDCSValue.cxx:37
 AliDCSValue.cxx:38
 AliDCSValue.cxx:39
 AliDCSValue.cxx:40
 AliDCSValue.cxx:41
 AliDCSValue.cxx:42
 AliDCSValue.cxx:43
 AliDCSValue.cxx:44
 AliDCSValue.cxx:45
 AliDCSValue.cxx:46
 AliDCSValue.cxx:47
 AliDCSValue.cxx:48
 AliDCSValue.cxx:49
 AliDCSValue.cxx:50
 AliDCSValue.cxx:51
 AliDCSValue.cxx:52
 AliDCSValue.cxx:53
 AliDCSValue.cxx:54
 AliDCSValue.cxx:55
 AliDCSValue.cxx:56
 AliDCSValue.cxx:57
 AliDCSValue.cxx:58
 AliDCSValue.cxx:59
 AliDCSValue.cxx:60
 AliDCSValue.cxx:61
 AliDCSValue.cxx:62
 AliDCSValue.cxx:63
 AliDCSValue.cxx:64
 AliDCSValue.cxx:65
 AliDCSValue.cxx:66
 AliDCSValue.cxx:67
 AliDCSValue.cxx:68
 AliDCSValue.cxx:69
 AliDCSValue.cxx:70
 AliDCSValue.cxx:71
 AliDCSValue.cxx:72
 AliDCSValue.cxx:73
 AliDCSValue.cxx:74
 AliDCSValue.cxx:75
 AliDCSValue.cxx:76
 AliDCSValue.cxx:77
 AliDCSValue.cxx:78
 AliDCSValue.cxx:79
 AliDCSValue.cxx:80
 AliDCSValue.cxx:81
 AliDCSValue.cxx:82
 AliDCSValue.cxx:83
 AliDCSValue.cxx:84
 AliDCSValue.cxx:85
 AliDCSValue.cxx:86
 AliDCSValue.cxx:87
 AliDCSValue.cxx:88
 AliDCSValue.cxx:89
 AliDCSValue.cxx:90
 AliDCSValue.cxx:91
 AliDCSValue.cxx:92
 AliDCSValue.cxx:93
 AliDCSValue.cxx:94
 AliDCSValue.cxx:95
 AliDCSValue.cxx:96
 AliDCSValue.cxx:97
 AliDCSValue.cxx:98
 AliDCSValue.cxx:99
 AliDCSValue.cxx:100
 AliDCSValue.cxx:101
 AliDCSValue.cxx:102
 AliDCSValue.cxx:103
 AliDCSValue.cxx:104
 AliDCSValue.cxx:105
 AliDCSValue.cxx:106
 AliDCSValue.cxx:107
 AliDCSValue.cxx:108
 AliDCSValue.cxx:109
 AliDCSValue.cxx:110
 AliDCSValue.cxx:111
 AliDCSValue.cxx:112
 AliDCSValue.cxx:113
 AliDCSValue.cxx:114
 AliDCSValue.cxx:115
 AliDCSValue.cxx:116
 AliDCSValue.cxx:117
 AliDCSValue.cxx:118
 AliDCSValue.cxx:119
 AliDCSValue.cxx:120
 AliDCSValue.cxx:121
 AliDCSValue.cxx:122
 AliDCSValue.cxx:123
 AliDCSValue.cxx:124
 AliDCSValue.cxx:125
 AliDCSValue.cxx:126
 AliDCSValue.cxx:127
 AliDCSValue.cxx:128
 AliDCSValue.cxx:129
 AliDCSValue.cxx:130
 AliDCSValue.cxx:131
 AliDCSValue.cxx:132
 AliDCSValue.cxx:133
 AliDCSValue.cxx:134
 AliDCSValue.cxx:135
 AliDCSValue.cxx:136
 AliDCSValue.cxx:137
 AliDCSValue.cxx:138
 AliDCSValue.cxx:139
 AliDCSValue.cxx:140
 AliDCSValue.cxx:141
 AliDCSValue.cxx:142
 AliDCSValue.cxx:143
 AliDCSValue.cxx:144
 AliDCSValue.cxx:145
 AliDCSValue.cxx:146
 AliDCSValue.cxx:147
 AliDCSValue.cxx:148
 AliDCSValue.cxx:149
 AliDCSValue.cxx:150
 AliDCSValue.cxx:151
 AliDCSValue.cxx:152
 AliDCSValue.cxx:153
 AliDCSValue.cxx:154
 AliDCSValue.cxx:155
 AliDCSValue.cxx:156
 AliDCSValue.cxx:157
 AliDCSValue.cxx:158
 AliDCSValue.cxx:159
 AliDCSValue.cxx:160
 AliDCSValue.cxx:161
 AliDCSValue.cxx:162
 AliDCSValue.cxx:163
 AliDCSValue.cxx:164
 AliDCSValue.cxx:165
 AliDCSValue.cxx:166
 AliDCSValue.cxx:167
 AliDCSValue.cxx:168
 AliDCSValue.cxx:169
 AliDCSValue.cxx:170
 AliDCSValue.cxx:171
 AliDCSValue.cxx:172
 AliDCSValue.cxx:173
 AliDCSValue.cxx:174
 AliDCSValue.cxx:175
 AliDCSValue.cxx:176
 AliDCSValue.cxx:177
 AliDCSValue.cxx:178
 AliDCSValue.cxx:179
 AliDCSValue.cxx:180
 AliDCSValue.cxx:181
 AliDCSValue.cxx:182
 AliDCSValue.cxx:183
 AliDCSValue.cxx:184
 AliDCSValue.cxx:185
 AliDCSValue.cxx:186
 AliDCSValue.cxx:187
 AliDCSValue.cxx:188
 AliDCSValue.cxx:189
 AliDCSValue.cxx:190
 AliDCSValue.cxx:191
 AliDCSValue.cxx:192
 AliDCSValue.cxx:193
 AliDCSValue.cxx:194
 AliDCSValue.cxx:195
 AliDCSValue.cxx:196
 AliDCSValue.cxx:197
 AliDCSValue.cxx:198
 AliDCSValue.cxx:199
 AliDCSValue.cxx:200
 AliDCSValue.cxx:201
 AliDCSValue.cxx:202
 AliDCSValue.cxx:203
 AliDCSValue.cxx:204
 AliDCSValue.cxx:205
 AliDCSValue.cxx:206
 AliDCSValue.cxx:207
 AliDCSValue.cxx:208
 AliDCSValue.cxx:209
 AliDCSValue.cxx:210
 AliDCSValue.cxx:211
 AliDCSValue.cxx:212
 AliDCSValue.cxx:213
 AliDCSValue.cxx:214
 AliDCSValue.cxx:215
 AliDCSValue.cxx:216
 AliDCSValue.cxx:217
 AliDCSValue.cxx:218
 AliDCSValue.cxx:219
 AliDCSValue.cxx:220
 AliDCSValue.cxx:221
 AliDCSValue.cxx:222
 AliDCSValue.cxx:223
 AliDCSValue.cxx:224
 AliDCSValue.cxx:225
 AliDCSValue.cxx:226
 AliDCSValue.cxx:227
 AliDCSValue.cxx:228
 AliDCSValue.cxx:229
 AliDCSValue.cxx:230
 AliDCSValue.cxx:231
 AliDCSValue.cxx:232
 AliDCSValue.cxx:233
 AliDCSValue.cxx:234
 AliDCSValue.cxx:235
 AliDCSValue.cxx:236
 AliDCSValue.cxx:237
 AliDCSValue.cxx:238
 AliDCSValue.cxx:239
 AliDCSValue.cxx:240
 AliDCSValue.cxx:241
 AliDCSValue.cxx:242
 AliDCSValue.cxx:243
 AliDCSValue.cxx:244
 AliDCSValue.cxx:245
 AliDCSValue.cxx:246
 AliDCSValue.cxx:247
 AliDCSValue.cxx:248
 AliDCSValue.cxx:249
 AliDCSValue.cxx:250
 AliDCSValue.cxx:251
 AliDCSValue.cxx:252
 AliDCSValue.cxx:253
 AliDCSValue.cxx:254
 AliDCSValue.cxx:255
 AliDCSValue.cxx:256
 AliDCSValue.cxx:257
 AliDCSValue.cxx:258
 AliDCSValue.cxx:259
 AliDCSValue.cxx:260
 AliDCSValue.cxx:261
 AliDCSValue.cxx:262
 AliDCSValue.cxx:263
 AliDCSValue.cxx:264
 AliDCSValue.cxx:265
 AliDCSValue.cxx:266
 AliDCSValue.cxx:267
 AliDCSValue.cxx:268
 AliDCSValue.cxx:269
 AliDCSValue.cxx:270
 AliDCSValue.cxx:271
 AliDCSValue.cxx:272
 AliDCSValue.cxx:273
 AliDCSValue.cxx:274
 AliDCSValue.cxx:275
 AliDCSValue.cxx:276
 AliDCSValue.cxx:277
 AliDCSValue.cxx:278
 AliDCSValue.cxx:279
 AliDCSValue.cxx:280
 AliDCSValue.cxx:281
 AliDCSValue.cxx:282
 AliDCSValue.cxx:283
 AliDCSValue.cxx:284
 AliDCSValue.cxx:285
 AliDCSValue.cxx:286
 AliDCSValue.cxx:287
 AliDCSValue.cxx:288
 AliDCSValue.cxx:289