diff options
Diffstat (limited to 'src/binder/inc/assemblyidentity.hpp')
-rw-r--r-- | src/binder/inc/assemblyidentity.hpp | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/binder/inc/assemblyidentity.hpp b/src/binder/inc/assemblyidentity.hpp new file mode 100644 index 0000000000..4d7c7f1bac --- /dev/null +++ b/src/binder/inc/assemblyidentity.hpp @@ -0,0 +1,149 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +// ============================================================ +// +// AssemblyIdentity.hpp +// + + +// +// Defines the AssemblyIdentity class +// +// ============================================================ + +#ifndef __BINDER__ASSEMBLY_IDENTITY_HPP__ +#define __BINDER__ASSEMBLY_IDENTITY_HPP__ + +#include "bindertypes.hpp" +#include "assemblyversion.hpp" + +namespace BINDER_SPACE +{ + class AssemblyIdentity + { + public: + enum + { + IDENTITY_FLAG_EMPTY = 0x000, + IDENTITY_FLAG_SIMPLE_NAME = 0x001, + IDENTITY_FLAG_VERSION = 0x002, + IDENTITY_FLAG_PUBLIC_KEY_TOKEN = 0x004, + IDENTITY_FLAG_PUBLIC_KEY = 0x008, + IDENTITY_FLAG_CULTURE = 0x010, + IDENTITY_FLAG_LANGUAGE = 0x020, + IDENTITY_FLAG_PROCESSOR_ARCHITECTURE = 0x040, + IDENTITY_FLAG_RETARGETABLE = 0x080, + IDENTITY_FLAG_PUBLIC_KEY_TOKEN_NULL = 0x100, + IDENTITY_FLAG_CUSTOM = 0x200, + IDENTITY_FLAG_CUSTOM_NULL = 0x400, + IDENTITY_FLAG_CONTENT_TYPE = 0x800, + IDENTITY_FLAG_FULL_NAME = (IDENTITY_FLAG_SIMPLE_NAME | + IDENTITY_FLAG_VERSION) + } IdentityFlags; + + AssemblyIdentity() + { + m_dwIdentityFlags = IDENTITY_FLAG_EMPTY; + m_kProcessorArchitecture = peNone; + m_kContentType = AssemblyContentType_Default; + + // Need to pre-populate SBuffers because of bogus asserts + static const BYTE byteArr[] = { 0 }; + m_publicKeyOrTokenBLOB.SetImmutable(byteArr, sizeof(byteArr)); + m_customBLOB.SetImmutable(byteArr, sizeof(byteArr)); + } + ~AssemblyIdentity() + { + // Nothing to do here + } + + static BOOL Have(DWORD dwUseIdentityFlags, DWORD dwIdentityFlags) + { + return ((dwUseIdentityFlags & dwIdentityFlags) != 0); + } + + BOOL Have(DWORD dwIdentityFlags) + { + return Have(m_dwIdentityFlags, dwIdentityFlags); + } + + void SetHave(DWORD dwIdentityFlags) + { + m_dwIdentityFlags |= dwIdentityFlags; + } + + void SetClear(DWORD dwIdentityFlags) + { + m_dwIdentityFlags &= ~dwIdentityFlags; + } + + void CloneInto(AssemblyIdentity *pAssemblyIdentity) + { + pAssemblyIdentity->m_simpleName.Set(m_simpleName); + pAssemblyIdentity->m_simpleName.Normalize(); + pAssemblyIdentity->m_version.SetVersion(&m_version); + pAssemblyIdentity->m_cultureOrLanguage.Set(m_cultureOrLanguage); + pAssemblyIdentity->m_cultureOrLanguage.Normalize(); + pAssemblyIdentity->m_publicKeyOrTokenBLOB.Set(m_publicKeyOrTokenBLOB); + pAssemblyIdentity->m_kProcessorArchitecture = m_kProcessorArchitecture; + pAssemblyIdentity->m_kContentType = m_kContentType; + pAssemblyIdentity->m_customBLOB.Set(m_customBLOB); + pAssemblyIdentity->m_dwIdentityFlags = m_dwIdentityFlags; + } + + SString m_simpleName; + AssemblyVersion m_version; + SString m_cultureOrLanguage; + SBuffer m_publicKeyOrTokenBLOB; + PEKIND m_kProcessorArchitecture; + AssemblyContentType m_kContentType; + SBuffer m_customBLOB; + DWORD m_dwIdentityFlags; + }; + + class AssemblyIdentityUTF8 : public AssemblyIdentity + { + public: + AssemblyIdentityUTF8() + { + m_szSimpleNameUTF8 = NULL; + m_szCultureOrLanguageUTF8 = NULL; + } + + void PopulateUTF8Fields() + { + m_szSimpleNameUTF8 = m_simpleName.GetUTF8(sSimpleNameBuffer); + + if (Have(IDENTITY_FLAG_CULTURE) && !m_cultureOrLanguage.IsEmpty()) + { + m_szCultureOrLanguageUTF8 = m_cultureOrLanguage.GetUTF8(sCultureBuffer); + } + } + + inline LPCSTR GetSimpleNameUTF8() + { + return m_szSimpleNameUTF8; + } + + inline LPCSTR GetCultureOrLanguageUTF8() + { + return m_szCultureOrLanguageUTF8; + } + + inline const BYTE *GetPublicKeyOrTokenArray() + { + const BYTE *pPublicKeyOrToken = m_publicKeyOrTokenBLOB; + + return pPublicKeyOrToken; + } + + protected: + StackScratchBuffer sSimpleNameBuffer; + StackScratchBuffer sCultureBuffer; + LPCSTR m_szSimpleNameUTF8; + LPCSTR m_szCultureOrLanguageUTF8; + }; +}; + +#endif |