@@ -26,25 +26,40 @@ s2p map[byte]uint16 } func apply(rec *recommendation, reader io.Reader) { symbolReader := iou.SizedReader(iou.ReaderFunc(func(output []byte) (int, error) { - for i := 0; i < len(output)-1; i++ { + var i int = 0 + for ; i < len(output)-1; i++ { // Read a byte from the underlying reader count, err := reader.Read(output[i : i+1]) - if err != nil || count != 1 { - return i + count, err + + // If we can't read anything else - return immediatelly + if count == 0 { + return i, err } // Convert the byte to a pair if there is a mapping for it if pair, ok := rec.s2p[output[i]]; ok { output[i] = byte(pair >> 8) // extract the high byte from the pair i++ output[i] = byte(pair) // leave only the low byte from the pair } + + // Return on error + if err != nil { + return i + 1, err + } } + return i + 1, nil }), 2) + + pairReader := iou.ReaderFunc(func(output []byte) (int, error) { + for i := 0; i < len(output); i++ { + + } + }) } func recommend(pairs pairSlice, symbols symbolSlice) *recommendation { var ( rec recommendation