ROOT logo
// @(#)root/reflex:$Id: Scope.h 32228 2010-02-05 16:13:09Z axel $
// Author: Stefan Roiser 2004

// Copyright CERN, CH-1211 Geneva 23, 2004-2010, 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,
                               EDELAYEDLOADSETTING allowDelayedLoad = DELAYEDLOAD_ON) 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,
                               EDELAYEDLOADSETTING allowDelayedLoad = DELAYEDLOAD_ON) 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,
                                           EDELAYEDLOADSETTING allowDelayedLoad = DELAYEDLOAD_ON) 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();
   }
   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
 Scope.h:1630
 Scope.h:1631
 Scope.h:1632
 Scope.h:1633
 Scope.h:1634
 Scope.h:1635
 Scope.h:1636
 Scope.h:1637
 Scope.h:1638
 Scope.h:1639
 Scope.h:1640
 Scope.h:1641
 Scope.h:1642
 Scope.h:1643
 Scope.h:1644
 Scope.h:1645
 Scope.h:1646
 Scope.h:1647
 Scope.h:1648
 Scope.h:1649
 Scope.h:1650
 Scope.h:1651
 Scope.h:1652
 Scope.h:1653
 Scope.h:1654
 Scope.h:1655
 Scope.h:1656
 Scope.h:1657
 Scope.h:1658
 Scope.h:1659
 Scope.h:1660
 Scope.h:1661
 Scope.h:1662
 Scope.h:1663
 Scope.h:1664
 Scope.h:1665
 Scope.h:1666
 Scope.h:1667
 Scope.h:1668
 Scope.h:1669
 Scope.h:1670
 Scope.h:1671
 Scope.h:1672
 Scope.h:1673
 Scope.h:1674
 Scope.h:1675
 Scope.h:1676
 Scope.h:1677
 Scope.h:1678
 Scope.h:1679
 Scope.h:1680
 Scope.h:1681
 Scope.h:1682
 Scope.h:1683
 Scope.h:1684
 Scope.h:1685
 Scope.h:1686
 Scope.h:1687
 Scope.h:1688
 Scope.h:1689
 Scope.h:1690
 Scope.h:1691
 Scope.h:1692
 Scope.h:1693
 Scope.h:1694
 Scope.h:1695
 Scope.h:1696
 Scope.h:1697
 Scope.h:1698
 Scope.h:1699
 Scope.h:1700
 Scope.h:1701
 Scope.h:1702
 Scope.h:1703
 Scope.h:1704
 Scope.h:1705
 Scope.h:1706
 Scope.h:1707
 Scope.h:1708
 Scope.h:1709
 Scope.h:1710
 Scope.h:1711
 Scope.h:1712
 Scope.h:1713
 Scope.h:1714
 Scope.h:1715
 Scope.h:1716
 Scope.h:1717
 Scope.h:1718
 Scope.h:1719
 Scope.h:1720
 Scope.h:1721
 Scope.h:1722
 Scope.h:1723
 Scope.h:1724
 Scope.h:1725
 Scope.h:1726
 Scope.h:1727
 Scope.h:1728
 Scope.h:1729
 Scope.h:1730
 Scope.h:1731
 Scope.h:1732
 Scope.h:1733
 Scope.h:1734
 Scope.h:1735
 Scope.h:1736
 Scope.h:1737
 Scope.h:1738
 Scope.h:1739
 Scope.h:1740
 Scope.h:1741
 Scope.h:1742
 Scope.h:1743
 Scope.h:1744
 Scope.h:1745
 Scope.h:1746
 Scope.h:1747
 Scope.h:1748
 Scope.h:1749
 Scope.h:1750
 Scope.h:1751
 Scope.h:1752
 Scope.h:1753
 Scope.h:1754
 Scope.h:1755
 Scope.h:1756
 Scope.h:1757
 Scope.h:1758
 Scope.h:1759
 Scope.h:1760
 Scope.h:1761
 Scope.h:1762
 Scope.h:1763
 Scope.h:1764
 Scope.h:1765
 Scope.h:1766
 Scope.h:1767
 Scope.h:1768
 Scope.h:1769
 Scope.h:1770
 Scope.h:1771
 Scope.h:1772
 Scope.h:1773
 Scope.h:1774
 Scope.h:1775
 Scope.h:1776
 Scope.h:1777
 Scope.h:1778
 Scope.h:1779
 Scope.h:1780
 Scope.h:1781
 Scope.h:1782
 Scope.h:1783
 Scope.h:1784
 Scope.h:1785
 Scope.h:1786
 Scope.h:1787
 Scope.h:1788
 Scope.h:1789
 Scope.h:1790
 Scope.h:1791
 Scope.h:1792
 Scope.h:1793
 Scope.h:1794
 Scope.h:1795
 Scope.h:1796
 Scope.h:1797
 Scope.h:1798
 Scope.h:1799
 Scope.h:1800
 Scope.h:1801
 Scope.h:1802
 Scope.h:1803
 Scope.h:1804
 Scope.h:1805
 Scope.h:1806
 Scope.h:1807
 Scope.h:1808
 Scope.h:1809
 Scope.h:1810
 Scope.h:1811
 Scope.h:1812
 Scope.h:1813
 Scope.h:1814
 Scope.h:1815
 Scope.h:1816
 Scope.h:1817
 Scope.h:1818
 Scope.h:1819
 Scope.h:1820
 Scope.h:1821
 Scope.h:1822
 Scope.h:1823
 Scope.h:1824
 Scope.h:1825
 Scope.h:1826
 Scope.h:1827
 Scope.h:1828
 Scope.h:1829
 Scope.h:1830
 Scope.h:1831
 Scope.h:1832
 Scope.h:1833
 Scope.h:1834
 Scope.h:1835
 Scope.h:1836
 Scope.h:1837
 Scope.h:1838
 Scope.h:1839
 Scope.h:1840
 Scope.h:1841
 Scope.h:1842
 Scope.h:1843
 Scope.h:1844
 Scope.h:1845
 Scope.h:1846
 Scope.h:1847
 Scope.h:1848
 Scope.h:1849
 Scope.h:1850
 Scope.h:1851
 Scope.h:1852
 Scope.h:1853
 Scope.h:1854
 Scope.h:1855
 Scope.h:1856
 Scope.h:1857
 Scope.h:1858
 Scope.h:1859
 Scope.h:1860