def <<(measurement)
      # Make sure the value provided is a datapoint
      datapoint = cast_to_datapoint(measurement)

      # If only_save_changes is true, ignore datapoints whose value is the same as the current value
      if only_save_changes and BigDecimal.new(datapoint.value) == BigDecimal.new(current_value)
        @logger.debug "Ignoring datapoint from #{datapoint.at} because value did not change from #{current_value}"
      else
        @current_value = datapoint.value
        datapoints << datapoint
        @logger.debug "Queuing datapoint from #{datapoint.at} with value #{current_value}"
      end

      # See if the buffer is full
      check_datapoints_buffer
    end
def <<(measurement)
      # Make sure the value provided is a datapoint
      datapoint = cast_to_datapoint(measurement)

      # If only_save_changes is true, ignore datapoints whose value is the same as the current value
      if only_save_changes and BigDecimal.new(datapoint.value) == BigDecimal.new(current_value)
        @logger.debug "Ignoring datapoint from #{datapoint.at} because value did not change from #{current_value}"
      else
        @current_value = datapoint.value
        datapoints << datapoint
        @logger.debug "Queuing datapoint from #{datapoint.at} with value #{current_value}"
      end

      # See if the buffer is full
      check_datapoints_buffer
    end
Have shift operator load the datapoint into the datastream's datapoints array