https://mooseframework.inl.gov
Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
TheWarehouse Class Reference

TheWarehouse is a container for MooseObjects that allows querying/filtering over various customizeable attributes. More...

#include <TheWarehouse.h>

Classes

class  QueryCache
 QueryCache is a convenient way to construct and pass around (possible partially constructed) warehouse queries. More...
 

Public Types

template<typename T >
using KeyType = typename T::Key
 
template<typename T >
using AttribType = T *
 
using Query = QueryCache<>
 

Public Member Functions

 TheWarehouse ()
 
 ~TheWarehouse ()
 
template<typename T , typename... Args>
unsigned int registerAttribute (const std::string &name, Args... dummy_args)
 registers a new "tracked" attribute of type T for the warehouse. More...
 
unsigned int attribID (const std::string &name)
 Returns a unique ID associated with the given attribute name - i.e. More...
 
void add (std::shared_ptr< MooseObject > obj)
 add adds a new object to the warehouse and stores attributes/metadata about it for running queries/filtering. More...
 
void update (MooseObject *obj)
 update updates the metadata/attribute-info stored for the given object obj that must already exists in the warehouse. More...
 
void update (MooseObject *obj, const Attribute &extra)
 update updates the metadata/attribute-info stored for the given object obj that must already exists in the warehouse. More...
 
Query query ()
 query creates and returns an initialized a query object for querying objects from the warehouse. More...
 
std::size_t count (const std::vector< std::unique_ptr< Attribute >> &conds)
 count returns the number of objects that match the provided query conditions. More...
 
