code: public Occurred compareTo(Clock c) {
          if(this == c) return Occurred.EQUICONCURRENTLY;
          if(ZERO == c) return Occurred.AFTER;
          if(this == ZERO) return Occurred.BEFORE;
          
          int neg = 0, pos = 0, eq = 0;
          try {
              final long[] dst = c.values();
              final int len = dst.length;
              if(_values.length == len) {
                  for(int i = 0; i < len; i++) {
                      long cmp = _values[i] - dst[i];
                      if(cmp < 0) {
                          neg++;
                      } else if(cmp > 0) {
                          pos++;
                      } else {
                          eq++;
                      }
                  }
                  
                  if(eq == len) {
                      return Occurred.EQUICONCURRENTLY;
                  } else if(neg == len) {
                      return Occurred.BEFORE;
                  } else if(pos == len) {
                      return Occurred.AFTER;
                  } else {
                      neg += eq;
                      if(neg == len) {
                          return Occurred.BEFORE;
                      }
                      
                      pos += eq;
                      if(pos == len) {
                          return Occurred.AFTER;
                      }
                      
                      return Occurred.CONCURRENTLY;
                  }
              }
          } catch(Exception e) {}
          
          throw new IncomparableClocksException(this, c);
      }
docs: Compares this clock with the specified clock for ordering.
  
  @param c - a clock to compare.