ROOT logo
// @(#)root/reflex:$Id: Member.cxx 26193 2008-11-14 14:12:27Z axel $
// Author: Stefan Roiser 2004

// Copyright CERN, CH-1211 Geneva 23, 2004-2006, 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_BUILD
#define REFLEX_BUILD
#endif

#include "Reflex/Member.h"

#include "Reflex/Scope.h"
#include "Reflex/Type.h"
#include "Reflex/Base.h"
#include "Reflex/PropertyList.h"

#include "Reflex/Tools.h"
#include "Class.h"

#include <iostream>


//-------------------------------------------------------------------------------
Reflex::Member::Member( const MemberBase * memberBase )
//-------------------------------------------------------------------------------
   : fMemberBase( const_cast<MemberBase*>(memberBase) ) {
   // Construct a member, attaching it to MemberBase.
}



//-------------------------------------------------------------------------------
Reflex::Member::Member( const Member & rh )
//-------------------------------------------------------------------------------
   : fMemberBase( rh.fMemberBase ) {
   // Member copy constructor.
}


//-------------------------------------------------------------------------------
Reflex::Member::~Member() {
//-------------------------------------------------------------------------------
// Member desructor.
}


//-------------------------------------------------------------------------------
void Reflex::Member::Delete() {
//-------------------------------------------------------------------------------
// delete the MemberBase
   delete fMemberBase;
   fMemberBase = 0;
}


//-------------------------------------------------------------------------------
Reflex::Object Reflex::Member::Get() const {
//-------------------------------------------------------------------------------
// Get the value of a static member.
   if ( fMemberBase ) return fMemberBase->Get( Object());
   return Object();
}


//-------------------------------------------------------------------------------
Reflex::Object Reflex::Member::Get( const Object & obj) const {
//-------------------------------------------------------------------------------
// Get the value of a non static data member.
   if ( fMemberBase ) return fMemberBase->Get( obj );
   return Object();
}


/*//-------------------------------------------------------------------------------
  Reflex::Object 
  Reflex::Member::Invoke( const Object & obj,
  const std::vector < Object > & paramList ) const {
//-------------------------------------------------------------------------------
  if ( fMemberBase ) return fMemberBase->Invoke( obj, paramList );
  return Object();
  }
*/


//-------------------------------------------------------------------------------
void
Reflex::Member::Invoke( const Object & obj, Object* ret,
                        const std::vector < void * > & paramList ) const {
//-------------------------------------------------------------------------------
// Invoke a non static data member. Put return value (if not void) into ret.
   if ( fMemberBase ) fMemberBase->Invoke( obj, ret, paramList );
}


/*/-------------------------------------------------------------------------------
  Reflex::Object 
  Reflex::Member::Invoke( const std::vector < Object > & paramList ) const {
//-------------------------------------------------------------------------------
  if ( fMemberBase ) return fMemberBase->Invoke( paramList );
  return Object();
  }
*/


//-------------------------------------------------------------------------------
void
Reflex::Member::Invoke( Object* ret, const std::vector < void * > & paramList ) const {
//-------------------------------------------------------------------------------
// Invoke a static data member. Put return value (if not void) into ret.
   if ( fMemberBase ) fMemberBase->Invoke( ret, paramList );
}


/*/-------------------------------------------------------------------------------
  void Reflex::Member::Set( const Object & instance,
  const Object & value ) const {
//--------------------------------------------------------------------------------
  if (fMemberBase ) fMemberBase->Set( instance, value );
  }
*/


//-------------------------------------------------------------------------------
void Reflex::Member::Set( const Object & instance,
                                const void * value ) const {
//-------------------------------------------------------------------------------
// Set a non static data member.
   if (fMemberBase ) fMemberBase->Set( instance, value );
}


//-------------------------------------------------------------------------------
void Reflex::Member::GenerateDict( DictionaryGenerator & generator) const {
//-------------------------------------------------------------------------------
// Generate Dictionary information about itself.
   if ( * this ) fMemberBase->GenerateDict( generator );
}
                           
