IDocumentationProvider.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2018-2020 marynate. All Rights Reserved.
  2. #pragma once
  3. #include "IDocumentation.h"
  4. #include "DocumentationDefines.h"
  5. namespace EXT_DOC_NAMESPACE
  6. {
  7. class IDocumentationProvider
  8. {
  9. public:
  10. virtual TSharedRef<IDocumentation> GetDocumentation() const = 0;
  11. };
  12. struct FDocumentationProvider
  13. {
  14. static FDocumentationProvider& Get()
  15. {
  16. static FDocumentationProvider Instance;
  17. return Instance;
  18. }
  19. const IDocumentationProvider* GetProvider(const FName& InProviderName)
  20. {
  21. if (const IDocumentationProvider** ProviderPtr = DocumentationProviders.Find(InProviderName))
  22. {
  23. return *ProviderPtr;
  24. }
  25. return NULL;
  26. }
  27. void RegisterProvider(const FName& InProviderName, const IDocumentationProvider* InProvider)
  28. {
  29. if (!InProvider)
  30. {
  31. return;
  32. }
  33. if (!DocumentationProviders.Find(InProviderName)) // Add
  34. {
  35. DocumentationProviders.Add(InProviderName, InProvider);
  36. }
  37. else // Override
  38. {
  39. DocumentationProviders[InProviderName] = InProvider;
  40. }
  41. }
  42. private:
  43. TMap<FName, const IDocumentationProvider*> DocumentationProviders;
  44. };
  45. }