Sha256: e701abc566cdb9d84c14887abd866b97dfab025015a9476b6c0d3ae8e2efedb5

Contents?: true

Size: 1.26 KB

Versions: 8

Compression:

Stored size: 1.26 KB

Contents

module Concurrent
  module Promises
    module FactoryMethods

      # @!visibility private

      module OldChannelIntegration

        # @!visibility private

        # only proof of concept
        # @return [Future]
        def select(*channels)
          # TODO (pitr-ch 26-Mar-2016): re-do, has to be non-blocking
          future do
            # noinspection RubyArgCount
            Channel.select do |s|
              channels.each do |ch|
                s.take(ch) { |value| [value, ch] }
              end
            end
          end
        end
      end

      include OldChannelIntegration
    end

    class Future < AbstractEventFuture

      # @!visibility private

      module OldChannelIntegration

        # @!visibility private

        # Zips with selected value form the suplied channels
        # @return [Future]
        def then_select(*channels)
          future = Concurrent::Promises.select(*channels)
          ZipFuturesPromise.new_blocked_by2(self, future, @DefaultExecutor).future
        end

        # @note may block
        # @note only proof of concept
        def then_put(channel)
          on_fulfillment_using(:io, channel) { |value, channel| channel.put value }
        end
      end

      include OldChannelIntegration
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
concurrent-ruby-edge-0.6.0 lib/concurrent-ruby-edge/concurrent/edge/old_channel_integration.rb
concurrent-ruby-edge-0.6.0.pre1 lib/concurrent-ruby-edge/concurrent/edge/old_channel_integration.rb
concurrent-ruby-edge-0.5.0 lib-edge/concurrent/edge/old_channel_integration.rb
concurrent-ruby-edge-0.4.1 lib-edge/concurrent/edge/old_channel_integration.rb
concurrent-ruby-edge-0.4.0.pre2 lib-edge/concurrent/edge/old_channel_integration.rb
concurrent-ruby-edge-0.4.0.pre1 lib-edge/concurrent/edge/old_channel_integration.rb
concurrent-ruby-edge-0.3.1 lib/concurrent/edge/old_channel_integration.rb
concurrent-ruby-edge-0.3.0 lib/concurrent/edge/old_channel_integration.rb