Raw File
PointerToMember.h
// @(#)root/reflex:$Name:  $:$Id: PointerToMember.h,v 1.5 2006/03/06 12:51:46 roiser Exp $
// 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 ROOT_Reflex_PointerToMember
#define ROOT_Reflex_PointerToMember

// Include files
#include "Reflex/TypeBase.h"
#include "Reflex/Type.h"

namespace ROOT {
   namespace Reflex {

      // forward declarations

      /** 
       * @class PointerToMember PointerToMember.h Reflex/PointerToMember.h
       * @author Stefan Roiser
       * @date   2004-01-28
       * @ingroup Ref
       */
      class PointerToMember : public TypeBase {

      public:

         /** default constructor */
         PointerToMember( const Type &           pointerToMemberType,
                          const std::type_info & ti );


         /** destructor */
         virtual ~PointerToMember() {}


         /**
          * Name will return the fully qualified Name of the pointer At
          * @param  typedefexp expand typedefs or not
          * @return fully qualified Name of pointer At
          */
         std::string Name( unsigned int mod = 0 ) const;


         /** pointerToMemberType will return a pointer to the Type the pointer to
          * MemberAt points to
          * @return pointer to Type of pointer to MemberAt
          */
         Type ToType( unsigned int mod ) const;


         /** static funtion that composes the At Name */
         static std::string BuildTypeName( const Type & pointerToMemberType,
                                           unsigned int mod = SCOPED | QUALIFIED );

      private:

         /**
          * @link aggregationByValue
          * @label pointer to MemberAt At
          * @supplierCardinality 1
          * @clientCardinality 1
          */
         Type fPointerToMemberType;

      }; // class PointerToMember
   } // namespace Reflex
} // namespace ROOT

//-------------------------------------------------------------------------------
inline ROOT::Reflex::Type ROOT::Reflex::PointerToMember::ToType( unsigned int /* mod */ ) const {
//-------------------------------------------------------------------------------
   return fPointerToMemberType;
}


#endif // ROOT_Reflex_PointerToMember

back to top