code: public final void addPropertyStarts(UnicodeSet set) {
          int i, length;
          int c, start, limit;
  
          byte prev, jg;
  
          /* add the start code point of each same-value range of the trie */
          Iterator<Trie2.Range> trieIterator=trie.iterator();
          Trie2.Range range;
          while(trieIterator.hasNext() && !(range=trieIterator.next()).leadSurrogate) {
              set.add(range.startCodePoint);
          }
  
          /* add the code points from the bidi mirroring table */
          length=indexes[IX_MIRROR_LENGTH];
          for(i=0; i<length; ++i) {
              c=getMirrorCodePoint(mirrors[i]);
              set.add(c, c+1);
          }
  
          /* add the code points from the Joining_Group array where the value changes */
          start=indexes[IX_JG_START];
          limit=indexes[IX_JG_LIMIT];
          byte[] jga=jgArray;
          for(;;) {
              length=limit-start;
              prev=0;
              for(i=0; i<length; ++i) {
                  jg=jga[i];
                  if(jg!=prev) {
                      set.add(start);
                      prev=jg;
                  }
                  ++start;
              }
              if(prev!=0) {
                  /* add the limit code point if the last value was not 0 (it is now start==limit) */
                  set.add(limit);
              }
              if(limit==indexes[IX_JG_LIMIT]) {
                  /* switch to the second Joining_Group range */
                  start=indexes[IX_JG_START2];
                  limit=indexes[IX_JG_LIMIT2];
                  jga=jgArray2;
              } else {
                  break;
              }
          }
  
          /* add code points with hardcoded properties, plus the ones following them */
  
          /* (none right now) */
      }
docs: set of property starts for UnicodeSet ------------------------------- ***