AcademySoftwareFoundation / AcademySoftwareFoundation/OpenColorIO
Add helper methods to ViewingRules class
- Vorherrschende Sprache
- C++
- Sterne
- 2.1k
- Forks
- 503
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Here are some helper functions that contain useful functionality to add to the ViewingRules class. The API of the functions below should be altered, as appropriate. As always, unit tests must be added.
```
bool viewingRulesAreEqual(const ConstViewingRulesRcPtr & r1,
size_t r1Idx,
const ConstViewingRulesRcPtr & r2,
size_t r2Idx)
{
// NB: No need to compare the name of the rules, that should be done in the caller.
// Compare color space tokens, handling the case where they may be in a different order.
if (r1->getNumColorSpaces(r1Idx) != r2->getNumColorSpaces(r2Idx))
{
return false;
}
TokensManager r1ColorSpaces;
for (size_t m = 0; m < r1->getNumColorSpaces(r1Idx); m++)
{
r1ColorSpaces.addToken(r1->getColorSpace(r1Idx, m));
}
for (size_t m = 0; m < r2->getNumColorSpaces(r2Idx); m++)
{
if (!r1ColorSpaces.hasToken(r2->getColorSpace(r2Idx, m)))
{
return false;
}
}
// Compare encoding tokens, handling the case where they may be in a different order.
if (r1->getNumEncodings(r1Idx) != r2->getNumEncodings(r2Idx))
{
return false;
}
TokensManager r1Encodings;
for (size_t m = 0; m < r1->getNumEncodings(r1Idx); m++)
{
r1Encodings.addToken(r1->getEncoding(r1Idx, m));
}
for (size_t m = 0; m < r2->getNumEncodings(r2Idx); m++)
{
if(!r1Encodings.hasToken(r2->getEncoding(r2Idx, m)))
{
return false;
}
}
// Compare the custom keys, handling the case where they may be in a different order.
if (r1->getNumCustomKeys(r1Idx) != r2->getNumCustomKeys(r2Idx))
{
return false;
}
CustomKeysContainer r1CustomKeys;
for (size_t m = 0; m < r1->getNumCustomKeys(r1Idx); m++)
{
r1CustomKeys.set(r1->getCustomKeyName(r1Idx, m), r1->getCustomKeyValue(r1Idx, m));
}
for (size_t m = 0; m < r2->getNumCustomKeys(r2Idx); m++)
{
if (!r1CustomKeys.hasKey(r2->getCustomKeyName(r2Idx, m)))
{
return false;
}
else
{
if (Platform::Strcasecmp(r1CustomKeys.getValueForKey(r2->getCustomKeyName(r2Idx, m)),
r2->getCustomKeyValue(r2Idx, m)) != 0)
{
return false;
}
}
}
return true;
}
```
```
void copyViewingRule(const ConstViewingRulesRcPtr & src,
size_t srcIdx,
size_t dstIdx,
ViewingRulesRcPtr & rules)
{
rules->insertRule(dstIdx, src->getName(srcIdx));
for (int j = 0; j < static_cast(src->getNumColorSpaces(srcIdx)); j++)
{
rules->addColorSpace(dstIdx, src->getColorSpace(srcIdx, j));
}
for (int k = 0; k < static_cast(src->getNumEncodings(srcIdx)); k++)
{
rules->addEncoding(dstIdx, src->getEncoding(srcIdx, k));
}
for (int l = 0; l < static_cast(src->getNumCustomKeys(srcIdx)); l++)
{
rules->setCustomKey(dstIdx, src->getCustomKeyName(srcIdx, l), src->getCustomKeyValue(srcIdx, l));
}
}
```
Beitragsleitfaden
Rechercherichtung
Beginnen Sie damit, die Klasse ViewingRules und ihre vorhandenen Unit-Tests zu finden. Überprüfen Sie das bereitgestellte Verhalten von viewingRulesAreEqual und copyViewingRule und bestimmen Sie anschließend die geeignete öffentliche API. Fertig ist die Aufgabe, wenn die Hilfsmethoden in ViewingRules verfügbar sind und Unit-Tests Vergleiche unabhängig von der Reihenfolge sowie das Kopieren von Farbräumen, Encodings und benutzerdefinierten Schlüsseln abdecken.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- cpp
- Bereich
- computer-graphics
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100