private boolean evaluateFlush()
  {
    //Debug.out ("evaluateFlush");
    int suitindex=-1;
    for (int i=0; i<Suit.NUM_SUIT; i++)
      {
	// note: this assumes a hand can hold at most
	// one flush
	//if (_suithash[i] >= NUM_HAND_CARDS)
	if (((_suithash>>(4*i)) & 0xF) >= NUM_HAND_CARDS)
	  {
	    suitindex = i;
	    break;
	  }
      }

    if (suitindex >= 0)
      {
	// we *know* we have some kind of a flush

	// note: we aren't just looking for
	// straight flushes here, we are also
	// ordering the flushes by card values
	int run = 0;
	int start = 0;
	for (int i=Rank.NUM_RANK-1,j=0; i>=0; i--)
	  {
	    if ((_card_hash[suitindex] & (0x01<<i)) > 0)
	      {
		run++;
				// 		if (j<_val.orderedRank.length)
				// 		  _val.orderedRank[j] = i;
		j++;
		_intval ^= (_card_hash[suitindex] & (0x01<<i));
	      }
	    else 
	      run = 0;
	    if (run == 5)
	      {
		_intval ^= STRAIGHT_FLUSH_MASK;
		_intval ^= STRAIGHT_FLUSH << 16;
		return true;
	      }
	  }

	if (run == 4 && (_card_hash[suitindex] & (0x01<<Rank.NUM_RANK-1)) > 0)
	  {
	    _intval ^= STRAIGHT_FLUSH_MASK;
	    _intval ^= STRAIGHT_FLUSH << 16;
	    return true;
	  }

	_intval ^= FLUSH << 16;
	_intval ^= FLUSH_MASK;
	return true;
      }

    return false;
  }