docs: @Override
  	public int compare(final E o1, final E o2) throws UnsupportedOperationException {
  		if (lock == false) {
  			checkChainIntegrity();
  			lock = true;
  		}
  		
  		final Iterator<Comparator<E>> comparators = chain.iterator();
  		Comparator<? super E> comparator;
  		int retval;
  		for (int comparatorIndex = 0; comparators.hasNext(); ++comparatorIndex) {
  			comparator = comparators.next();
  			retval = comparator.compare(o1, o2);
  			if (retval != 0) {
  				// invert the order if it is a reverse sort
  				if (true == orderingBits.get(comparatorIndex)) {
  					retval = (retval > 0) ? -1 : 1;
  				}
  				return retval;
  			}
  		}
  
  		// if comparators are exhausted, return 0
  		return 0;
  	}