code: private boolean iterateSingleGroup(ValueIterator.Element result, int limit)
      {
          synchronized(GROUP_OFFSETS_) {
          synchronized(GROUP_LENGTHS_) {
              int index = m_name_.getGroupLengths(m_groupIndex_, GROUP_OFFSETS_,
                                                  GROUP_LENGTHS_);
              while (m_current_ < limit) {
                  int    offset = UCharacterName.getGroupOffset(m_current_);
                  String name   = m_name_.getGroupName(
                                            index + GROUP_OFFSETS_[offset],
                                            GROUP_LENGTHS_[offset], m_choice_);
                  if ((name == null || name.length() == 0) &&
                      m_choice_ == UCharacterNameChoice.EXTENDED_CHAR_NAME) {
                      name = m_name_.getExtendedName(m_current_);
                  }
                  if (name != null && name.length() > 0) {
                      result.integer = m_current_;
                      result.value   = name;
                      return false;
                  }
                  ++ m_current_;
              }
          }
          }
          return true;
      }
docs: Group name iteration, iterate all the names in the current 32-group and
  returns the first codepoint that has a valid name.
  @param result stores the result codepoint and name
  @param limit last codepoint + 1 in range to search
  @return false if a codepoint with a name is found in group and we can
  bail from further iteration, true to continue on with the
  iteration