bool Registry::Key::HasValue() const { RefObjQIPtr<IFaces::INamedVariable> Var = Keys.First(); if (!Var.Get()) throw RegistryException("Can't get variable"); RefObjPtr<IFaces::IVariant> Value; if (Var->Get(Value.GetPPtr()) != IFaces::retOk) throw RegistryException("Can't get value"); return Value->GetType() != IFaces::IVariant::vtIBase; }
bool Registry::Key::HasChildKeys() const { RefObjQIPtr<IFaces::INamedVariable> Var = Keys.First(); if (!Var.Get()) throw RegistryException("Can't get variable"); RefObjPtr<IFaces::IVariant> Value; if (Var->Get(Value.GetPPtr()) != IFaces::retOk) throw RegistryException("Can't get value"); if (Value->GetType() != IFaces::IVariant::vtIBase) return false; RefObjPtr<IFaces::IBase> ChildItem; if (Value->GetValue(reinterpret_cast<void**>(ChildItem.GetPPtr())) != IFaces::retOk || !RefObjQIPtr<IFaces::IEnum>(ChildItem).Get()) { throw RegistryException("Unknown child item"); } return true; }
const Registry::Key::KeysPoolPtr Registry::Key::GetChildKeys() const { KeysPoolPtr RetPool(new KeysPool); for (RefObjQIPtr<IFaces::INamedVariable> Var = Keys.First() ; Var.Get() ; Var = Keys.Next()) { RefObjPtr<IFaces::IVariant> Value; if (Var->Get(Value.GetPPtr()) != IFaces::retOk) throw RegistryException("Can't get value"); if (Value->GetType() != IFaces::IVariant::vtIBase) throw RegistryException("Unknown child item"); RefObjPtr<IFaces::IBase> ChildItem; if (Value->GetValue(reinterpret_cast<void**>(ChildItem.GetPPtr())) != IFaces::retOk) throw RegistryException("Can't get child enum"); RefObjQIPtr<IFaces::IEnum> Enum(ChildItem); if (!Enum.Get()) throw RegistryException("Unknown child item"); RetPool->push_back(KeyPtr(new Key(IFacesImpl::IEnumHelper(Enum), Var->GetName()))); } return RetPool; }