History

latest jurisdiction work

ZappoMan committed 13 years ago

Commit 558fca71 parent f57d86d6 files · +92 −14Browse files

Showing the changes to libraries/shared/src/OctalCode.cpp (1 of 6 files). Show all

Unified · Split

libraries/shared/src/OctalCode.cpp+39−0
@@ -257,3 +257,42 @@ unsigned char* rebaseOctalCode(unsigned char* originalOctalCode, unsigned char* · 256 unmodified lines
257257 return newCode;
258258 }
259259
260+bool isAncestorOf(unsigned char* possibleAncestor, unsigned char* possibleDescendent, int descendentsChild) {
261+ if (!possibleAncestor || !possibleDescendent) {
262+ return false;
263+ }
264+
265+ int ancestorCodeLength = numberOfThreeBitSectionsInCode(possibleAncestor);
266+ if (ancestorCodeLength == 0) {
267+ return true; // this is the root, it's the anscestor of all
268+ }
269+
270+ int descendentCodeLength = numberOfThreeBitSectionsInCode(possibleDescendent);
271+
272+ // if the caller also include a child, then our descendent length is actually one extra!
273+ if (descendentsChild != CHECK_NODE_ONLY) {
274+ descendentCodeLength++;
275+ }
276+
277+ if (ancestorCodeLength > descendentCodeLength) {
278+ return false; // if the descendent is shorter, it can't be a descendent
279+ }
280+
281+ // compare the sections for the ancestor to the descendent
282+ for (int section = 0; section < ancestorCodeLength; section++) {
283+ char sectionValueAncestor = getOctalCodeSectionValue(possibleAncestor, section);
284+ char sectionValueDescendent;
285+ if (ancestorCodeLength <= descendentCodeLength) {
286+ sectionValueDescendent = getOctalCodeSectionValue(possibleDescendent, section);
287+ } else {
288+ assert(descendentsChild != CHECK_NODE_ONLY);
289+ sectionValueDescendent = descendentsChild;
290+ }
291+ if (sectionValueAncestor != sectionValueDescendent) {
292+ return false; // first non-match, means they don't match
293+ }
294+ }
295+
296+ // they all match, so we are an ancestor
297+ return true;
298+}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t