summaryrefslogtreecommitdiff
path: root/src/binder/inc/assemblyidentity.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/binder/inc/assemblyidentity.hpp')
-rw-r--r--src/binder/inc/assemblyidentity.hpp149
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