ROOT logo
// @(#)root/reflex:$Id: Scope.h 28733 2009-05-28 04:34:44Z pcanal $
// 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_Scope
#define Reflex_Scope

// Include files
#include "Reflex/Kernel.h"
#include <string>
#include <typeinfo>

namespace Reflex {

   // forward declarations
   class Base;
   class Member;
   class PropertyList;
   class Type;
   class ScopeBase;
   class ScopeName;
   class TypeTemplate;
   class MemberTemplate;
   class DictionaryGenerator;


   /**
   * @class Scope Scope.h Reflex/Scope.h
   * @author Stefan Roiser
   * @date 24/11/2003
   * @ingroup Ref
   */
   class RFLX_API Scope {

   public:

      /** constructor */
      Scope( const ScopeName * scopeName = 0 );


      /** copy constructor */
      Scope( const Scope & rh );


      /** destructor */
      ~Scope();


      /**
      * inequal operator 
      */
      bool operator != ( const Scope & rh ) const;


      /**
      * the bool operator will return true if the Scope is resolved (implemented)
      * @return true if Scope is implemented
      */
      operator bool () const;

#if defined(REFLEX_CINT_MERGE)
      // To prevent any un-authorized use as the old type
      bool operator!() const { return !operator bool(); }
      bool operator&&(bool right) const { return operator bool() && right; }
      bool operator&&(int right) const { return operator bool() && right; }
      bool operator&&(long right) const { return operator bool() && right; }
      bool operator&&(const Scope &right) const;
      bool operator&&(const Type &right) const;
      bool operator&&(const Member &right) const;
      bool operator||(bool right) const { return operator bool() || right; }
      bool operator||(int right) const { return operator bool() || right; }
      bool operator||(long right) const { return operator bool() || right; }
      bool operator||(const Scope &right) const;
      bool operator||(const Type &right) const;
      bool operator||(const Member &right) const;
   private:
      operator int () const;
   public:
#endif


      /** 
      * the operator Type will return a corresponding type object to the scope if
      * applicable (i.e. if the Scope is also a Type e.g. Class, Union, Enum)
      */
      operator Type () const;


      /**
      * BaseAt will return the nth base class information
      * @param  nth base class
      * @return pointer to base class information
      */
      Base BaseAt( size_t nth ) const;


      /**
      * BaseSize will return the number of base classes
      * @return number of base classes
      */
      size_t BaseSize() const;


      /**
      * Base_Begin returns the begin of the container of bases
      * @return begin of container of bases
      */
      Base_Iterator Base_Begin() const;


      /**
      * Base_End returns the end of the container of bases
      * @return end of container of bases
      */
      Base_Iterator Base_End() const;


      /**
      * Base_RBegin returns the reverse begin of the container of bases
      * @return reverse begin of container of bases
      */
      Reverse_Base_Iterator Base_RBegin() const;


      /**
      * Base_REnd returns the reverse end of the container of bases
      * @return reverse end of container of bases
      */
      Reverse_Base_Iterator Base_REnd() const;


      /**
      * ByName will return reflection information of the scope passed as argument
      * @param  name fully qualified name of the scope
      * @return reflection information of the scope
      */
      static Scope ByName( const std::string & name );


      /**
      * DataMemberAt will return the nth data member of the type
      * @param  nth the nth data member
      * @return nth data member 
      */
      Member DataMemberAt( size_t nth, EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT ) const;


      /**
      * DataMemberByName will lookup a data member by name
      * @param  name of data member
      * @return data member
      */
      Member DataMemberByName( const std::string & name, EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT ) const;


