Esempio n. 1
0
void ComponentStorage::printError(const std::string& message) {
  cout << "Fatal injection error: " << message << endl;
  cout << "Registered types:" << endl;
  for (auto typePair : typeRegistry) {
    std::cout << demangleTypeName(typePair.first.name()) << std::endl;
  }
}
Esempio n. 2
0
void* ComponentStorage::getPtr(TypeIndex typeIndex) {
  auto itr = typeRegistry.find(typeIndex);
  FruitCheck(itr != typeRegistry.end(), [=](){return "attempting to getPtr() on a non-registered type: " + demangleTypeName(typeIndex.name());});
  TypeInfo& typeInfo = itr->second;
  if (typeInfo.storedSingleton == nullptr) {
    FruitCheck(bool(typeInfo.create), [=](){return "attempting to create an instance for the type " + demangleTypeName(typeIndex.name()) + " but there is no create operation";});
    std::tie(typeInfo.storedSingleton, typeInfo.destroy) = typeInfo.create(*this, typeInfo.createArgument);
    createdSingletons.push_back(typeIndex);
  }
  void* p = typeInfo.storedSingleton;
  // This can happen if the user-supplied provider returns nullptr.
  check(p != nullptr, [=](){return "attempting to get an instance for the type " + demangleTypeName(typeIndex.name()) + " but got nullptr";});
  return p;
}
Esempio n. 3
0
inline std::string demangleTypeName(T& type) {
  return demangleTypeName(typeid(type).name());
}