libzypp  17.38.7
namespacecomponent.cc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 ----------------------------------------------------------------------*/
9 #include "namespacecomponent.h"
11 #include <zypp/ng/sat/pool.h>
12 
13 #include <zypp/ng/idstring.h>
14 #include <algorithm>
15 
16 namespace 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
void registerProvider(detail::IdType namespaceId, std::shared_ptr< NamespaceProvider > provider)
Register a provider for a specific namespace.
Mediator managing the collection of NamespaceProviders for a Pool.
Orchestrator for a libsolv pool instance.
Definition: pool.h:36
std::unordered_map< detail::IdType, std::shared_ptr< NamespaceProvider > > _providers
Internal map of IDs to their respective providers.
void prepare(Pool &pool) override
zypp::sat::detail::CPool CPool
Definition: poolconstants.h:36
bool handleNamespace(detail::IdType namespaceId, detail::IdType value) const
The entry point for the libsolv namespace callback.
detail::CPool * get() const
Expert backdoor.
Definition: pool.h:59
This file contains private API, this might break at any time between releases.
Definition: capabilities.h:22
zypp::sat::detail::IdType IdType
Definition: poolconstants.h:43
static detail::IdType libsolv_callback(detail::CPool *, void *data, detail::IdType lhs, detail::IdType rhs)
The static C-style callback for libsolv.
void attach(Pool &pool) override
void checkDirty(Pool &pool) override
Probe external state.
void onReset(Pool &pool) override