ezUInt32 ezQtPropertyContainerWidget::GetRequiredElementCount() const { if (m_pProp->GetCategory() == ezPropertyCategory::Map) { m_Keys.Clear(); EZ_VERIFY(m_pObjectAccessor->GetKeys(m_Items[0].m_pObject, m_pProp, m_Keys).m_Result.Succeeded(), "GetKeys should always succeed."); ezHybridArray<ezVariant, 16> keys; for (ezUInt32 i = 1; i < m_Items.GetCount(); i++) { keys.Clear(); EZ_VERIFY(m_pObjectAccessor->GetKeys(m_Items[i].m_pObject, m_pProp, keys).m_Result.Succeeded(), "GetKeys should always succeed."); for (ezInt32 k = (ezInt32)m_Keys.GetCount() - 1; k >= 0; --k) { if (!keys.Contains(m_Keys[k])) { m_Keys.RemoveAtAndSwap(k); } } } m_Keys.Sort([](const ezVariant& a, const ezVariant& b) { return a.Get<ezString>().Compare(b.Get<ezString>()) < 0; }); return m_Keys.GetCount(); } else { ezInt32 iElements = 0x7FFFFFFF; for (const auto& item : m_Items) { ezInt32 iCount = 0; EZ_VERIFY(m_pObjectAccessor->GetCount(item.m_pObject, m_pProp, iCount).m_Result.Succeeded(), "GetCount should always succeed."); iElements = ezMath::Min(iElements, iCount); } EZ_ASSERT_DEV(iElements >= 0, "Mismatch between storage and RTTI ({0})", iElements); m_Keys.Clear(); for (ezUInt32 i = 0; i < (ezUInt32)iElements; i++) { m_Keys.PushBack(i); } return ezUInt32(iElements); } }
ezImageFormat::Enum ezImageConversion::FindClosestCompatibleFormat(ezImageFormat::Enum format, ezArrayPtr<const ezImageFormat::Enum> compatibleFormats) { if (!s_conversionTableValid) { RebuildConversionTable(); } TableEntry bestEntry; ezImageFormat::Enum bestFormat = ezImageFormat::UNKNOWN; for (ezUInt32 targetIndex = 0; targetIndex < ezUInt32(compatibleFormats.GetCount()); targetIndex++) { ezUInt32 tableIndex = MakeKey(format, compatibleFormats[targetIndex]); TableEntry candidate; if (s_conversionTable.TryGetValue(tableIndex, candidate) && candidate < bestEntry) { bestEntry = candidate; bestFormat = compatibleFormats[targetIndex]; } } return bestFormat; }