123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _ENGINEEXPORTS_H_
- #define _ENGINEEXPORTS_H_
- #ifndef _ENGINEOBJECT_H_
- #include "console/engineObject.h"
- #endif
- /// @file
- /// Foundation for the engine API export system.
- ///
- /// The engine DLL exposes a well-defined API that the control layer can
- /// use to interface with the engine. The structure of this API is accessible
- /// through
- ///
- /// The system is primarily meant to allow mechanical extraction and processing
- /// of the API. It is not meant to be used as a direct means to actually interface
- /// with the engine.
- ///
- /// All export classes are themselves EngineObjects so they can be used in the
- /// API. They are, however, all declared as non-instantiable classes.
- class EngineExportScope;
- DECLARE_SCOPE( ReflectionAPI );
- /// Kind of entity being exported.
- enum EngineExportKind
- {
- EngineExportKindScope, ///< A collection of exports grouped in a separate named scope.
- EngineExportKindFunction, ///< A function call across the interop border going either in or out.
- EngineExportKindType ///< A data type for data exchange between the engine and its control layer. Note that types are also scopes.
- };
- /// Information about an entity exported by the engine API. This is an abstract base
- /// class.
- class EngineExport : public StaticEngineObject
- {
- public:
- DECLARE_ABSTRACT_CLASS( EngineExport, StaticEngineObject );
- DECLARE_INSCOPE( ReflectionAPI );
- friend class EngineExportScope; // Default constructor.
-
- protected:
-
- /// Name of the export. Never NULL but will be an empty string for anonymous
- /// exports such as function types.
- const char* mExportName;
- /// Kind of export.
- EngineExportKind mExportKind;
-
- /// The scope in which this export is defined.
- EngineExportScope* mExportScope;
-
- /// Documentation string.
- const char* mDocString;
- /// Next export in the link chain of the export's scope.
- EngineExport* mNextExport;
-
- /// Protected constructor as this is an abstract class.
- ///
- /// @param name Export name.
- /// @param kind Export kind.
- /// @param scope Scope to export to.
- /// @param docString Documentation string.
- EngineExport( const char* name, EngineExportKind kind, EngineExportScope* scope, const char* docString );
-
- public:
-
- /// Return the name of the export.
- const char* getExportName() const { return mExportName; }
-
- /// Return the fully qualified name of this export starting from the global export scope.
- /// Qualifiers are separated with "::".
- String getFullyQualifiedExportName() const;
-
- /// Return the kind of entity being exported.
- EngineExportKind getExportKind() const { return mExportKind; }
-
- /// Return the scope that contains this export. All exports except the global scope
- /// itself are contained in a scope.
- EngineExportScope* getExportScope() const { return mExportScope; }
- /// Get the next export in the link chain of the export's associated scope.
- EngineExport* getNextExport() const { return mNextExport; }
- /// Return the documentation string for this type.
- const char* getDocString() const { return mDocString; }
- private:
-
- /// Special constructor for the global scope instance.
- EngineExport()
- : mExportName( "" ),
- mExportKind( EngineExportKindScope ),
- mExportScope( NULL ),
- mDocString(""),
- mNextExport( NULL ) {}
- };
- /// A group of engine exports.
- class EngineExportScope : public EngineExport
- {
- public:
-
- DECLARE_CLASS( EngineExportScope, EngineExport );
- friend class EngineExport; // mExports
- friend struct _GLOBALSCOPE; // smGlobalScope
- template< typename T > friend T* constructInPlace( T* );
-
- protected:
-
- /// Head of the link chain of exports for this scope.
- EngineExport* mExports;
-
- /// The global export scope singleton.
- static EngineExportScope smGlobalScope;
-
- public:
-
- /// Construct a new export scope.
- ///
- /// @param name Name of the scope inside its parent scope.
- /// @param scope Parent scope.
- /// @param docString Documentation string.
- EngineExportScope( const char* name, EngineExportScope* scope, const char* docString );
-
- /// Return the global export scope singleton. This is the root of the
- /// export hierarchy and thus directly or indirectly contains all
- /// entities exported by the engine.
- static EngineExportScope* getGlobalScope() { return &smGlobalScope; }
-
- /// Return the chain of exports associated with this scope.
- EngineExport* getExports() const { return mExports; }
-
- private:
-
- /// Constructor for the global scope.
- EngineExportScope(){}
- };
- /// @}
- #endif // !_ENGINEEXPORTS_H_
|