libzypp 17.38.6
namespacecomponent.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8----------------------------------------------------------------------*/
11#include <zypp/ng/sat/pool.h>
12
13#include <zypp/ng/idstring.h>
14#include <algorithm>
15
16namespace zyppng::sat {
17
18 void NamespaceComponent::registerProvider( detail::IdType namespaceId, std::shared_ptr<NamespaceProvider> provider )
19 {
20 _providers.insert_or_assign ( namespaceId, provider );
21 }
22
24 {
25 auto iter = _providers.find( namespaceId );
26 if ( iter != _providers.end() )
27 return iter->second->isSatisfied ( value );
28 return false;
29 }
30
32 {
33 pool.get()->nscallback = &NamespaceComponent::libsolv_callback;
34 pool.get()->nscallbackdata = this;
35 for ( auto & p : _providers ) {
36 p.second->attach(pool);
37 }
38 }
39
41 {
42 for ( auto & provider : _providers )
43 provider.second->checkDirty( pool );
44 }
45
47 {
48 for ( auto & provider : _providers )
49 provider.second->prepare( pool );
50 }
51
53 {
54 for ( auto & p : _providers )
55 p.second->onReset( pool );
56 }
57
59 {
60 auto self = static_cast<NamespaceComponent*>(data);
61 if ( self && self->handleNamespace( lhs, rhs ) )
62 return 1; // RET_systemProperty
63
64 return 0; // RET_unsupported
65 }
66
67} // namespace zyppng::sat
Mediator managing the collection of NamespaceProviders for a Pool.
bool handleNamespace(detail::IdType namespaceId, detail::IdType value) const
The entry point for the libsolv namespace callback.
static detail::IdType libsolv_callback(detail::CPool *, void *data, detail::IdType lhs, detail::IdType rhs)
The static C-style callback for libsolv.
void checkDirty(Pool &pool) override
Probe external state.
std::unordered_map< detail::IdType, std::shared_ptr< NamespaceProvider > > _providers
Internal map of IDs to their respective providers.
void prepare(Pool &pool) override
void onReset(Pool &pool) override
void attach(Pool &pool) override
void registerProvider(detail::IdType namespaceId, std::shared_ptr< NamespaceProvider > provider)
Register a provider for a specific namespace.
Orchestrator for a libsolv pool instance.
Definition pool.h:37
zypp::sat::detail::CPool CPool
zypp::sat::detail::IdType IdType
This file contains private API, this might break at any time between releases.