/usr/include/root/Reflex/ValueObject.h is in libroot-core-dev 5.34.19+dfsg-1.2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | // @(#)root/reflex:$Id$
// Author: Pere Mato 2006
// Copyright CERN, CH-1211 Geneva 23, 2004-2005, All rights reserved.
//
// Permission to use, copy, modify, and distribute this software for any
// purpose is hereby granted without fee, provided that this copyright and
// permissions notice appear in all copies and derivatives.
//
// This software is provided "as is" without express or implied warranty.
#ifndef Reflex_ValueObject
#define Reflex_ValueObject
// Include files
#include "Reflex/Any.h"
#include "Reflex/Object.h"
#include "Reflex/Builder/TypeBuilder.h"
namespace Reflex {
/**
* @class ValueObject ValueObject.h Reflex/ValueObject.h
* @author Pere Mato
* @date 01/09/2006
* @ingroup Ref
*/
class RFLX_API ValueObject: public Object {
public:
/** constructor */
ValueObject();
/** constructor */
template <typename T>
static ValueObject Create(const T& v);
/** constructor */
ValueObject(const ValueObject &o);
/** destructor */
~ValueObject();
/** assignment op */
ValueObject& operator=(const ValueObject &o);
/** get the actual value */
template <typename T> const T& Value();
template <typename T> ValueObject& Assign(const T&);
private:
/** the value of the generic object by value */
Any fValue;
}; // class ValueObject
} // namespace Reflex
//-------------------------------------------------------------------------------
inline Reflex::ValueObject::ValueObject() {
//-------------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
template <typename T>
inline Reflex::ValueObject
Reflex::ValueObject::Create(const T& v) {
//-------------------------------------------------------------------------------
ValueObject ret;
ret.Assign(v);
return ret;
}
//-------------------------------------------------------------------------------
inline Reflex::ValueObject::ValueObject(const ValueObject& o):
Object(o.TypeOf(), 0),
fValue(o.fValue) {
//-------------------------------------------------------------------------------
if (TypeOf().IsPointer()) {
fAddress = *(void**) fValue.Address();
} else { fAddress = fValue.Address(); }
}
//-------------------------------------------------------------------------------
template <typename T>
inline Reflex::ValueObject&
Reflex::ValueObject::Assign(const T& v) {
//-------------------------------------------------------------------------------
fValue = Any(v);
fType = GetType<T>();
if (TypeOf().IsPointer()) {
fAddress = *(void**) fValue.Address();
} else { fAddress = fValue.Address(); }
return *this;
}
//-------------------------------------------------------------------------------
inline Reflex::ValueObject::~ValueObject() {
//-------------------------------------------------------------------------------
}
//-------------------------------------------------------------------------------
inline
Reflex::ValueObject&
Reflex::ValueObject::operator=(const ValueObject& o) {
//-------------------------------------------------------------------------------
if (&o != this) {
Object::operator=(Object(o.TypeOf(), 0));
fValue = o.fValue;
if (TypeOf().IsPointer()) {
fAddress = *(void**) fValue.Address();
} else { fAddress = fValue.Address(); }
}
return *this;
}
//-------------------------------------------------------------------------------
template <typename T>
inline const T&
Reflex::ValueObject::Value() {
//-------------------------------------------------------------------------------
return *(T*) fAddress;
}
#endif // Reflex_ValueObject
|