#ifdef REFLEX_CINT_MERGE
bool Reflex::Member::operator&&(const Scope &right) const
{ return operator bool() && (bool)right; }
bool Reflex::Member::operator&&(const Type &right) const 
{ return operator bool() && (bool)right; }
bool Reflex::Member::operator&&(const Member &right) const 
{ return operator bool() && (bool)right; }
bool Reflex::Member::operator||(const Scope &right) const 
{ return operator bool() && (bool)right; }
bool Reflex::Member::operator||(const Type &right) const 
{ return operator bool() && (bool)right; }
bool Reflex::Member::operator||(const Member &right) const 
{ return operator bool() && (bool)right; }
#endif
 Member.cxx:1
 Member.cxx:2
 Member.cxx:3
 Member.cxx:4
 Member.cxx:5
 Member.cxx:6
 Member.cxx:7
 Member.cxx:8
 Member.cxx:9
 Member.cxx:10
 Member.cxx:11
 Member.cxx:12
 Member.cxx:13
 Member.cxx:14
 Member.cxx:15
 Member.cxx:16
 Member.cxx:17
 Member.cxx:18
 Member.cxx:19
 Member.cxx:20
 Member.cxx:21
 Member.cxx:22
 Member.cxx:23
 Member.cxx:24
 Member.cxx:25
 Member.cxx:26
 Member.cxx:27
 Member.cxx:28
 Member.cxx:29
 Member.cxx:30
 Member.cxx:31
 Member.cxx:32
 Member.cxx:33
 Member.cxx:34
 Member.cxx:35
 Member.cxx:36
 Member.cxx:37
 Member.cxx:38
 Member.cxx:39
 Member.cxx:40
 Member.cxx:41
 Member.cxx:42
 Member.cxx:43
 Member.cxx:44
 Member.cxx:45
 Member.cxx:46
 Member.cxx:47
 Member.cxx:48
 Member.cxx:49
 Member.cxx:50
 Member.cxx:51
 Member.cxx:52
 Member.cxx:53
 Member.cxx:54
 Member.cxx:55
 Member.cxx:56
 Member.cxx:57
 Member.cxx:58
 Member.cxx:59
 Member.cxx:60
 Member.cxx:61
 Member.cxx:62
 Member.cxx:63
 Member.cxx:64
 Member.cxx:65
 Member.cxx:66
 Member.cxx:67
 Member.cxx:68
 Member.cxx:69
 Member.cxx:70
 Member.cxx:71
 Member.cxx:72
 Member.cxx:73
 Member.cxx:74
 Member.cxx:75
 Member.cxx:76
 Member.cxx:77
 Member.cxx:78
 Member.cxx:79
 Member.cxx:80
 Member.cxx:81
 Member.cxx:82
 Member.cxx:83
 Member.cxx:84
 Member.cxx:85
 Member.cxx:86
 Member.cxx:87
 Member.cxx:88
 Member.cxx:89
 Member.cxx:90
 Member.cxx:91
 Member.cxx:92
 Member.cxx:93
 Member.cxx:94
 Member.cxx:95
 Member.cxx:96
 Member.cxx:97
 Member.cxx:98
 Member.cxx:99
 Member.cxx:100
 Member.cxx:101
 Member.cxx:102
 Member.cxx:103
 Member.cxx:104
 Member.cxx:105
 Member.cxx:106
 Member.cxx:107
 Member.cxx:108
 Member.cxx:109
 Member.cxx:110
 Member.cxx:111
 Member.cxx:112
 Member.cxx:113
 Member.cxx:114
 Member.cxx:115
 Member.cxx:116
 Member.cxx:117
 Member.cxx:118
 Member.cxx:119
 Member.cxx:120
 Member.cxx:121
 Member.cxx:122
 Member.cxx:123
 Member.cxx:124
 Member.cxx:125
 Member.cxx:126
 Member.cxx:127
 Member.cxx:128
 Member.cxx:129
 Member.cxx:130
 Member.cxx:131
 Member.cxx:132
 Member.cxx:133
 Member.cxx:134
 Member.cxx:135
 Member.cxx:136
 Member.cxx:137
 Member.cxx:138
 Member.cxx:139
 Member.cxx:140
 Member.cxx:141
 Member.cxx:142
 Member.cxx:143
 Member.cxx:144
 Member.cxx:145
 Member.cxx:146
 Member.cxx:147
 Member.cxx:148
 Member.cxx:149
 Member.cxx:150
 Member.cxx:151
 Member.cxx:152
 Member.cxx:153
 Member.cxx:154
 Member.cxx:155
 Member.cxx:156
 Member.cxx:157
 Member.cxx:158