template<typename T >
std::vector< T * > & queryInto (const std::vector< std::unique_ptr< Attribute >> &conds, std::vector< T *> &results)
 queryInto takes the given conditions (i.e. More...
 
std::size_t queryID (const std::vector< std::unique_ptr< Attribute >> &conds)
 
template<typename T >
std::vector< T * > & queryInto (int query_id, std::vector< T *> &results, bool show_all=false)
 

Private Member Functions

int prepare (std::vector< std::unique_ptr< Attribute >> conds)
 prepares a query and returns an associated query_id (i.e. for use with the query function). More...
 
const std::vector< MooseObject * > & query (int query_id)
 callers of this function must lock _obj_cache_mutex as long as a reference to the returned vector is being used. More...
 
void readAttribs (const MooseObject *obj, std::vector< std::unique_ptr< Attribute >> &attribs)
 

Private Attributes

std::unique_ptr< WarehouseStorage_store
 
std::vector< std::shared_ptr< MooseObject > > _objects
 
std::unordered_map< MooseObject *, std::size_t > _obj_ids
 
std::vector< std::vector< MooseObject * > > _obj_cache
 
std::unordered_map< std::vector< std::unique_ptr< Attribute > >, int_query_cache
 
std::unordered_map< std::string, unsigned int_attrib_ids
 
std::vector< std::unique_ptr< Attribute > > _attrib_list
 
std::mutex _obj_mutex
 
std::mutex _query_cache_mutex
 
std::mutex _obj_cache_mutex
 

Detailed Description

TheWarehouse is a container for MooseObjects that allows querying/filtering over various customizeable attributes.

The meta-data about the objects is read/stored when the objects are added to the warehouse - updates to objects' state will not be reflected in query results unless the object is explicitly updated through the warehouse interface. The warehouse object can safely be queried concurrently from multiple threads.

Once Query and Attribute objects have been constructed, they are tied to the specific warehouse they were created with. They must not be used for different warehouses or the attribute ID they store internally will be wrong and that is bad.

Definition at line 185 of file TheWarehouse.h.

Member Typedef Documentation

◆ AttribType

template<typename T >
using TheWarehouse::AttribType = T *

Definition at line 191 of file TheWarehouse.h.

◆ KeyType

template<typename T >
using TheWarehouse::KeyType = typename T::Key

Definition at line 189 of file TheWarehouse.h.

◆ Query

Definition at line 409 of file TheWarehouse.h.

Constructor & Destructor Documentation

◆ TheWarehouse()

TheWarehouse::TheWarehouse ( )

Definition at line 110 of file TheWarehouse.C.

110 : _store(std::make_unique<VecStore>()) {}
std::unique_ptr< WarehouseStorage > _store
Definition: TheWarehouse.h:518

◆ ~TheWarehouse()

TheWarehouse::~TheWarehouse ( )

Definition at line 111 of file TheWarehouse.C.

111 {}

Member Function Documentation

◆ add()

void TheWarehouse::add ( std::shared_ptr< MooseObject obj)

add adds a new object to the warehouse and stores attributes/metadata about it for running queries/filtering.

The warehouse will maintain a pointer to the object indefinitely.

Definition at line 116 of file TheWarehouse.C.

Referenced by NonlinearSystemBase::addBoundaryCondition(), NonlinearSystemBase::addDGKernel(), NonlinearSystemBase::addDiracKernel(), NonlinearSystemBase::addHDGKernel(), NonlinearSystemBase::addInterfaceKernel(), NonlinearSystemBase::addKernel(), NonlinearSystemBase::addNodalKernel(), FEProblemBase::addObject(), NonlinearSystemBase::addScalarKernel(), NonlinearSystemBase::addSplit(), and FEProblemBase::addUserObject().

117 {
118  isValid(obj.get());
119 
120  std::size_t obj_id = 0;
121  {
122  std::lock_guard<std::mutex> lock(_obj_mutex);
123 
124  mooseAssert(!_obj_ids.count(obj.get()), obj->typeAndName() + " has already been added");
125 
126  _objects.push_back(obj);
127  obj_id = _objects.size() - 1;
128  _obj_ids[obj.get()] = obj_id;
129 
130  // reset/invalidate the query cache since query results may have been affected by this warehouse
131  // insertion.
132  _obj_cache.clear();
133  _query_cache.clear();
134  }
135 
136  std::vector<std::unique_ptr<Attribute>> attribs;
137  readAttribs(obj.get(), attribs);
138  _store->add(obj_id, std::move(attribs));
139 }
void isValid(MooseObject *obj)
Definition: TheWarehouse.C:287
std::unique_ptr< WarehouseStorage > _store
Definition: TheWarehouse.h:518
std::vector< std::shared_ptr< MooseObject > > _objects
Definition: TheWarehouse.h:519
void readAttribs(const MooseObject *obj, std::vector< std::unique_ptr< Attribute >> &attribs)
Definition: TheWarehouse.C:276
std::unordered_map< std::vector< std::unique_ptr< Attribute > >, int > _query_cache
Definition: TheWarehouse.h:528
std::mutex _obj_mutex
Definition: TheWarehouse.h:533
std::unordered_map< MooseObject *, std::size_t > _obj_ids
Definition: TheWarehouse.h:520
std::vector< std::vector< MooseObject * > > _obj_cache
Definition: TheWarehouse.h:524

◆ attribID()

unsigned int TheWarehouse::attribID ( const std::string &  name)
inline

Returns a unique ID associated with the given attribute name - i.e.

an attribute and name that were previously registered via calls to registerAttribute. Users should generally not need to use this function.

Definition at line 443 of file TheWarehouse.h.

444  {
445  auto it = _attrib_ids.find(name);
446  if (it != _attrib_ids.end())
447  return it->second;
448  mooseError("no ID exists for unregistered attribute '", name, "'");
449  }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:302
std::unordered_map< std::string, unsigned int > _attrib_ids
Definition: TheWarehouse.h:530

◆ count()

std::size_t TheWarehouse::count ( const std::vector< std::unique_ptr< Attribute >> &  conds)

count returns the number of objects that match the provided query conditions.

This requires executing a full query operation (i.e. as if calling queryInto). A Query object should generally be used via the query() member function instead.

Definition at line 263 of file TheWarehouse.C.

Referenced by TheWarehouse::QueryCache< AttribThread, AttribBoundaries, AttribInterfaces >::count().

264 {
265  auto query_id = queryID(conds);
266  std::lock_guard<std::mutex> lock(_obj_cache_mutex);
267  auto & objs = query(query_id);
268  std::size_t count = 0;
269  for (auto obj : objs)
270  if (obj->enabled())
271  count++;
272  return count;
273 }
std::mutex _obj_cache_mutex
Definition: TheWarehouse.h:535
std::size_t count(const std::vector< std::unique_ptr< Attribute >> &conds)
count returns the number of objects that match the provided query conditions.
Definition: TheWarehouse.C:263
std::size_t queryID(const std::vector< std::unique_ptr< Attribute >> &conds)
Definition: TheWarehouse.C:246
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:466

◆ prepare()

int TheWarehouse::prepare ( std::vector< std::unique_ptr< Attribute >>  conds)
private

prepares a query and returns an associated query_id (i.e. for use with the query function).

Definition at line 166 of file TheWarehouse.C.

Referenced by queryID().

167 {
168  bool sort = false;
169  std::unique_ptr<Attribute> sorted_attrib;
170  if (!conds.empty() && dynamic_cast<AttribSorted *>(conds.back().get()))
171  {
172  sorted_attrib = std::move(conds.back());
173  static const AttribSorted sorted_attrib_true(*this, true);
174  sort = sorted_attrib->isMatch(sorted_attrib_true);
175  // Remove the sorted condition temporarily
176  conds.pop_back();
177  }
178 
179 #ifdef DEBUG
180  for (auto & cond : conds)
181  mooseAssert(!dynamic_cast<AttribSorted *>(cond.get()),
182  "There should be no sorted attributes in this container.");
183 #endif
184 
185  auto obj_ids = _store->query(conds);
186  if (sorted_attrib)
187  conds.push_back(std::move(sorted_attrib));
188 
189  std::lock_guard<std::mutex> lock(_obj_cache_mutex);
190  auto & vec = _obj_cache.emplace_back(obj_ids.size());
191  const auto query_id = _obj_cache.size() - 1;
192  {
193  std::lock_guard<std::mutex> lock(_query_cache_mutex);
194  _query_cache[std::move(conds)] = query_id;
195  }
196 
197  std::lock_guard<std::mutex> o_lock(_obj_mutex);
198  for (const auto i : index_range(obj_ids))
199  {
200  auto obj = _objects[obj_ids[i]].get();
201  mooseAssert(std::find(vec.begin(), vec.end(), obj) == vec.end(), "Duplicate object");
202  vec[i] = obj;
203  }
204 
205  if (sort && !vec.empty() && dynamic_cast<DependencyResolverInterface *>(vec[0]))
206  {
207  std::vector<DependencyResolverInterface *> dependers;
208  for (auto obj : vec)
209  {
210  auto d = dynamic_cast<DependencyResolverInterface *>(obj);
211  if (!d)
212  {
213  dependers.clear();
214  break;
215  }
216  dependers.push_back(d);
217  }
218 
219  try
220  {
222  }
224  {
225  DependencyResolverInterface::cyclicDependencyError<UserObject *>(
226  e, "Cyclic dependency detected in object ordering");
227  }
228 
229  mooseAssert(dependers.size() == vec.size(), "Dependency resolution size mismatch");
230  for (unsigned int i = 0; i < dependers.size(); i++)
231  vec[i] = dynamic_cast<MooseObject *>(dependers[i]);
232  }
233 
234  return query_id;
235 }
std::mutex _obj_cache_mutex
Definition: TheWarehouse.h:535
This attribute describes sorting state.
Definition: TheWarehouse.h:112
std::unique_ptr< WarehouseStorage > _store
Definition: TheWarehouse.h:518
std::mutex _query_cache_mutex
Definition: TheWarehouse.h:534
std::vector< std::shared_ptr< MooseObject > > _objects
Definition: TheWarehouse.h:519
std::unordered_map< std::vector< std::unique_ptr< Attribute > >, int > _query_cache
Definition: TheWarehouse.h:528
std::mutex _obj_mutex
Definition: TheWarehouse.h:533
static void sort(typename std::vector< T > &vector)
Given a vector, sort using the getRequested/SuppliedItems sets.
Interface for sorting dependent vectors of objects.
auto index_range(const T &sizable)
std::vector< std::vector< MooseObject * > > _obj_cache
Definition: TheWarehouse.h:524

◆ query() [1/2]

Query TheWarehouse::query ( )
inline

query creates and returns an initialized a query object for querying objects from the warehouse.

Definition at line 466 of file TheWarehouse.h.

Referenced by CheckFVBCAction::act(), NonlinearSystemBase::checkKernelCoverage(), FEProblemBase::checkUserObjectJacobianRequirement(), FEProblemBase::checkUserObjects(), NonlinearSystemBase::computeJacobianInternal(), NonlinearSystemBase::computeResidualAndJacobianInternal(), NonlinearSystemBase::computeResidualInternal(), FEProblemBase::computeUserObjectByName(), FEProblemBase::computeUserObjects(), LinearSystem::containsTimeKernel(), count(), NonlinearSystemBase::customSetup(), FEProblemBase::customSetup(), ComputeResidualThread::determineObjectWarehouses(), ComputeResidualAndJacobianThread::determineObjectWarehouses(), FEProblemBase::executeSamplers(), ComputeLinearFVElementalThread::fetchBlockSystemContributionObjects(), ComputeLinearFVFaceThread::fetchBlockSystemContributionObjects(), FEProblemBase::getDistribution(), FEProblemBase::getMortarUserObjects(), FEProblemBase::getPositionsObject(), FEProblemBase::getSampler(), CompositionDT::getTimeSteppers(), FEProblemBase::getUserObject(), FEProblemBase::getUserObjectBase(), FEProblemBase::hasUserObject(), SideFVFluxBCIntegral::initialSetup(), ExplicitTimeIntegrator::initialSetup(), LinearSystem::initialSetup(), NonlinearSystemBase::initialSetup(), FEProblemBase::initialSetup(), AdvancedOutput::initPostprocessorOrVectorPostprocessorLists(), MooseVariableDataFV< OutputType >::MooseVariableDataFV(), FEProblemBase::needBoundaryMaterialOnSide(), FEProblemBase::needInterfaceMaterialOnSide(), FEProblemBase::needSubdomainMaterialOnSide(), JSONOutput::outputReporters(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), queryInto(), ComputeLinearFVElementalThread::setupSystemContributionObjects(), ComputeLinearFVFaceThread::setupSystemContributionObjects(), NonlinearThread::subdomainChanged(), NonlinearSystemBase::timestepSetup(), and FEProblemBase::timestepSetup().

466 { return Query(*this); }
QueryCache<> Query
Definition: TheWarehouse.h:409

◆ query() [2/2]

const std::vector< MooseObject * > & TheWarehouse::query ( int  query_id)
private

callers of this function must lock _obj_cache_mutex as long as a reference to the returned vector is being used.

Definition at line 238 of file TheWarehouse.C.

239 {
240  if (static_cast<std::size_t>(query_id) >= _obj_cache.size())
241  throw std::runtime_error("unknown query id");
242  return _obj_cache[query_id];
243 }
std::vector< std::vector< MooseObject * > > _obj_cache
Definition: TheWarehouse.h:524

◆ queryID()

std::size_t TheWarehouse::queryID ( const std::vector< std::unique_ptr< Attribute >> &  conds)

Definition at line 246 of file TheWarehouse.C.

Referenced by count(), JSONOutput::outputReporters(), queryInto(), and TheWarehouse::QueryCache< AttribThread, AttribBoundaries, AttribInterfaces >::queryIntoHelper().

247 {
248  {
249  std::lock_guard<std::mutex> lock(_query_cache_mutex);
250  auto it = _query_cache.find(conds);
251  if (it != _query_cache.end())
252  return it->second;
253  }
254 
255  std::vector<std::unique_ptr<Attribute>> conds_clone;
256  conds_clone.resize(conds.size());
257  for (std::size_t i = 0; i < conds.size(); i++)
258  conds_clone[i] = conds[i]->clone();
259  return prepare(std::move(conds_clone));
260 }
std::mutex _query_cache_mutex
Definition: TheWarehouse.h:534
int prepare(std::vector< std::unique_ptr< Attribute >> conds)
prepares a query and returns an associated query_id (i.e. for use with the query function).
Definition: TheWarehouse.C:166
std::unordered_map< std::vector< std::unique_ptr< Attribute > >, int > _query_cache
Definition: TheWarehouse.h:528

◆ queryInto() [1/2]

template<typename T >
std::vector<T *>& TheWarehouse::queryInto ( const std::vector< std::unique_ptr< Attribute >> &  conds,
std::vector< T *> &  results 
)
inline

queryInto takes the given conditions (i.e.

Attributes holding the values to filter/match over) and filters all objects in the warehouse that match all conditions (i.e. "and"ing the conditions together) and stores them in the results vector. All result objects must be castable to the templated type T. This function filters out disabled objects on the fly - only returning enabled ones.

Definition at line 477 of file TheWarehouse.h.

Referenced by JSONOutput::outputReporters(), and TheWarehouse::QueryCache< AttribThread, AttribBoundaries, AttribInterfaces >::queryIntoHelper().

479  {
480  return queryInto(queryID(conds), results);
481  }
std::size_t queryID(const std::vector< std::unique_ptr< Attribute >> &conds)
Definition: TheWarehouse.C:246
std::vector< T * > & queryInto(const std::vector< std::unique_ptr< Attribute >> &conds, std::vector< T *> &results)
queryInto takes the given conditions (i.e.
Definition: TheWarehouse.h:477

◆ queryInto() [2/2]

template<typename T >
std::vector<T *>& TheWarehouse::queryInto ( int  query_id,
std::vector< T *> &  results,
bool  show_all = false 
)
inline

Definition at line 486 of file TheWarehouse.h.

487  {
488  std::lock_guard<std::mutex> lock(_obj_cache_mutex);
489  auto & objs = query(query_id);
490  results.clear();
491  results.reserve(objs.size());
492  for (auto & obj : objs)
493  {
494  mooseAssert(obj, "Null object");
495  auto cast_obj = dynamic_cast<T *>(obj);
496  if (obj)
497  mooseAssert(cast_obj,
498  "Queried object " + obj->typeAndName() + " has incompatible c++ type with " +
499  MooseUtils::prettyCppType<T>());
500  mooseAssert(std::find(results.begin(), results.end(), cast_obj) == results.end(),
501  "Duplicate object");
502  if (show_all || obj->enabled())
503  results.push_back(cast_obj);
504  }
505  return results;
506  }
std::mutex _obj_cache_mutex
Definition: TheWarehouse.h:535
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:466

◆ readAttribs()

void TheWarehouse::readAttribs ( const MooseObject obj,
std::vector< std::unique_ptr< Attribute >> &  attribs 
)
private

Definition at line 276 of file TheWarehouse.C.

Referenced by add(), and update().

278 {
279  for (auto & ref : _attrib_list)
280  {
281  attribs.emplace_back(ref->clone());
282  attribs.back()->initFrom(obj);
283  }
284 }
std::vector< std::unique_ptr< Attribute > > _attrib_list
Definition: TheWarehouse.h:531

◆ registerAttribute()

template<typename T , typename... Args>
unsigned int TheWarehouse::registerAttribute ( const std::string &  name,
Args...  dummy_args 
)
inline

registers a new "tracked" attribute of type T for the warehouse.

args are all arguments necessary to create an instance of the T class excluding the warehouse reference/pointer which is assumed to be first and automatically inserted. An instance of every registered attribute will be created for and initialized to each object added to the warehouse allowing queries to be executed over specific values the attribute may take on. Attributes must be registered before objects are added to the warehouse. A unique ID associated with the registered attribute is returned - which is generally not needed used by users.

As an example, to register a class with the constructor "YourAttribute(TheWarehouse& w, int foo)", you would call "registerAttribute<YourAttribute>("your_attrib_name", constructor_arg1, ...)". Custom attribute classes are required to pass an attribute name (i.e. "your_attrib_name") to the Attribute base class. The dummy args are forwarded to the attrib class' constructor. The name passed here into registerAttribute must be the same string as the name passed to the Attribute base class's constructor.

Definition at line 429 of file TheWarehouse.h.

430  {
431  auto it = _attrib_ids.find(name);
432  if (it != _attrib_ids.end())
433  return it->second;
434 
435  _attrib_ids[name] = _attrib_list.size();
436  _attrib_list.push_back(std::unique_ptr<Attribute>(new T(*this, dummy_args...)));
437  return _attrib_list.size() - 1;
438  }
std::unordered_map< std::string, unsigned int > _attrib_ids
Definition: TheWarehouse.h:530
std::vector< std::unique_ptr< Attribute > > _attrib_list
Definition: TheWarehouse.h:531

◆ update() [1/2]

void TheWarehouse::update ( MooseObject obj)

update updates the metadata/attribute-info stored for the given object obj that must already exists in the warehouse.

Call this if an object's state has changed in such a way that its warehouse attributes have become stale/incorrect.

Definition at line 154 of file TheWarehouse.C.

Referenced by groupUserObjects().

155 {
156  std::vector<std::unique_ptr<Attribute>> attribs;
157  readAttribs(obj, attribs);
158  _store->set(_obj_ids[obj], std::move(attribs));
159  // reset/invalidate the query cache since query results may have been affected by this object
160  // attribute modification.
161  _obj_cache.clear();
162  _query_cache.clear();
163 }
std::unique_ptr< WarehouseStorage > _store
Definition: TheWarehouse.h:518
void readAttribs(const MooseObject *obj, std::vector< std::unique_ptr< Attribute >> &attribs)
Definition: TheWarehouse.C:276
std::unordered_map< std::vector< std::unique_ptr< Attribute > >, int > _query_cache
Definition: TheWarehouse.h:528
std::unordered_map< MooseObject *, std::size_t > _obj_ids
Definition: TheWarehouse.h:520
std::vector< std::vector< MooseObject * > > _obj_cache
Definition: TheWarehouse.h:524

◆ update() [2/2]

void TheWarehouse::update ( MooseObject obj,
const Attribute extra 
)

update updates the metadata/attribute-info stored for the given object obj that must already exists in the warehouse.

Call this if an object's state has changed in such a way that its warehouse attributes have become stale/incorrect. Any attribute specified in extra overwrites/trumps one read from the object's current state.

Definition at line 142 of file TheWarehouse.C.

143 {
144  std::vector<std::unique_ptr<Attribute>> attribs;
145  attribs.push_back(extra.clone());
146  _store->set(_obj_ids[obj], std::move(attribs));
147  // reset/invalidate the query cache since query results may have been affected by this object
148  // attribute modification.
149  _obj_cache.clear();
150  _query_cache.clear();
151 }
std::unique_ptr< WarehouseStorage > _store
Definition: TheWarehouse.h:518
std::unordered_map< std::vector< std::unique_ptr< Attribute > >, int > _query_cache
Definition: TheWarehouse.h:528
std::unordered_map< MooseObject *, std::size_t > _obj_ids
Definition: TheWarehouse.h:520
std::vector< std::vector< MooseObject * > > _obj_cache
Definition: TheWarehouse.h:524
virtual std::unique_ptr< Attribute > clone() const =0
clone creates and returns and identical (deep) copy of this attribute - i.e.

Member Data Documentation

◆ _attrib_ids

std::unordered_map<std::string, unsigned int> TheWarehouse::_attrib_ids
private

Definition at line 530 of file TheWarehouse.h.

Referenced by attribID(), and registerAttribute().

◆ _attrib_list

std::vector<std::unique_ptr<Attribute> > TheWarehouse::_attrib_list
private

Definition at line 531 of file TheWarehouse.h.

Referenced by readAttribs(), and registerAttribute().

◆ _obj_cache

std::vector<std::vector<MooseObject *> > TheWarehouse::_obj_cache
private

Definition at line 524 of file TheWarehouse.h.

Referenced by add(), prepare(), query(), and update().

◆ _obj_cache_mutex

std::mutex TheWarehouse::_obj_cache_mutex
private

Definition at line 535 of file TheWarehouse.h.

Referenced by count(), prepare(), and queryInto().

◆ _obj_ids

std::unordered_map<MooseObject *, std::size_t> TheWarehouse::_obj_ids
private

Definition at line 520 of file TheWarehouse.h.

Referenced by add(), and update().

◆ _obj_mutex

std::mutex TheWarehouse::_obj_mutex
private

Definition at line 533 of file TheWarehouse.h.

Referenced by add(), and prepare().

◆ _objects

std::vector<std::shared_ptr<MooseObject> > TheWarehouse::_objects
private

Definition at line 519 of file TheWarehouse.h.

Referenced by add(), and prepare().

◆ _query_cache

std::unordered_map<std::vector<std::unique_ptr<Attribute> >, int> TheWarehouse::_query_cache
private

Definition at line 528 of file TheWarehouse.h.

Referenced by add(), prepare(), queryID(), and update().

◆ _query_cache_mutex

std::mutex TheWarehouse::_query_cache_mutex
private

Definition at line 534 of file TheWarehouse.h.

Referenced by prepare(), and queryID().

◆ _store

std::unique_ptr<WarehouseStorage> TheWarehouse::_store
private

Definition at line 518 of file TheWarehouse.h.

Referenced by add(), prepare(), and update().


The documentation for this class was generated from the following files: