private boolean flipHorizontal(long binPosition, boolean goesRight){

        boolean hasFlippableDisk = false;
        long searchPosition = binPosition;

        if(goesRight && (binPosition & 0x0101010101010101l) == 0)
            searchPosition = binPosition >> 1;
        else if( !goesRight && (binPosition & 0x8080808080808080l) == 0 )
            searchPosition = binPosition << 1;
        else
            return false;

        while(!isHorizontalEndOfBoard(searchPosition)){
            // if disk does not exist at search position,
            // we can't flip disk. Therefore return false.
            if( !isPlaced(searchPosition) )
                return false;
            // if search position's disk is mine and we've already found flippable disks(disk which is not mine),
            // return true.
            if( isSameDisk(searchPosition) ){
                if(hasFlippableDisk)
                    return true;
                else
                    return false;
            }
            else{
                this.binIsBlack = binFlippedDiskOf(searchPosition);
                hasFlippableDisk = true;
            }

            if(goesRight)
                searchPosition = ( searchPosition >> 1 );
            else
                searchPosition = ( searchPosition << 1 );
        }
        return false;
    }