persistable srecord noeq PriceDigitizer(PriceCells cells) { double lastPrice = Double.NaN; gettable double lastDigitizedPrice = Double.NaN; double lastCellLimitTouched = Double.NaN; // returns new digitized price double digitize(double price) { lastDigitizedPrice = lastCellLimitTouched; if (!isNaN(lastPrice)) { if (price > lastPrice) { double limit = cells.nextCellLimit(lastPrice); if (price >= limit) lastCellLimitTouched = limit; } else if (price < lastPrice) { double limit = cells.previousCellLimit(lastPrice); if (price <= limit) lastCellLimitTouched = limit; } } lastPrice = price; ret lastCellLimitTouched; } double digitizedPrice() { ret lastCellLimitTouched; } }