载入中...
搜索中...
未找到
EditingExtension.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Export.h"
6
7#include <cstdint>
8#include <memory>
9#include <string>
10#include <vector>
11
12namespace eve::editing {
13
16
19 std::string id;
20 std::uint32_t schemaVersion = 1;
21 std::vector<CapabilityId> capabilities;
22 std::vector<std::string> requiredModules;
24 bool callbacksReentrant = false;
25};
26
29 std::string id;
30 std::uint64_t generation = 0;
32 friend bool operator==(const ProviderHandle&, const ProviderHandle&) = default;
33};
34
37public:
39 virtual ~IEditingExtensionProvider() = default;
41 [[nodiscard]] virtual Result<void> activate() = 0;
43 [[nodiscard]] virtual Result<void> beginUnload() = 0;
45 virtual void deactivate() noexcept = 0;
50 virtual void* query(const CapabilityId& capability) noexcept = 0;
51};
52
55public:
57 ProviderLease() = default;
59 const ProviderHandle& handle() const { return handle_; }
61 explicit operator bool() const { return provider_ != nullptr; }
66 void* query(const CapabilityId& capability) const noexcept {
67 return provider_ ? provider_->query(capability) : nullptr;
68 }
69private:
71 ProviderLease(ProviderHandle handle, std::shared_ptr<IEditingExtensionProvider> provider)
72 : handle_(std::move(handle)), provider_(std::move(provider)) {}
73 ProviderHandle handle_;
74 std::shared_ptr<IEditingExtensionProvider> provider_;
75};
76
79public:
86
88 [[nodiscard]] Result<ProviderHandle> registerProvider(
89 ExtensionDescriptor descriptor, std::shared_ptr<IEditingExtensionProvider> provider);
91 [[nodiscard]] Result<ProviderLease> acquire(const ProviderHandle& handle) const;
93 [[nodiscard]] Result<ProviderLease> acquire(const std::string& id) const;
95 [[nodiscard]] Result<void> unload(const ProviderHandle& handle);
97 std::vector<ExtensionDescriptor> descriptors() const;
98private:
99 struct Impl;
100 std::unique_ptr<Impl> impl_;
101};
102
113 CapabilityId capability,
114 std::shared_ptr<void> implementation);
115
116} // namespace eve::editing
std::string descriptor
#define EVENGINE_API_PLATFORM
Definition Export.h:107
PrimitiveHandle handle
Move-only operation result carrying either a value or Status.
Definition Result.h:155
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
Thread-safe generation-qualified registry for editing extension providers.
ExtensionProviderRegistry & operator=(const ExtensionProviderRegistry &)=delete
ExtensionProviderRegistry(const ExtensionProviderRegistry &)=delete
IEditingExtensionProvider public API.
virtual void * query(const CapabilityId &capability) noexcept=0
Query a borrowed capability while this provider lease is alive.
virtual Result< void > activate()=0
Activate after publication. No registry lock is held.
virtual void deactivate() noexcept=0
Release provider-side resources after unpublication.
virtual Result< void > beginUnload()=0
Stop accepting new work before the provider is unpublished.
virtual ~IEditingExtensionProvider()=default
Releases IEditingExtensionProvider resources.
ProviderLease public API.
const ProviderHandle & handle() const
Handle.
void * query(const CapabilityId &capability) const noexcept
Query a capability.
ProviderLease()=default
Constructs a ProviderLease.
ThreadAffinity
ThreadAffinity public API.
Result< ProviderHandle > registerStaticProvider(ExtensionProviderRegistry &registry, ExtensionDescriptor descriptor, CapabilityId capability, std::shared_ptr< void > implementation)
Register one owned capability behind the standard provider lifecycle.
ExtensionDescriptor public API.
std::vector< std::string > requiredModules
std::vector< CapabilityId > capabilities
ProviderHandle public API.
friend bool operator==(const ProviderHandle &, const ProviderHandle &)=default
Operator ==.