      /**
      * DataMemberSize will return the number of data members of this type
      * @return number of data members
      */
      size_t DataMemberSize(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_Begin returns the begin of the container of members
      * @return begin of container of members
      */
      Member_Iterator DataMember_Begin(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_End returns the end of the container of members
      * @return end of container of members
      */
      Member_Iterator DataMember_End(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_RBegin returns the reverse begin of the container of members
      * @return reverse begin of container of members
      */
      Reverse_Member_Iterator DataMember_RBegin(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_REnd returns the reverse end of the container of members
      * @return reverse end of container of members
      */
      Reverse_Member_Iterator DataMember_REnd(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * DeclaringScope will return the declaring socpe of this type
      * @return declaring scope of this type
      */
      Scope DeclaringScope() const;


      /**
      * FunctionMemberAt will return the nth function member of the type
      * @param  nth function member
      * @return reflection information of nth function member
      */
      Member FunctionMemberAt( size_t nth, EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT ) const;


      /**
      * FunctionMemberByName will return the member with the name, 
      * optionally the signature of the function may be given as a type
      * @param  name of function member
      * @return reflection information of the function member
      */
      Member FunctionMemberByName( const std::string & name, EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT ) const;


      /**
      * FunctionMemberByName will return the member with the name, 
      * optionally the signature of the function may be given as a type
      * @param  name of function member
      * @param  signature of the member function 
      * @modifiers_mask When matching, do not compare the listed modifiers
      * @return reflection information of the function member
      */
      // this overloading is unfortunate but I can't include Type.h here
      Member FunctionMemberByName( const std::string & name,
                                   const Type & signature,
                                   unsigned int modifers_mask = 0,
                                   EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * FunctionMemberByNameAndSignature will return the member with the name, 
      * optionally the signature of the function may be given as a type
      * @param  name of function member
      * @param  signature of the member function 
      * @modifiers_mask When matching, do not compare the listed modifiers
      * @return reflection information of the function member
      */
      // this overloading is unfortunate but I can't include Type.h here
      Member FunctionMemberByNameAndSignature( const std::string & name,
                                               const Type & signature,
                                               unsigned int modifers_mask = 0,
                                               EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * FunctionMemberSize will return the number of function members of
      * this type
      * @return number of function members
      */
      size_t FunctionMemberSize(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * FunctionMember_Begin returns the begin of the container of function members
      * @return begin of container of function members
      */
      Member_Iterator FunctionMember_Begin(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * FunctionMember_End returns the end of the container of function members
      * @return end of container of function members
      */
      Member_Iterator FunctionMember_End(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * FunctionMember_RBegin returns the reverse begin of the container of function members
      * @return reverse begin of container of function members
      */
      Reverse_Member_Iterator FunctionMember_RBegin(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * FunctionMember_RBegin returns the reverse begin of the container of function members
      * @return reverse begin of container of function members
      */
      Reverse_Member_Iterator FunctionMember_REnd(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;



      /**
      * GenerateDict will produce the dictionary information of this type
      * @param generator a reference to the dictionary generator instance
      */
      void GenerateDict(DictionaryGenerator & generator) const;


      /**
      * GlobalScope will return the global scope representation\
      * @return global scope
      */
      static Scope GlobalScope();


      /**
      * HasBase will check whether this class has a base class given
      * as argument
      * @param  cl the base-class to check for
      * @return the Base info if it is found, an empty base otherwise (can be tested for bool)
      */
      bool HasBase( const Type & cl ) const;


      /**
      * Id returns a unique identifier of the type in the system
      * @return unique identifier
      */
      void * Id() const;


      /** 
      * IsClass returns true if the type represents a class
      * @return true if type represents a class
      */
      bool IsClass() const;


      /** 
      * IsEnum returns true if the type represents a enum
      * @return true if type represents a enum
      */
      bool IsEnum() const;


      /** 
      * IsNamespace returns true if the scope represents a namespace
      * @return true if scope represents a namespace
      */
      bool IsNamespace() const;


      /** 
      * IsPrivate will check if the scope access is private
      * @return true if scope access is private
      */
      bool IsPrivate() const;


      /** 
      * IsProtected will check if the scope access is protected
      * @return true if scope access is protected
      */
      bool IsProtected() const;


      /** 
      * IsPublic will check if the scope access is public
      * @return true if scope access is public
      */
      bool IsPublic() const;


      /**
      * IsTemplateInstance will return true if the the class is templated
      * @return true if the class is templated
      */
      bool IsTemplateInstance() const;


      /** 
      * IsTopScope returns true if this scope is the top scope
      * @return true if this scope is the top scope
      */
      bool IsTopScope() const;


      /** 
      * IsUnion returns true if the type represents a union
      * @return true if type represents a union
      */
      bool IsUnion() const;


      /**
      * LookupMember will lookup a member in the current scope
      * @param nam the string representation of the member to lookup
      * @return if a matching member is found return it, otherwise return empty member
      */
      Member LookupMember( const std::string & nam ) const;


      /**
      * LookupType will lookup a type in the current scope
      * @param nam the string representation of the type to lookup
      * @return if a matching type is found return it, otherwise return empty type
      */
      Type LookupType( const std::string & nam ) const;


      /**
      * LookupScope will lookup a scope in the current scope
      * @param nam the string representation of the scope to lookup
      * @return if a matching scope is found return it, otherwise return empty scope
      */
      Scope LookupScope( const std::string & nam ) const;


      /**
      * MemberAt will return the nth member of the type
      * @param  nth member
      * @return reflection information nth member
      */
      Member MemberAt( size_t nth, EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT ) const;


      /**
      * MemberByName will return the first member with a given Name
      * @param  member name
      * @return reflection information of the member
      */
      Member MemberByName( const std::string & name, EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT ) const;


      /**
      * MemberByName will return the first member with a given Name
      * @param  member name
      * @param  signature of the (function) member 
      * @return reflection information of the member
      */
      // this overloading is unfortunate but I can't include Type.h here
      Member MemberByName( const std::string & name,
                           const Type & signature,
                           EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * MemberSize will return the number of members
      * @return number of members
      */
      size_t MemberSize(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_Begin returns the begin of the container of members
      * @return begin of container of members
      */
      Member_Iterator Member_Begin(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_End returns the end of the container of members
      * @return end of container of members
      */
      Member_Iterator Member_End(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_RBegin returns the reverse begin of the container of members
      * @return reverse begin of container of members
      */
      Reverse_Member_Iterator Member_RBegin(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /**
      * Member_REnd returns the reverse end of the container of members
      * @return reverse end of container of members
      */
      Reverse_Member_Iterator Member_REnd(EMEMBERQUERY inh = INHERITEDMEMBERS_DEFAULT) const;


      /** 
      * MemberTemplateAt will return the nth member template of this type
      * @param nth member template
      * @return nth member template
      */
      MemberTemplate MemberTemplateAt( size_t nth ) const;


      /** 
      * MemberTemplateSize will return the number of member templates in this scope
      * @return number of defined member templates
      */
      size_t MemberTemplateSize() const;


      /**
      * MemberTemplateByName will return the member template representation in this 
      * scope
      * @param string representing the member template to look for
      * @return member template representation of the looked up member
      */
      MemberTemplate MemberTemplateByName( const std::string & nam ) const;


      /**
      * MemberTemplate_Begin returns the begin of the container of member templates
      * @return begin of container of member templates
      */
      MemberTemplate_Iterator MemberTemplate_Begin() const;


      /**
      * MemberTemplate_End returns the end of the container of member templates
      * @return end of container of member templates
      */
      MemberTemplate_Iterator MemberTemplate_End() const;


      /**
      * MemberTemplate_End returns the end of the container of member templates
      * @return end of container of member templates
      */
      Reverse_MemberTemplate_Iterator MemberTemplate_RBegin() const;


      /**
      * MemberTemplate_REnd returns the reverse end of the container of member templates
      * @return reverse end of container of member templates
      */
      Reverse_MemberTemplate_Iterator MemberTemplate_REnd() const;


      /**
      * Name returns the name of the type 
      * @param  mod qualifiers can be or'ed 
      *   FINAL     - resolve typedefs
      *   SCOPED    - fully scoped name 
      *   QUALIFIED - cv, reference qualification 
      * @return name of the type
      */
      std::string Name( unsigned int mod = 0 ) const;


      /**
      * Name_c_str returns a char* pointer to the qualified type name
      * @return c string to unqualified type name
      */
      const char * Name_c_str() const;

      /**
      * Properties will return a PropertyList attached to this item
      * @return PropertyList of this type
      */
      PropertyList Properties() const;


      /**
      * ScopeAt will return the nth scope defined in the system
      * @param  nth scope defined in the system
      * @return nth scope defined in the system
      */
      static Scope ScopeAt( size_t nth );


      /**
      * ScopeSize will return the number of currently defined scopes
      * @return number of currently defined scopes
      */
      static size_t ScopeSize();


      /**
      * Scope_Begin returns the begin of the container of scopes defined in the systems
      * @return begin of container of scopes defined in the systems
      */
      static Scope_Iterator Scope_Begin();


      /**
      * Scope_End returns the end of the container of scopes defined in the systems
      * @return end of container of scopes defined in the systems
      */
      static Scope_Iterator Scope_End();


      /**
      * Scope_RBegin returns the reverse begin of the container of scopes defined in the systems
      * @return reverse begin of container of scopes defined in the systems
      */
      static Reverse_Scope_Iterator Scope_RBegin();


      /**
      * Scope_REnd returns the reverse end of the container of scopes defined in the systems
      * @return reverse end of container of scopes defined in the systems
      */
      static Reverse_Scope_Iterator Scope_REnd();


      /**
      * ScopeType will return the enum information about this scope
      * @return enum information of this scope
      */
      TYPE ScopeType() const;


      /**
      * ScopeTypeAsString will return the string representation of the ENUM
      * representing the real type of the scope (e.g. "CLASS")
      * @return string representation of the TYPE enum of the scope
      */
      std::string ScopeTypeAsString() const;


      /**
      * SubScopeAt will return a pointer to a sub scopes
      * @param  nth sub scope
      * @return reflection information of nth sub scope
      */
      Scope SubScopeAt( size_t nth ) const;


      /**
      * SubScopeLevel will return the number of declaring scopes
      * this scope lives in.
      * @return number of declaring scopes above this scope.
      */ 
      size_t SubScopeLevel() const;


      /**
      * SubScopeSize will return the number of sub scopes
      * @return number of sub scopes
      */
      size_t SubScopeSize() const;


      /** 
      * SubScopeByName will return a sub scope representing the unscoped name passed
      * as argument
      * @param unscoped name of the sub scope to look for
      * @return Scope representation of the sub scope
      */
      Scope SubScopeByName( const std::string & nam ) const;


      /**
      * SubScope_Begin returns the begin of the container of sub scopes
      * @return begin of container of sub scopes
      */
      Scope_Iterator SubScope_Begin() const;


      /**
      * SubScope_End returns the end of the container of sub scopes
      * @return end of container of sub scopes
      */
      Scope_Iterator SubScope_End() const;


      /**
      * SubScope_RBegin returns the reverse begin of the container of sub scopes
      * @return reverse begin of container of sub scopes
      */
      Reverse_Scope_Iterator SubScope_RBegin() const;


      /**
      * SubScope_REnd returns the reverse end of the container of sub scopes
      * @return reverse end of container of sub scopes
      */
      Reverse_Scope_Iterator SubScope_REnd() const;


      /**
      * SubTypeAt will return the nth sub type
      * @param  nth sub type
      * @return reflection information of nth sub type
      */
      Type SubTypeAt( size_t nth ) const;


      /**
      * SubTypeSize will return he number of sub types
      * @return number of sub types
      */
      size_t SubTypeSize() const;


      /**
      * SubTypeByName will return the Type representing the sub type 
      * @param string of the unscoped sub type to look for
      * @return Type representation of the sub type
      */
      Type SubTypeByName( const std::string & nam ) const;


      /**
      * SubType_Begin returns the begin of the container of sub types
      * @return begin of container of sub types
      */
      Type_Iterator SubType_Begin() const;


      /**
      * SubType_End returns the end of the container of sub types
      * @return end of container of sub types
      */
      Type_Iterator SubType_End() const;


      /**
      * SubType_RBegin returns the reverse begin of the container of sub types
      * @return reverse begin of container of sub types
      */
      Reverse_Type_Iterator SubType_RBegin() const;


      /**
      * SubType_REnd returns the reverse end of the container of sub types
      * @return reverse end of container of sub types
      */
      Reverse_Type_Iterator SubType_REnd() const;


      /** 
      * SubTypeTemplateAt will return the nth type template of this type
      * @param nth type template
      * @return nth type template
      */
      TypeTemplate SubTypeTemplateAt( size_t nth ) const;


      /** 
      * SubTypeTemplateSize will return the number of type templates in this scope
      * @return number of defined type templates
      */
      size_t SubTypeTemplateSize() const;


      /**
      * SubTypeTemplateByName will return a type template defined in this scope looked up by 
      * it's unscoped name
      * @param unscoped name of the type template to look for
      * @return TypeTemplate representation of the sub type template
      */
      TypeTemplate SubTypeTemplateByName( const std::string & nam ) const;


      /**
      * SubTypeTemplate_Begin returns the begin of the container of sub type templates
      * @return begin of container of sub type templates
      */
      TypeTemplate_Iterator SubTypeTemplate_Begin() const;


      /**
      * SubTypeTemplate_End returns the end of the container of sub type templates
      * @return end of container of sub type templates
      */
      TypeTemplate_Iterator SubTypeTemplate_End() const;


      /**
      * SubTypeTemplate_RBegin returns the reverse begin of the container of sub type templates
      * @return reverse begin of container of sub type templates
      */
      Reverse_TypeTemplate_Iterator SubTypeTemplate_RBegin() const;


      /**
      * SubTypeTemplate_REnd returns the reverse end of the container of sub type templates
      * @return reverse end of container of sub type templates
      */
      Reverse_TypeTemplate_Iterator SubTypeTemplate_REnd() const;


      /**
      * TemplateArgumentAt will return a pointer to the nth template argument
      * @param  nth nth template argument
      * @return reflection information of nth template argument
      */
      Type TemplateArgumentAt( size_t nth ) const;


      /**
      * TemplateArgumentSize will return the number of template arguments
      * @return number of template arguments
      */
      size_t TemplateArgumentSize() const;


      /**
      * TemplateArgument_Begin returns the begin of the container of template arguments
      * @return begin of container of template arguments
      */
      Type_Iterator TemplateArgument_Begin() const;


      /**
      * TemplateArgument_End returns the end of the container of template arguments
      * @return end of container of template arguments
      */
      Type_Iterator TemplateArgument_End() const;


      /**
      * TemplateArgument_RBegin returns the reverse begin of the container of template arguments
      * @return reverse begin of container of template arguments
      */
      Reverse_Type_Iterator TemplateArgument_RBegin() const;


      /**
      * TemplateArgument_REnd returns the reverse end of the container of template arguments
      * @return reverse end of container of template arguments
      */
      Reverse_Type_Iterator TemplateArgument_REnd() const;


      /**
      * TemplateFamily returns the corresponding TypeTemplate if any
      * @return corresponding TypeTemplate
      */
      TypeTemplate TemplateFamily() const;


      /**
      * Unload will unload the dictionary information of a scope
      */
      void Unload() const;


      /** 
      * UpdateMembers will update the list of Function/Data/Members with all
      * members of base classes currently availabe in the system, switching
      * INHERITEDMEMBERS_DEFAULT to INHERITEDMEMBERS_ALSO.
      */
      void UpdateMembers() const;

      /**
      * UsingDirectiveAt will return the nth using directive
      * @param  nth using directive
      * @return nth using directive
      */
      Scope UsingDirectiveAt( size_t nth ) const;


      /**
      * UsingDirectiveSize will return the number of using directives of this scope
      * @return number of using directives declared in this scope
      */
      size_t UsingDirectiveSize() const;


      Scope_Iterator UsingDirective_Begin() const;
      Scope_Iterator UsingDirective_End() const;
      Reverse_Scope_Iterator UsingDirective_RBegin() const;
      Reverse_Scope_Iterator UsingDirective_REnd() const;

   public:

      /**
      * AddBase will add information about a Base class
      * @param base type of the base class
      * @param offsFP pointer to a function stub for calculating the base class offset
      * @param modifiers the modifiers of the base class
      */
      void AddBase(const Type & bas, OffsetFunction offsFP, unsigned int modifiers = 0) const;


      /**
      * AddBase will add the information about a Base class
      * @param b pointer to the base class
      */
      void AddBase(const Base & b) const;


      /**
      * AddDataMember will add the information about a data member
      * @param dm data member to add
      */
      void AddDataMember( const Member & dm ) const;


      /**
      * AddDataMember will add the information about a data member
      * @param nam the name of the data member
      * @param typ the type of the data member
      * @param offs the offset of the data member relative to the beginning of the scope
      * @param modifiers of the data member
      */
      Member AddDataMember( const char * name,
         const Type & type,
         size_t offset,
         unsigned int modifiers = 0,
         char * interpreterOffset = 0 ) const;

      /**
      * AddFunctionMember will add the information about a function member
      * @param fm function member to add
      */
      void AddFunctionMember( const Member & fm ) const;


      /**
      * AddFunctionMember will add the information about a function member
      * @param nam the name of the function member
      * @param typ the type of the function member
      * @param stubFP a pointer to the stub function
      * @param stubCtx a pointer to the context of the function member
      * @param params a semi colon separated list of parameters 
      * @param modifiers of the function member
      */ 
      Member AddFunctionMember( const char * name,
         const Type & type,
         StubFunction stubFP,
         void * stubCtx = 0,
         const char * params = 0,
         unsigned int modifiers = 0 ) const;


      /** 
      * AddMemberTemplate will add a member template to this scope
      * @param mt member template to add
      */
      void AddMemberTemplate( const MemberTemplate & mt ) const ;


      /**
      * AddSubScope will add a sub scope to this one
      * @param sc sub scope to add
      */
      void AddSubScope( const Scope & sc ) const;


      /**
      * AddSubScope will add a sub scope to this one
      * @param scop the name of the sub scope
      * @param scopeType enum value of the scope type
      */
      void AddSubScope( const char * scope,
         TYPE scopeType = NAMESPACE ) const;


      /**
      * AddSubType will add a sub type to this type
      * @param ty sub type to add
      */
      void AddSubType( const Type & ty ) const;


      /**
      * AddSubType will add a sub type to this type
      * @param typ the name of the sub type
      * @param size the sizeof of the sub type
      * @param typeType the enum specifying the sub type
      * @param ti the type_info of the sub type
      * @param modifiers of the sub type
      */
      void AddSubType( const char * type,
         size_t size,
         TYPE typeType,
         const std::type_info & typeInfo,
         unsigned int modifiers = 0 ) const;


      /** 
      * AddTypeTemplate will add a sub type template to this scope
      * @param tt type template to add
      */
      void AddSubTypeTemplate( const TypeTemplate & mt ) const ;


      /**
      * AddUsingDirective will add a using namespace directive to this scope
      * @param ud using directive to add
      */
      void AddUsingDirective( const Scope & ud ) const;


      /**
      * RemoveDataMember will remove the information about a data member
      * @param dm data member to remove
      */
      void RemoveDataMember( const Member & dm ) const;


      /**
      * RemoveFunctionMember will remove the information about a function member
      * @param fm function member to remove
      */
      void RemoveFunctionMember( const Member & fm ) const;


      /** 
      * RemoveMemberTemplate will remove a member template from this scope
      * @param mt member template to remove
      */
      void RemoveMemberTemplate( const MemberTemplate & mt ) const;


      /**
      * RemoveSubScope will remove a sub scope from this type
      * @param sc sub scope to remove
      */
      void RemoveSubScope( const Scope & sc ) const;


      /**
      * RemoveSubType will remove a sub type from this type
      * @param sc sub type to remove
      */
      void RemoveSubType( const Type & ty ) const;     


      /**
      * RemoveSubTypeTemplate will remove a sub type template from this scope
      * @param tt sub type template to remove
      */
      void RemoveSubTypeTemplate( const TypeTemplate & tt ) const;


      /** 
      * RemoveUsingDirective will remove a using namespace directive from this scope
      * @param ud using namespace directive to remove
      */
      void RemoveUsingDirective( const Scope & ud ) const;


      /** */
      const ScopeBase * ToScopeBase() const;

   public:

      /**
      * @label __NIRVANA__
      * @link association 
      */
      static Scope & __NIRVANA__();

   private:

      /**
      * pointer to the resolved scope
      * @label scope name
      * @link aggregation
      * @supplierCardinality 1
      * @clientCardinality 1
      */
      const ScopeName * fScopeName;

   }; // class Scope

   bool operator < ( const Scope & lh, 
      const Scope & rh); 

   bool operator == ( const Scope & lh,
      const Scope & rh );

} // namespace Reflex

#include "Reflex/internal/ScopeBase.h"
#include "Reflex/internal/ScopeName.h"
#include "Reflex/PropertyList.h"


//-------------------------------------------------------------------------------
inline bool Reflex::Scope::operator != ( const Scope & rh ) const {
//-------------------------------------------------------------------------------
   return ( fScopeName != rh.fScopeName );
}


//-------------------------------------------------------------------------------
inline bool Reflex::operator < ( const Scope & lh, 
                                       const Scope & rh ) {
//-------------------------------------------------------------------------------
   return const_cast<Scope*>(&lh)->Id() < const_cast<Scope*>(&rh)->Id();
}


//-------------------------------------------------------------------------------
inline bool Reflex::operator == ( const Scope & lh,
                                        const Scope & rh ) {
//-------------------------------------------------------------------------------
   return const_cast<Scope*>(&lh)->Id() == const_cast<Scope*>(&rh)->Id();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope::Scope( const ScopeName * scopeName ) 
//-------------------------------------------------------------------------------
   : fScopeName( scopeName ) {}


//-------------------------------------------------------------------------------
inline Reflex::Scope::Scope( const Scope & rh ) 
//-------------------------------------------------------------------------------
   : fScopeName( rh.fScopeName ) {}


//-------------------------------------------------------------------------------
inline Reflex::Scope::~Scope() {
//-------------------------------------------------------------------------------
}


//-------------------------------------------------------------------------------
inline Reflex::Scope::operator bool () const {
//-------------------------------------------------------------------------------
   if ( this->fScopeName && this->fScopeName->fScopeBase ) return true;
   //throw RuntimeError("Scope is not implemented");
   return false;
}


//-------------------------------------------------------------------------------
inline Reflex::Base_Iterator Reflex::Scope::Base_Begin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->Base_Begin();
   return Dummy::BaseCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::Base_Iterator Reflex::Scope::Base_End() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->Base_End();
   return Dummy::BaseCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Base_Iterator Reflex::Scope::Base_RBegin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->Base_RBegin();
   return Dummy::BaseCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Base_Iterator Reflex::Scope::Base_REnd() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->Base_REnd();
   return Dummy::BaseCont().rend();
}


//-------------------------------------------------------------------------------
inline Reflex::Member_Iterator Reflex::Scope::DataMember_Begin(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->DataMember_Begin(inh);
   return Dummy::MemberCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::Member_Iterator Reflex::Scope::DataMember_End(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->DataMember_End(inh);
   return Dummy::MemberCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Member_Iterator Reflex::Scope::DataMember_RBegin(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->DataMember_RBegin(inh);
   return Dummy::MemberCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Member_Iterator Reflex::Scope::DataMember_REnd(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->DataMember_REnd(inh);
   return Dummy::MemberCont().rend();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope Reflex::Scope::DeclaringScope() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->DeclaringScope();
   return Dummy::Scope();
}


//-------------------------------------------------------------------------------
inline Reflex::Member_Iterator Reflex::Scope::FunctionMember_Begin(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->FunctionMember_Begin(inh);
   return Dummy::MemberCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::Member_Iterator Reflex::Scope::FunctionMember_End(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->FunctionMember_End(inh);
   return Dummy::MemberCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Member_Iterator Reflex::Scope::FunctionMember_RBegin(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->FunctionMember_RBegin(inh);
   return Dummy::MemberCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Member_Iterator Reflex::Scope::FunctionMember_REnd(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->FunctionMember_REnd(inh);
   return Dummy::MemberCont().rend();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope Reflex::Scope::GlobalScope() {
//-------------------------------------------------------------------------------
  return ScopeBase::GlobalScope();
}


//-------------------------------------------------------------------------------
inline void * Reflex::Scope::Id() const {
//-------------------------------------------------------------------------------
   return (void*)fScopeName;
}


//-------------------------------------------------------------------------------
inline bool Reflex::Scope::IsClass() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->IsClass(); 
   return false;
}


//-------------------------------------------------------------------------------
inline bool Reflex::Scope::IsEnum() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->IsEnum(); 
   return false;
}


//-------------------------------------------------------------------------------
inline bool Reflex::Scope::IsNamespace() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->IsNamespace(); 
   return false;
}


//-------------------------------------------------------------------------------
inline bool Reflex::Scope::IsTemplateInstance() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->IsTemplateInstance(); 
   return false;
}


//-------------------------------------------------------------------------------
inline bool Reflex::Scope::IsTopScope() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->IsTopScope(); 
   return false;
}


//-------------------------------------------------------------------------------
inline bool Reflex::Scope::IsUnion() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->IsUnion(); 
   return false;
}


//-------------------------------------------------------------------------------
inline size_t Reflex::Scope::MemberSize(EMEMBERQUERY inh) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->MemberSize(inh); 
   return 0;
}


//-------------------------------------------------------------------------------
inline Reflex::MemberTemplate_Iterator Reflex::Scope::MemberTemplate_Begin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->MemberTemplate_Begin();
   return Dummy::MemberTemplateCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::MemberTemplate_Iterator Reflex::Scope::MemberTemplate_End() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->MemberTemplate_End();
   return Dummy::MemberTemplateCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_MemberTemplate_Iterator Reflex::Scope::MemberTemplate_RBegin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->MemberTemplate_RBegin();
   return Dummy::MemberTemplateCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_MemberTemplate_Iterator Reflex::Scope::MemberTemplate_REnd() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->MemberTemplate_REnd();
   return Dummy::MemberTemplateCont().rend();
}


//-------------------------------------------------------------------------------
inline const char * Reflex::Scope::Name_c_str() const {
//-------------------------------------------------------------------------------
   if ( fScopeName ) return fScopeName->Name_c_str();
   return "";
}


//-------------------------------------------------------------------------------
inline Reflex::PropertyList Reflex::Scope::Properties() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->Properties();
   return Dummy::PropertyList();
}


//-------------------------------------------------------------------------------
inline Reflex::TYPE Reflex::Scope::ScopeType() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->ScopeType(); 
   return UNRESOLVED;
}


//-------------------------------------------------------------------------------
inline std::string Reflex::Scope::ScopeTypeAsString() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->ScopeTypeAsString(); 
   return "UNRESOLVED";
}


//-------------------------------------------------------------------------------
inline Reflex::Scope_Iterator Reflex::Scope::Scope_Begin() {
//-------------------------------------------------------------------------------
   return ScopeName::Scope_Begin();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope_Iterator Reflex::Scope::Scope_End() {
//-------------------------------------------------------------------------------
   return ScopeName::Scope_End();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Scope_Iterator Reflex::Scope::Scope_RBegin() {
//-------------------------------------------------------------------------------
   return ScopeName::Scope_RBegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Scope_Iterator Reflex::Scope::Scope_REnd() {
//-------------------------------------------------------------------------------
   return ScopeName::Scope_REnd();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope Reflex::Scope::SubScopeAt( size_t nth ) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScopeAt( nth ); 
   return Dummy::Scope();
}


//-------------------------------------------------------------------------------
inline size_t Reflex::Scope::SubScopeLevel() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScopeLevel();
   return 0;
}


//-------------------------------------------------------------------------------
inline size_t Reflex::Scope::SubScopeSize() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScopeSize(); 
   return 0;
}



//-------------------------------------------------------------------------------
inline Reflex::Scope Reflex::Scope::SubScopeByName( const std::string & nam ) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScopeByName( nam );
   return Dummy::Scope();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope_Iterator Reflex::Scope::SubScope_Begin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScope_Begin();
   return Dummy::ScopeCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope_Iterator Reflex::Scope::SubScope_End() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScope_End();
   return Dummy::ScopeCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Scope_Iterator Reflex::Scope::SubScope_RBegin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScope_RBegin();
   return Dummy::ScopeCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Scope_Iterator Reflex::Scope::SubScope_REnd() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubScope_REnd();
   return Dummy::ScopeCont().rend();
}


//-------------------------------------------------------------------------------
inline Reflex::Type_Iterator Reflex::Scope::SubType_Begin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubType_Begin();
   return Dummy::TypeCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::Type_Iterator Reflex::Scope::SubType_End() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubType_End();
   return Dummy::TypeCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Type_Iterator Reflex::Scope::SubType_RBegin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubType_RBegin();
   return Dummy::TypeCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Type_Iterator Reflex::Scope::SubType_REnd() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubType_REnd();
   return Dummy::TypeCont().rend();
}


//-------------------------------------------------------------------------------
inline const Reflex::ScopeBase * Reflex::Scope::ToScopeBase() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase;
   return 0;
}


//-------------------------------------------------------------------------------
inline Reflex::TypeTemplate_Iterator Reflex::Scope::SubTypeTemplate_Begin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubTypeTemplate_Begin();
   return Dummy::TypeTemplateCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::TypeTemplate_Iterator Reflex::Scope::SubTypeTemplate_End() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubTypeTemplate_End();
   return Dummy::TypeTemplateCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_TypeTemplate_Iterator Reflex::Scope::SubTypeTemplate_RBegin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubTypeTemplate_RBegin();
   return Dummy::TypeTemplateCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_TypeTemplate_Iterator Reflex::Scope::SubTypeTemplate_REnd() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->SubTypeTemplate_REnd();
   return Dummy::TypeTemplateCont().rend();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope Reflex::Scope::UsingDirectiveAt( size_t nth ) const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->UsingDirectiveAt( nth );
   return Dummy::Scope();
}


//-------------------------------------------------------------------------------
inline size_t Reflex::Scope::UsingDirectiveSize() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->UsingDirectiveSize();
   return 0;
}


//-------------------------------------------------------------------------------
inline Reflex::Scope_Iterator Reflex::Scope::UsingDirective_Begin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->UsingDirective_Begin();
   return Dummy::ScopeCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::Scope_Iterator Reflex::Scope::UsingDirective_End() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->UsingDirective_End();
   return Dummy::ScopeCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Scope_Iterator Reflex::Scope::UsingDirective_RBegin() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->UsingDirective_RBegin();
   return Dummy::ScopeCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_Scope_Iterator Reflex::Scope::UsingDirective_REnd() const {
//-------------------------------------------------------------------------------
   if ( * this ) return fScopeName->fScopeBase->UsingDirective_REnd();
   return Dummy::ScopeCont().rend();
}


//-------------------------------------------------------------------------------
inline void Reflex::Scope::AddBase( const Type & bas,
                                    OffsetFunction offsFP,
                                    unsigned int modifiers /* = 0 */) const {
//-------------------------------------------------------------------------------
   if ( * this) fScopeName->fScopeBase->AddBase( bas, offsFP, modifiers );
}


//-------------------------------------------------------------------------------
inline void Reflex::Scope::AddBase(const Base & b) const {
//-------------------------------------------------------------------------------
   if ( * this) fScopeName->fScopeBase->AddBase( b );
}


//-------------------------------------------------------------------------------
inline void Reflex::Scope::AddSubScope( const Scope & sc ) const {
//-------------------------------------------------------------------------------
   if ( * this) fScopeName->fScopeBase->AddSubScope( sc );
}


//-------------------------------------------------------------------------------
inline void Reflex::Scope::AddSubScope( const char * scope,
                                              TYPE scopeType ) const {
//-------------------------------------------------------------------------------
   if ( * this ) fScopeName->fScopeBase->AddSubScope( scope, scopeType );
}


//-------------------------------------------------------------------------------
inline void Reflex::Scope::RemoveSubScope( const Scope & sc ) const {
//-------------------------------------------------------------------------------
   if ( * this) fScopeName->fScopeBase->RemoveSubScope( sc );
}


//-------------------------------------------------------------------------------
inline void Reflex::Scope::AddUsingDirective( const Scope & ud ) const {
//-------------------------------------------------------------------------------
   if ( * this ) fScopeName->fScopeBase->AddUsingDirective( ud );
}


//-------------------------------------------------------------------------------
inline void Reflex::Scope::RemoveUsingDirective( const Scope & ud ) const {
//-------------------------------------------------------------------------------
   if ( * this ) fScopeName->fScopeBase->RemoveUsingDirective( ud );
}

#ifdef REFLEX_CINT_MERGE
inline bool operator&&(bool b, const Reflex::Scope & rh) {
   return b && rh.operator bool();
}
inline bool operator&&(int i, const Reflex::Scope & rh) {
   return i && rh.operator bool();
}
inline bool operator||(bool b, const Reflex::Scope & rh) {
   return b || rh.operator bool();
}
inline bool operator||(int i, const Reflex::Scope & rh) {
   return i || rh.operator bool();
}
inline bool operator&&(char *c, const Reflex::Scope & rh) {
   return c && rh.operator bool();
}
inline bool operator||(char *c, const Reflex::Scope & rh) {
   return c ||rh.operator bool();
}
#endif

#endif // Reflex_Scope
 Scope.h:1
 Scope.h:2
 Scope.h:3
 Scope.h:4
 Scope.h:5
 Scope.h:6
 Scope.h:7
 Scope.h:8
 Scope.h:9
 Scope.h:10
 Scope.h:11
 Scope.h:12
 Scope.h:13
 Scope.h:14
 Scope.h:15
 Scope.h:16
 Scope.h:17
 Scope.h:18
 Scope.h:19
 Scope.h:20
 Scope.h:21
 Scope.h:22
 Scope.h:23
 Scope.h:24
 Scope.h:25
 Scope.h:26
 Scope.h:27
 Scope.h:28
 Scope.h:29
 Scope.h:30
 Scope.h:31
 Scope.h:32
 Scope.h:33
 Scope.h:34
 Scope.h:35
 Scope.h:36
 Scope.h:37
 Scope.h:38
 Scope.h:39
 Scope.h:40
 Scope.h:41
 Scope.h:42
 Scope.h:43
 Scope.h:44
 Scope.h:45
 Scope.h:46
 Scope.h:47
 Scope.h:48
 Scope.h:49
 Scope.h:50
 Scope.h:51
 Scope.h:52
 Scope.h:53
 Scope.h:54
 Scope.h:55
 Scope.h:56
 Scope.h:57
 Scope.h:58
 Scope.h:59
 Scope.h:60
 Scope.h:61
 Scope.h:62
 Scope.h:63
 Scope.h:64
 Scope.h:65
 Scope.h:66
 Scope.h:67
 Scope.h:68
 Scope.h:69
 Scope.h:70
 Scope.h:71
 Scope.h:72
 Scope.h:73
 Scope.h:74
 Scope.h:75
 Scope.h:76
 Scope.h:77
 Scope.h:78
 Scope.h:79
 Scope.h:80
 Scope.h:81
 Scope.h:82
 Scope.h:83
 Scope.h:84
 Scope.h:85
 Scope.h:86
 Scope.h:87
 Scope.h:88
 Scope.h:89
 Scope.h:90
 Scope.h:91
 Scope.h:92
 Scope.h:93
 Scope.h:94
 Scope.h:95
 Scope.h:96
 Scope.h:97
 Scope.h:98
 Scope.h:99
 Scope.h:100
 Scope.h:101
 Scope.h:102
 Scope.h:103
 Scope.h:104
 Scope.h:105
 Scope.h:106
 Scope.h:107
 Scope.h:108
 Scope.h:109
 Scope.h:110
 Scope.h:111
 Scope.h:112
 Scope.h:113
 Scope.h:114
 Scope.h:115
 Scope.h:116
 Scope.h:117
 Scope.h:118
 Scope.h:119
 Scope.h:120
 Scope.h:121
 Scope.h:122
 Scope.h:123
 Scope.h:124
 Scope.h:125
 Scope.h:126
 Scope.h:127
 Scope.h:128
 Scope.h:129
 Scope.h:130
 Scope.h:131
 Scope.h:132
 Scope.h:133
 Scope.h:134
 Scope.h:135
 Scope.h:136
 Scope.h:137
 Scope.h:138
 Scope.h:139
 Scope.h:140
 Scope.h:141
 Scope.h:142
 Scope.h:143
 Scope.h:144
 Scope.h:145
 Scope.h:146
 Scope.h:147
 Scope.h:148
 Scope.h:149
 Scope.h:150
 Scope.h:151
 Scope.h:152
 Scope.h:153
 Scope.h:154
 Scope.h:155
 Scope.h:156
 Scope.h:157
 Scope.h:158
 Scope.h:159
 Scope.h:160
 Scope.h:161
 Scope.h:162
 Scope.h:163
 Scope.h:164
 Scope.h:165
 Scope.h:166
 Scope.h:167
 Scope.h:168
 Scope.h:169
 Scope.h:170
 Scope.h:171
 Scope.h:172
 Scope.h:173
 Scope.h:174
 Scope.h:175
 Scope.h:176
 Scope.h:177
 Scope.h:178
 Scope.h:179
 Scope.h:180
 Scope.h:181
 Scope.h:182
 Scope.h:183
 Scope.h:184
 Scope.h:185
 Scope.h:186
 Scope.h:187
 Scope.h:188
 Scope.h:189
 Scope.h:190
 Scope.h:191
 Scope.h:192
 Scope.h:193
 Scope.h:194
 Scope.h:195
 Scope.h:196
 Scope.h:197
 Scope.h:198
 Scope.h:199
 Scope.h:200
 Scope.h:201
 Scope.h:202
 Scope.h:203
 Scope.h:204
 Scope.h:205
 Scope.h:206
 Scope.h:207
 Scope.h:208
 Scope.h:209
 Scope.h:210
 Scope.h:211
 Scope.h:212
 Scope.h:213
 Scope.h:214
 Scope.h:215
 Scope.h:216
 Scope.h:217
 Scope.h:218
 Scope.h:219
 Scope.h:220
 Scope.h:221
 Scope.h:222
 Scope.h:223
 Scope.h:224
 Scope.h:225
 Scope.h:226
 Scope.h:227
 Scope.h:228
 Scope.h:229
 Scope.h:230
 Scope.h:231
 Scope.h:232
 Scope.h:233
 Scope.h:234
 Scope.h:235
 Scope.h:236
 Scope.h:237
 Scope.h:238
 Scope.h:239
 Scope.h:240
 Scope.h:241
 Scope.h:242
 Scope.h:243
 Scope.h:244
 Scope.h:245
 Scope.h:246
 Scope.h:247
 Scope.h:248
 Scope.h:249
 Scope.h:250
 Scope.h:251
 Scope.h:252
 Scope.h:253
 Scope.h:254
 Scope.h:255
 Scope.h:256
 Scope.h:257
 Scope.h:258
 Scope.h:259
 Scope.h:260
 Scope.h:261
 Scope.h:262
 Scope.h:263
 Scope.h:264
 Scope.h:265
 Scope.h:266
 Scope.h:267
 Scope.h:268
 Scope.h:269
 Scope.h:270
 Scope.h:271
 Scope.h:272
 Scope.h:273
 Scope.h:274
 Scope.h:275
 Scope.h:276
 Scope.h:277
 Scope.h:278
 Scope.h:279
 Scope.h:280
 Scope.h:281
 Scope.h:282
 Scope.h:283
 Scope.h:284
 Scope.h:285
 Scope.h:286
 Scope.h:287
 Scope.h:288
 Scope.h:289
 Scope.h:290
 Scope.h:291
 Scope.h:292
 Scope.h:293
 Scope.h:294
 Scope.h:295
 Scope.h:296
 Scope.h:297
 Scope.h:298
 Scope.h:299
 Scope.h:300
 Scope.h:301
 Scope.h:302
 Scope.h:303
 Scope.h:304
 Scope.h:305
 Scope.h:306
 Scope.h:307
 Scope.h:308
 Scope.h:309
 Scope.h:310
 Scope.h:311
 Scope.h:312
 Scope.h:313
 Scope.h:314
 Scope.h:315
 Scope.h:316
 Scope.h:317
 Scope.h:318
 Scope.h:319
 Scope.h:320
 Scope.h:321
 Scope.h:322
 Scope.h:323
 Scope.h:324
 Scope.h:325
 Scope.h:326
 Scope.h:327
 Scope.h:328
 Scope.h:329
 Scope.h:330
 Scope.h:331
 Scope.h:332
 Scope.h:333
 Scope.h:334
 Scope.h:335
 Scope.h:336
 Scope.h:337
 Scope.h:338
 Scope.h:339
 Scope.h:340
 Scope.h:341
 Scope.h:342
 Scope.h:343
 Scope.h:344
 Scope.h:345
 Scope.h:346
 Scope.h:347
 Scope.h:348
 Scope.h:349
 Scope.h:350
 Scope.h:351
 Scope.h:352
 Scope.h:353
 Scope.h:354
 Scope.h:355
 Scope.h:356
 Scope.h:357
 Scope.h:358
 Scope.h:359
 Scope.h:360
 Scope.h:361
 Scope.h:362
 Scope.h:363
 Scope.h:364
 Scope.h:365
 Scope.h:366
 Scope.h:367
 Scope.h:368
 Scope.h:369
 Scope.h:370
 Scope.h:371
 Scope.h:372
 Scope.h:373
 Scope.h:374
 Scope.h:375
 Scope.h:376
 Scope.h:377
 Scope.h:378
 Scope.h:379
 Scope.h:380
 Scope.h:381
 Scope.h:382
 Scope.h:383
 Scope.h:384
 Scope.h:385
 Scope.h:386
 Scope.h:387
 Scope.h:388
 Scope.h:389
 Scope.h:390
 Scope.h:391
 Scope.h:392
 Scope.h:393
 Scope.h:394
 Scope.h:395
 Scope.h:396
 Scope.h:397
 Scope.h:398
 Scope.h:399
 Scope.h:400
 Scope.h:401
 Scope.h:402
 Scope.h:403
 Scope.h:404
 Scope.h:405
 Scope.h:406
 Scope.h:407
 Scope.h:408
 Scope.h:409
 Scope.h:410
 Scope.h:411
 Scope.h:412
 Scope.h:413
 Scope.h:414
 Scope.h:415
 Scope.h:416
 Scope.h:417
 Scope.h:418
 Scope.h:419
 Scope.h:420
 Scope.h:421
 Scope.h:422
 Scope.h:423
 Scope.h:424
 Scope.h:425
 Scope.h:426
 Scope.h:427
 Scope.h:428
 Scope.h:429
 Scope.h:430
 Scope.h:431
 Scope.h:432
 Scope.h:433
 Scope.h:434
 Scope.h:435
 Scope.h:436
 Scope.h:437
 Scope.h:438
 Scope.h:439
 Scope.h:440
 Scope.h:441
 Scope.h:442
 Scope.h:443
 Scope.h:444
 Scope.h:445
 Scope.h:446
 Scope.h:447
 Scope.h:448
 Scope.h:449
 Scope.h:450
 Scope.h:451
 Scope.h:452
 Scope.h:453
 Scope.h:454
 Scope.h:455
 Scope.h:456
 Scope.h:457
 Scope.h:458
 Scope.h:459
 Scope.h:460
 Scope.h:461
 Scope.h:462
 Scope.h:463
 Scope.h:464
 Scope.h:465
 Scope.h:466
 Scope.h:467
 Scope.h:468
 Scope.h:469
 Scope.h:470
 Scope.h:471
 Scope.h:472
 Scope.h:473
 Scope.h:474
 Scope.h:475
 Scope.h:476
 Scope.h:477
 Scope.h:478
 Scope.h:479
 Scope.h:480
 Scope.h:481
 Scope.h:482
 Scope.h:483
 Scope.h:484
 Scope.h:485
 Scope.h:486
 Scope.h:487
 Scope.h:488
 Scope.h:489
 Scope.h:490
 Scope.h:491
 Scope.h:492
 Scope.h:493
 Scope.h:494
 Scope.h:495
 Scope.h:496
 Scope.h:497
 Scope.h:498
 Scope.h:499
 Scope.h:500
 Scope.h:501
 Scope.h:502
 Scope.h:503
 Scope.h:504
 Scope.h:505
 Scope.h:506
 Scope.h:507
 Scope.h:508
 Scope.h:509
 Scope.h:510
 Scope.h:511
 Scope.h:512
 Scope.h:513
 Scope.h:514
 Scope.h:515
 Scope.h:516
 Scope.h:517
 Scope.h:518
 Scope.h:519
 Scope.h:520
 Scope.h:521
 Scope.h:522
 Scope.h:523
 Scope.h:524
 Scope.h:525
 Scope.h:526
 Scope.h:527
 Scope.h:528
 Scope.h:529
 Scope.h:530
 Scope.h:531
 Scope.h:532
 Scope.h:533
 Scope.h:534
 Scope.h:535
 Scope.h:536
 Scope.h:537
 Scope.h:538
 Scope.h:539
 Scope.h:540
 Scope.h:541
 Scope.h:542
 Scope.h:543
 Scope.h:544
 Scope.h:545
 Scope.h:546
 Scope.h:547
 Scope.h:548
 Scope.h:549
 Scope.h:550
 Scope.h:551
 Scope.h:552
 Scope.h:553
 Scope.h:554
 Scope.h:555
 Scope.h:556
 Scope.h:557
 Scope.h:558
 Scope.h:559
 Scope.h:560
 Scope.h:561
 Scope.h:562
 Scope.h:563
 Scope.h:564
 Scope.h:565
 Scope.h:566
 Scope.h:567
 Scope.h:568
 Scope.h:569
 Scope.h:570
 Scope.h:571
 Scope.h:572
 Scope.h:573
 Scope.h:574
 Scope.h:575
 Scope.h:576
 Scope.h:577
 Scope.h:578
 Scope.h:579
 Scope.h:580
 Scope.h:581
 Scope.h:582
 Scope.h:583
 Scope.h:584
 Scope.h:585
 Scope.h:586
 Scope.h:587
 Scope.h:588
 Scope.h:589
 Scope.h:590
 Scope.h:591
 Scope.h:592
 Scope.h:593
 Scope.h:594
 Scope.h:595
 Scope.h:596
 Scope.h:597
 Scope.h:598
 Scope.h:599
 Scope.h:600
 Scope.h:601
 Scope.h:602
 Scope.h:603
 Scope.h:604
 Scope.h:605
 Scope.h:606
 Scope.h:607
 Scope.h:608
 Scope.h:609
 Scope.h:610
 Scope.h:611
 Scope.h:612
 Scope.h:613
 Scope.h:614
 Scope.h:615
 Scope.h:616
 Scope.h:617
 Scope.h:618
 Scope.h:619
 Scope.h:620
 Scope.h:621
 Scope.h:622
 Scope.h:623
 Scope.h:624
 Scope.h:625
 Scope.h:626
 Scope.h:627
 Scope.h:628
 Scope.h:629
 Scope.h:630
 Scope.h:631
 Scope.h:632
 Scope.h:633
 Scope.h:634
 Scope.h:635
 Scope.h:636
 Scope.h:637
 Scope.h:638
 Scope.h:639
 Scope.h:640
 Scope.h:641
 Scope.h:642
 Scope.h:643
 Scope.h:644
 Scope.h:645
 Scope.h:646
 Scope.h:647
 Scope.h:648
 Scope.h:649
 Scope.h:650
 Scope.h:651
 Scope.h:652
 Scope.h:653
 Scope.h:654
 Scope.h:655
 Scope.h:656
 Scope.h:657
 Scope.h:658
 Scope.h:659
 Scope.h:660
 Scope.h:661
 Scope.h:662
 Scope.h:663
 Scope.h:664
 Scope.h:665
 Scope.h:666
 Scope.h:667
 Scope.h:668
 Scope.h:669
 Scope.h:670
 Scope.h:671
 Scope.h:672
 Scope.h:673
 Scope.h:674
 Scope.h:675
 Scope.h:676
 Scope.h:677
 Scope.h:678
 Scope.h:679
 Scope.h:680
 Scope.h:681
 Scope.h:682
 Scope.h:683
 Scope.h:684
 Scope.h:685
 Scope.h:686
 Scope.h:687
 Scope.h:688
 Scope.h:689
 Scope.h:690
 Scope.h:691
 Scope.h:692
 Scope.h:693
 Scope.h:694
 Scope.h:695
 Scope.h:696
 Scope.h:697
 Scope.h:698
 Scope.h:699
 Scope.h:700
 Scope.h:701
 Scope.h:702
 Scope.h:703
 Scope.h:704
 Scope.h:705
 Scope.h:706
 Scope.h:707
 Scope.h:708
 Scope.h:709
 Scope.h:710
 Scope.h:711
 Scope.h:712
 Scope.h:713
 Scope.h:714
 Scope.h:715
 Scope.h:716
 Scope.h:717
 Scope.h:718
 Scope.h:719
 Scope.h:720
 Scope.h:721
 Scope.h:722
 Scope.h:723
 Scope.h:724
 Scope.h:725
 Scope.h:726
 Scope.h:727
 Scope.h:728
 Scope.h:729
 Scope.h:730
 Scope.h:731
 Scope.h:732
 Scope.h:733
 Scope.h:734
 Scope.h:735
 Scope.h:736
 Scope.h:737
 Scope.h:738
 Scope.h:739
 Scope.h:740
 Scope.h:741
 Scope.h:742
 Scope.h:743
 Scope.h:744
 Scope.h:745
 Scope.h:746
 Scope.h:747
 Scope.h:748
 Scope.h:749
 Scope.h:750
 Scope.h:751
 Scope.h:752
 Scope.h:753
 Scope.h:754
 Scope.h:755
 Scope.h:756
 Scope.h:757
 Scope.h:758
 Scope.h:759
 Scope.h:760
 Scope.h:761
 Scope.h:762
 Scope.h:763
 Scope.h:764
 Scope.h:765
 Scope.h:766
 Scope.h:767
 Scope.h:768
 Scope.h:769
 Scope.h:770
 Scope.h:771
 Scope.h:772
 Scope.h:773
 Scope.h:774
 Scope.h:775
 Scope.h:776
 Scope.h:777
 Scope.h:778
 Scope.h:779
 Scope.h:780
 Scope.h:781
 Scope.h:782
 Scope.h:783
 Scope.h:784
 Scope.h:785
 Scope.h:786
 Scope.h:787
 Scope.h:788
 Scope.h:789
 Scope.h:790
 Scope.h:791
 Scope.h:792
 Scope.h:793
 Scope.h:794
 Scope.h:795
 Scope.h:796
 Scope.h:797
 Scope.h:798
 Scope.h:799
 Scope.h:800
 Scope.h:801
 Scope.h:802
 Scope.h:803
 Scope.h:804
 Scope.h:805
 Scope.h:806
 Scope.h:807
 Scope.h:808
 Scope.h:809
 Scope.h:810
 Scope.h:811
 Scope.h:812
 Scope.h:813
 Scope.h:814
 Scope.h:815
 Scope.h:816
 Scope.h:817
 Scope.h:818
 Scope.h:819
 Scope.h:820
 Scope.h:821
 Scope.h:822
 Scope.h:823
 Scope.h:824
 Scope.h:825
 Scope.h:826
 Scope.h:827
 Scope.h:828
 Scope.h:829
 Scope.h:830
 Scope.h:831
 Scope.h:832
 Scope.h:833
 Scope.h:834
 Scope.h:835
 Scope.h:836
 Scope.h:837
 Scope.h:838
 Scope.h:839
 Scope.h:840
 Scope.h:841
 Scope.h:842
 Scope.h:843
 Scope.h:844
 Scope.h:845
 Scope.h:846
 Scope.h:847
 Scope.h:848
 Scope.h:849
 Scope.h:850
 Scope.h:851
 Scope.h:852
 Scope.h:853
 Scope.h:854
 Scope.h:855
 Scope.h:856
 Scope.h:857
 Scope.h:858
 Scope.h:859
 Scope.h:860
 Scope.h:861
 Scope.h:862
 Scope.h:863
 Scope.h:864
 Scope.h:865
 Scope.h:866
 Scope.h:867
 Scope.h:868
 Scope.h:869
 Scope.h:870
 Scope.h:871
 Scope.h:872
 Scope.h:873
 Scope.h:874
 Scope.h:875
 Scope.h:876
 Scope.h:877
 Scope.h:878
 Scope.h:879
 Scope.h:880
 Scope.h:881
 Scope.h:882
 Scope.h:883
 Scope.h:884
 Scope.h:885
 Scope.h:886
 Scope.h:887
 Scope.h:888
 Scope.h:889
 Scope.h:890
 Scope.h:891
 Scope.h:892
 Scope.h:893
 Scope.h:894
 Scope.h:895
 Scope.h:896
 Scope.h:897
 Scope.h:898
 Scope.h:899
 Scope.h:900
 Scope.h:901
 Scope.h:902
 Scope.h:903
 Scope.h:904
 Scope.h:905
 Scope.h:906
 Scope.h:907
 Scope.h:908
 Scope.h:909
 Scope.h:910
 Scope.h:911
 Scope.h:912
 Scope.h:913
 Scope.h:914
 Scope.h:915
 Scope.h:916
 Scope.h:917
 Scope.h:918
 Scope.h:919
 Scope.h:920
 Scope.h:921
 Scope.h:922
 Scope.h:923
 Scope.h:924
 Scope.h:925
 Scope.h:926
 Scope.h:927
 Scope.h:928
 Scope.h:929
 Scope.h:930
 Scope.h:931
 Scope.h:932
 Scope.h:933
 Scope.h:934
 Scope.h:935
 Scope.h:936
 Scope.h:937
 Scope.h:938
 Scope.h:939
 Scope.h:940
 Scope.h:941
 Scope.h:942
 Scope.h:943
 Scope.h:944
 Scope.h:945
 Scope.h:946
 Scope.h:947
 Scope.h:948
 Scope.h:949
 Scope.h:950
 Scope.h:951
 Scope.h:952
 Scope.h:953
 Scope.h:954
 Scope.h:955
 Scope.h:956
 Scope.h:957
 Scope.h:958
 Scope.h:959
 Scope.h:960
 Scope.h:961
 Scope.h:962
 Scope.h:963
 Scope.h:964
 Scope.h:965
 Scope.h:966
 Scope.h:967
 Scope.h:968
 Scope.h:969
 Scope.h:970
 Scope.h:971
 Scope.h:972
 Scope.h:973
 Scope.h:974
 Scope.h:975
 Scope.h:976
 Scope.h:977
 Scope.h:978
 Scope.h:979
 Scope.h:980
 Scope.h:981
 Scope.h:982
 Scope.h:983
 Scope.h:984
 Scope.h:985
 Scope.h:986
 Scope.h:987
 Scope.h:988
 Scope.h:989
 Scope.h:990
 Scope.h:991
 Scope.h:992
 Scope.h:993
 Scope.h:994
 Scope.h:995
 Scope.h:996
 Scope.h:997
 Scope.h:998
 Scope.h:999
 Scope.h:1000
 Scope.h:1001
 Scope.h:1002
 Scope.h:1003
 Scope.h:1004
 Scope.h:1005
 Scope.h:1006
 Scope.h:1007
 Scope.h:1008
 Scope.h:1009
 Scope.h:1010
 Scope.h:1011
 Scope.h:1012
 Scope.h:1013
 Scope.h:1014
 Scope.h:1015
 Scope.h:1016
 Scope.h:1017
 Scope.h:1018
 Scope.h:1019
 Scope.h:1020
 Scope.h:1021
 Scope.h:1022
 Scope.h:1023
 Scope.h:1024
 Scope.h:1025
 Scope.h:1026
 Scope.h:1027
 Scope.h:1028
 Scope.h:1029
 Scope.h:1030
 Scope.h:1031
 Scope.h:1032
 Scope.h:1033
 Scope.h:1034
 Scope.h:1035
 Scope.h:1036
 Scope.h:1037
 Scope.h:1038
 Scope.h:1039
 Scope.h:1040
 Scope.h:1041
 Scope.h:1042
 Scope.h:1043
 Scope.h:1044
 Scope.h:1045
 Scope.h:1046
 Scope.h:1047
 Scope.h:1048
 Scope.h:1049
 Scope.h:1050
 Scope.h:1051
 Scope.h:1052
 Scope.h:1053
 Scope.h:1054
 Scope.h:1055
 Scope.h:1056
 Scope.h:1057
 Scope.h:1058
 Scope.h:1059
 Scope.h:1060
 Scope.h:1061
 Scope.h:1062
 Scope.h:1063
 Scope.h:1064
 Scope.h:1065
 Scope.h:1066
 Scope.h:1067
 Scope.h:1068
 Scope.h:1069
 Scope.h:1070
 Scope.h:1071
 Scope.h:1072
 Scope.h:1073
 Scope.h:1074
 Scope.h:1075
 Scope.h:1076
 Scope.h:1077
 Scope.h:1078
 Scope.h:1079
 Scope.h:1080
 Scope.h:1081
 Scope.h:1082
 Scope.h:1083
 Scope.h:1084
 Scope.h:1085
 Scope.h:1086
 Scope.h:1087
 Scope.h:1088
 Scope.h:1089
 Scope.h:1090
 Scope.h:1091
 Scope.h:1092
 Scope.h:1093
 Scope.h:1094
 Scope.h:1095
 Scope.h:1096
 Scope.h:1097
 Scope.h:1098
 Scope.h:1099
 Scope.h:1100
 Scope.h:1101
 Scope.h:1102
 Scope.h:1103
 Scope.h:1104
 Scope.h:1105
 Scope.h:1106
 Scope.h:1107
 Scope.h:1108
 Scope.h:1109
 Scope.h:1110
 Scope.h:1111
 Scope.h:1112
 Scope.h:1113
 Scope.h:1114
 Scope.h:1115
 Scope.h:1116
 Scope.h:1117
 Scope.h:1118
 Scope.h:1119
 Scope.h:1120
 Scope.h:1121
 Scope.h:1122
 Scope.h:1123
 Scope.h:1124
 Scope.h:1125
 Scope.h:1126
 Scope.h:1127
 Scope.h:1128
 Scope.h:1129
 Scope.h:1130
 Scope.h:1131
 Scope.h:1132
 Scope.h:1133
 Scope.h:1134
 Scope.h:1135
 Scope.h:1136
 Scope.h:1137
 Scope.h:1138
 Scope.h:1139
 Scope.h:1140
 Scope.h:1141
 Scope.h:1142
 Scope.h:1143
 Scope.h:1144
 Scope.h:1145
 Scope.h:1146
 Scope.h:1147
 Scope.h:1148
 Scope.h:1149
 Scope.h:1150
 Scope.h:1151
 Scope.h:1152
 Scope.h:1153
 Scope.h:1154
 Scope.h:1155
 Scope.h:1156
 Scope.h:1157
 Scope.h:1158
 Scope.h:1159
 Scope.h:1160
 Scope.h:1161
 Scope.h:1162
 Scope.h:1163
 Scope.h:1164
 Scope.h:1165
 Scope.h:1166
 Scope.h:1167
 Scope.h:1168
 Scope.h:1169
 Scope.h:1170
 Scope.h:1171
 Scope.h:1172
 Scope.h:1173
 Scope.h:1174
 Scope.h:1175
 Scope.h:1176
 Scope.h:1177
 Scope.h:1178
 Scope.h:1179
 Scope.h:1180
 Scope.h:1181
 Scope.h:1182
 Scope.h:1183
 Scope.h:1184
 Scope.h:1185
 Scope.h:1186
 Scope.h:1187
 Scope.h:1188
 Scope.h:1189
 Scope.h:1190
 Scope.h:1191
 Scope.h:1192
 Scope.h:1193
 Scope.h:1194
 Scope.h:1195
 Scope.h:1196
 Scope.h:1197
 Scope.h:1198
 Scope.h:1199
 Scope.h:1200
 Scope.h:1201
 Scope.h:1202
 Scope.h:1203
 Scope.h:1204
 Scope.h:1205
 Scope.h:1206
 Scope.h:1207
 Scope.h:1208
 Scope.h:1209
 Scope.h:1210
 Scope.h:1211
 Scope.h:1212
 Scope.h:1213
 Scope.h:1214
 Scope.h:1215
 Scope.h:1216
 Scope.h:1217
 Scope.h:1218
 Scope.h:1219
 Scope.h:1220
 Scope.h:1221
 Scope.h:1222
 Scope.h:1223
 Scope.h:1224
 Scope.h:1225
 Scope.h:1226
 Scope.h:1227
 Scope.h:1228
 Scope.h:1229
 Scope.h:1230
 Scope.h:1231
 Scope.h:1232
 Scope.h:1233
 Scope.h:1234
 Scope.h:1235
 Scope.h:1236
 Scope.h:1237
 Scope.h:1238
 Scope.h:1239
 Scope.h:1240
 Scope.h:1241
 Scope.h:1242
 Scope.h:1243
 Scope.h:1244
 Scope.h:1245
 Scope.h:1246
 Scope.h:1247
 Scope.h:1248
 Scope.h:1249
 Scope.h:1250
 Scope.h:1251
 Scope.h:1252
 Scope.h:1253
 Scope.h:1254
 Scope.h:1255
 Scope.h:1256
 Scope.h:1257
 Scope.h:1258
 Scope.h:1259
 Scope.h:1260
 Scope.h:1261
 Scope.h:1262
 Scope.h:1263
 Scope.h:1264
 Scope.h:1265
 Scope.h:1266
 Scope.h:1267
 Scope.h:1268
 Scope.h:1269
 Scope.h:1270
 Scope.h:1271
 Scope.h:1272
 Scope.h:1273
 Scope.h:1274
 Scope.h:1275
 Scope.h:1276
 Scope.h:1277
 Scope.h:1278
 Scope.h:1279
 Scope.h:1280
 Scope.h:1281
 Scope.h:1282
 Scope.h:1283
 Scope.h:1284
 Scope.h:1285
 Scope.h:1286
 Scope.h:1287
 Scope.h:1288
 Scope.h:1289
 Scope.h:1290
 Scope.h:1291
 Scope.h:1292
 Scope.h:1293
 Scope.h:1294
 Scope.h:1295
 Scope.h:1296
 Scope.h:1297
 Scope.h:1298
 Scope.h:1299
 Scope.h:1300
 Scope.h:1301
 Scope.h:1302
 Scope.h:1303
 Scope.h:1304
 Scope.h:1305
 Scope.h:1306
 Scope.h:1307
 Scope.h:1308
 Scope.h:1309
 Scope.h:1310
 Scope.h:1311
 Scope.h:1312
 Scope.h:1313
 Scope.h:1314
 Scope.h:1315
 Scope.h:1316
 Scope.h:1317
 Scope.h:1318
 Scope.h:1319
 Scope.h:1320
 Scope.h:1321
 Scope.h:1322
 Scope.h:1323
 Scope.h:1324
 Scope.h:1325
 Scope.h:1326
 Scope.h:1327
 Scope.h:1328
 Scope.h:1329
 Scope.h:1330
 Scope.h:1331
 Scope.h:1332
 Scope.h:1333
 Scope.h:1334
 Scope.h:1335
 Scope.h:1336
 Scope.h:1337
 Scope.h:1338
 Scope.h:1339
 Scope.h:1340
 Scope.h:1341
 Scope.h:1342
 Scope.h:1343
 Scope.h:1344
 Scope.h:1345
 Scope.h:1346
 Scope.h:1347
 Scope.h:1348
 Scope.h:1349
 Scope.h:1350
 Scope.h:1351
 Scope.h:1352
 Scope.h:1353
 Scope.h:1354
 Scope.h:1355
 Scope.h:1356
 Scope.h:1357
 Scope.h:1358
 Scope.h:1359
 Scope.h:1360
 Scope.h:1361
 Scope.h:1362
 Scope.h:1363
 Scope.h:1364
 Scope.h:1365
 Scope.h:1366
 Scope.h:1367
 Scope.h:1368
 Scope.h:1369
 Scope.h:1370
 Scope.h:1371
 Scope.h:1372
 Scope.h:1373
 Scope.h:1374
 Scope.h:1375
 Scope.h:1376
 Scope.h:1377
 Scope.h:1378
 Scope.h:1379
 Scope.h:1380
 Scope.h:1381
 Scope.h:1382
 Scope.h:1383
 Scope.h:1384
 Scope.h:1385
 Scope.h:1386
 Scope.h:1387
 Scope.h:1388
 Scope.h:1389
 Scope.h:1390
 Scope.h:1391
 Scope.h:1392
 Scope.h:1393
 Scope.h:1394
 Scope.h:1395
 Scope.h:1396
 Scope.h:1397
 Scope.h:1398
 Scope.h:1399
 Scope.h:1400
 Scope.h:1401
 Scope.h:1402
 Scope.h:1403
 Scope.h:1404
 Scope.h:1405
 Scope.h:1406
 Scope.h:1407
 Scope.h:1408
 Scope.h:1409
 Scope.h:1410
 Scope.h:1411
 Scope.h:1412
 Scope.h:1413
 Scope.h:1414
 Scope.h:1415
 Scope.h:1416
 Scope.h:1417
 Scope.h:1418
 Scope.h:1419
 Scope.h:1420
 Scope.h:1421
 Scope.h:1422
 Scope.h:1423
 Scope.h:1424
 Scope.h:1425
 Scope.h:1426
 Scope.h:1427
 Scope.h:1428
 Scope.h:1429
 Scope.h:1430
 Scope.h:1431
 Scope.h:1432
 Scope.h:1433
 Scope.h:1434
 Scope.h:1435
 Scope.h:1436
 Scope.h:1437
 Scope.h:1438
 Scope.h:1439
 Scope.h:1440
 Scope.h:1441
 Scope.h:1442
 Scope.h:1443
 Scope.h:1444
 Scope.h:1445
 Scope.h:1446
 Scope.h:1447
 Scope.h:1448
 Scope.h:1449
 Scope.h:1450
 Scope.h:1451
 Scope.h:1452
 Scope.h:1453
 Scope.h:1454
 Scope.h:1455
 Scope.h:1456
 Scope.h:1457
 Scope.h:1458
 Scope.h:1459
 Scope.h:1460
 Scope.h:1461
 Scope.h:1462
 Scope.h:1463
 Scope.h:1464
 Scope.h:1465
 Scope.h:1466
 Scope.h:1467
 Scope.h:1468
 Scope.h:1469
 Scope.h:1470
 Scope.h:1471
 Scope.h:1472
 Scope.h:1473
 Scope.h:1474
 Scope.h:1475
 Scope.h:1476
 Scope.h:1477
 Scope.h:1478
 Scope.h:1479
 Scope.h:1480
 Scope.h:1481
 Scope.h:1482
 Scope.h:1483
 Scope.h:1484
 Scope.h:1485
 Scope.h:1486
 Scope.h:1487
 Scope.h:1488
 Scope.h:1489
 Scope.h:1490
 Scope.h:1491
 Scope.h:1492
 Scope.h:1493
 Scope.h:1494
 Scope.h:1495
 Scope.h:1496
 Scope.h:1497
 Scope.h:1498
 Scope.h:1499
 Scope.h:1500
 Scope.h:1501
 Scope.h:1502
 Scope.h:1503
 Scope.h:1504
 Scope.h:1505
 Scope.h:1506
 Scope.h:1507
 Scope.h:1508
 Scope.h:1509
 Scope.h:1510
 Scope.h:1511
 Scope.h:1512
 Scope.h:1513
 Scope.h:1514
 Scope.h:1515
 Scope.h:1516
 Scope.h:1517
 Scope.h:1518
 Scope.h:1519
 Scope.h:1520
 Scope.h:1521
 Scope.h:1522
 Scope.h:1523
 Scope.h:1524
 Scope.h:1525
 Scope.h:1526
 Scope.h:1527
 Scope.h:1528
 Scope.h:1529
 Scope.h:1530
 Scope.h:1531
 Scope.h:1532
 Scope.h:1533
 Scope.h:1534
 Scope.h:1535
 Scope.h:1536
 Scope.h:1537
 Scope.h:1538
 Scope.h:1539
 Scope.h:1540
 Scope.h:1541
 Scope.h:1542
 Scope.h:1543
 Scope.h:1544
 Scope.h:1545
 Scope.h:1546
 Scope.h:1547
 Scope.h:1548
 Scope.h:1549
 Scope.h:1550
 Scope.h:1551
 Scope.h:1552
 Scope.h:1553
 Scope.h:1554
 Scope.h:1555
 Scope.h:1556
 Scope.h:1557
 Scope.h:1558
 Scope.h:1559
 Scope.h:1560
 Scope.h:1561
 Scope.h:1562
 Scope.h:1563
 Scope.h:1564
 Scope.h:1565
 Scope.h:1566
 Scope.h:1567
 Scope.h:1568
 Scope.h:1569
 Scope.h:1570
 Scope.h:1571
 Scope.h:1572
 Scope.h:1573
 Scope.h:1574
 Scope.h:1575
 Scope.h:1576
 Scope.h:1577
 Scope.h:1578
 Scope.h:1579
 Scope.h:1580
 Scope.h:1581
 Scope.h:1582
 Scope.h:1583
 Scope.h:1584
 Scope.h:1585
 Scope.h:1586
 Scope.h:1587
 Scope.h:1588
 Scope.h:1589
 Scope.h:1590
 Scope.h:1591
 Scope.h:1592
 Scope.h:1593
 Scope.h:1594
 Scope.h:1595
 Scope.h:1596
 Scope.h:1597
 Scope.h:1598
 Scope.h:1599
 Scope.h:1600
 Scope.h:1601
 Scope.h:1602
 Scope.h:1603
 Scope.h:1604
 Scope.h:1605
 Scope.h:1606
 Scope.h:1607
 Scope.h:1608
 Scope.h:1609
 Scope.h:1610
 Scope.h:1611
 Scope.h:1612
 Scope.h:1613
 Scope.h:1614
 Scope.h:1615
 Scope.h:1616
 Scope.h:1617
 Scope.h:1618
 Scope.h:1619
 Scope.h:1620
 Scope.h:1621
 Scope.h:1622
 Scope.h:1623
 Scope.h:1624
 Scope.h:1625
 Scope.h:1626
 Scope.h:1627
 Scope.h:1628
 Scope.h:1629