Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TClingValue.h
Go to the documentation of this file.
1 // @(#)root/core/meta:$Id$e
2 // Author: Vassil Vassilev 13/03/2013
3 
4 /*******************************************************************************
5  * Copyright (C) 1995-2013, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  ******************************************************************************/
11 
12 ////////////////////////////////////////////////////////////////////////////////
13 // //
14 // Class representing a value coming from cling. Its main use case //
15 // is to TCallFunc. When TCallFunc returns by-value, i.e. a temporary //
16 // variable, its lifetime has to be extended. TClingValue provides a //
17 // way to extend the temporaries lifetime and gives the user to control it. //
18 // //
19 // The class is used to hide the implementation details of //
20 // cling::Value. //
21 // //
22 ////////////////////////////////////////////////////////////////////////////////
23 
24 #ifndef ROOT_TClingValue
25 #define ROOT_TClingValue
26 
27 #include "RtypesCore.h"
28 #include "TInterpreterValue.h"
29 
30 namespace cling {
31  class Value;
32 }
33 
34 class TClingValue : public TInterpreterValue {
35 private:
36  struct HasTheSameSizeAsClingValue {
37  long double fBiggestElementOfUnion;
38  int fStorageType;
39  void* fType;
40  void* fInterpreter;
41  } fValue;
42 
43  cling::Value& ToCV() {
44  return reinterpret_cast<cling::Value&>(fValue); }
45  const cling::Value& ToCV() const {
46  return reinterpret_cast<const cling::Value&>(fValue); }
47 
48 public:
49  TClingValue();
50  TClingValue(const TClingValue& Other);
51  TClingValue& operator=(TClingValue &Other);
52  ~TClingValue();
53 
54  const void* GetValAddr() const { return &fValue; }
55  void* GetValAddr() { return &fValue; }
56 
57  std::pair<std::string, std::string> ToTypeAndValueString() const;
58  Bool_t IsValid() const;
59  Double_t GetAsDouble() const;
60  Long_t GetAsLong() const;
61  ULong_t GetAsUnsignedLong() const;
62  void* GetAsPointer() const;
63  std::string ToString() const;
64 };
65 
66 #endif // ROOT_TClingValue