"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSGraphicsLib/Src/ShaderLanguage/LSGShaderScope.h

00001 
00017 #ifndef __LSG_SHADERSCOPE_H__
00018 #define __LSG_SHADERSCOPE_H__
00019 
00020 #include "../LSGGraphicsLib.h"
00021 #include "Map/LSTLMap.h"
00022 #include "MultiMap/LSTLMultiMap.h"
00023 #include "String/LSTLString.h"
00024 #include "Vector/LSTLVectorPoD.h"
00025 
00026 namespace lsg {
00027 
00035         class CShaderScope {
00036         public :
00037                 // == Various constructors.
00038                 LSE_CALLCTOR                                                            CShaderScope();
00039                 LSE_CALLCTOR                                                            ~CShaderScope();
00040 
00041 
00042                 // == Enumerations.
00046                 enum LSG_TYPE {
00047                         LSG_T_VARIABLE,                                                 // A LSG_VARIABLE object.
00048                         LSG_T_FUNCTION,                                                 // A LSG_FUNCTION object.
00049                         LSG_T_STRUCT,                                                   // A LSG_STRUCT object.
00050                         LSG_T_UNDEFINED,                                                // Unknown type.  May not end up using this, but keep it in case for future expansion.
00051                 };
00052 
00053 
00054                 // == Types.
00058                 typedef struct LSG_VARIABLE {
00063                         LSUINT32                                                                ui32Name;
00064 
00068                         LSUINT64                                                                ui64Qualifiers;
00069 
00073                         LSUINT64                                                                ui64Type;
00074 
00078                         LSUINT32                                                                ui32Array;
00079 
00083                         LSUINT32                                                                ui32Semantic;
00084 
00089                         LSUINT32                                                                ui32DeclNode;
00090                 } * LPLSG_VARIABLE, * const LPCLSG_VARIABLE;
00091 
00095                 typedef struct LSG_FUNCTION {
00100                         LSUINT32                                                                ui32Name;
00101 
00105                         LSUINT64                                                                ui64Qualifiers;
00106 
00110                         LSUINT64                                                                ui64Type;
00111 
00115                         LSUINT32                                                                ui32ParmCount;
00116 
00121                         LSUINT32                                                                ui32DeclNode;
00122                 } * LPLSG_FUNCTION, * const LPCLSG_FUNCTION;
00123 
00127                 typedef struct LSG_STRUCT {
00132                         LSUINT32                                                                ui32Name;
00133 
00138                         LSUINT32                                                                ui32DeclNode;
00139                 } * LPLSG_STRUCT, * const LPCLSG_STRUCT;
00140 
00145                 typedef struct LSG_TYPE_AND_INDEX {
00149                         LSG_TYPE                                                                tType;
00150 
00154                         LSUINT32                                                                ui32Index;
00155                 } * LPLSG_TYPE_AND_INDEX, * const LPCLSG_TYPE_AND_INDEX;
00156 
00157 
00158                 // == Operators.
00165                 CShaderScope & LSE_CALL                                         operator = ( const CShaderScope &_ssOther );
00166 
00167 
00168                 // == Functions.
00176                 LSBOOL LSE_CALL                                                         AddVariable( const CString &_sName, const LSG_VARIABLE &_vVar );
00177 
00185                 LSBOOL LSE_CALL                                                         AddFunction( const CString &_sName, const LSG_FUNCTION &_fFunc );
00186 
00194                 LSBOOL LSE_CALL                                                         AddStruct( const CString &_sName, const LSG_STRUCT &_sStruct );
00195 
00202                 const LSG_VARIABLE & LSE_CALL                           GetVariable( LSUINT32 _ui32Index ) const;
00203 
00210                 const LSG_FUNCTION & LSE_CALL                           GetFunction( LSUINT32 _ui32Index ) const;
00211 
00218                 const LSG_STRUCT & LSE_CALL                                     GetStruct( LSUINT32 _ui32Index ) const;
00219 
00227                 LSBOOL LSE_CALL                                                         IdentifierExistsAs( LSG_TYPE _tType, const CString &_sName ) const;
00228 
00240                 LSBOOL LSE_CALL                                                         GetIdentifiersAs( LSG_TYPE _tType, const CString &_sName, CVectorPoD<LSG_TYPE_AND_INDEX> &_vRet ) const;
00241 
00249                 LSBOOL LSE_CALL                                                         CreateNameAssociation( const CString &_sOldName, const LSCHAR * _pcNewName );
00250 
00258                 LSBOOL LSE_CALL                                                         GetNameAssociation( const CString &_sName, const LSCHAR * &_pcNew ) const;
00259 
00260 
00261         protected :
00262                 // == Members.
00266                 CVectorPoD<LSG_VARIABLE>                                        m_vVariables;
00267 
00271                 CVectorPoD<LSG_FUNCTION>                                        m_vFuncs;
00272 
00276                 CVectorPoD<LSG_STRUCT>                                          m_vStructs;
00277 
00282                 CMultiMap<CString, LSG_TYPE_AND_INDEX>          m_mmTypeMap;
00283 
00287                 CMap<CString, CString>                                          m_mNameAssociations;
00288         };
00289 
00290 }       // namespace lsg
00291 
00292 #endif  // __LSG_SHADERSCOPE_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator