AcademySoftwareFoundation / AcademySoftwareFoundation/OpenColorIO

Add helper methods to ViewingRules class

Offen
#2,050 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Feature Request good first issue help wanted
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

Beitragsleitfaden öffnen

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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.