class Google::Protobuf::RepeatedField
Private Class Methods
define_array_wrapper_method(method_name)
click to toggle source
# File lib/google/protobuf/repeated_field.rb, line 127 def define_array_wrapper_method(method_name) define_method(method_name) do |*args, &block| arr = self.to_a result = arr.send(method_name, *args) self.replace(arr) return result if result return block ? block.call : result end end
define_array_wrapper_with_result_method(method_name)
click to toggle source
# File lib/google/protobuf/repeated_field.rb, line 139 def define_array_wrapper_with_result_method(method_name) define_method(method_name) do |*args, &block| # result can be an Enumerator, Array, or nil # Enumerator can sometimes be returned if a block is an optional argument and it is not passed in # nil usually specifies that no change was made result = self.to_a.send(method_name, *args, &block) if result new_arr = result.to_a self.replace(new_arr) if result.is_a?(Enumerator) # generate a fresh enum; rewinding the exiting one, in Ruby 2.2, will # reset the enum with the same length, but all the #next calls will # return nil result = new_arr.to_enum # generate a wrapper enum so any changes which occur by a chained # enum can be captured ie = ProxyingEnumerator.new(self, result) result = ie.to_enum end end result end end
Public Instance Methods
empty?()
click to toggle source
# File lib/google/protobuf/repeated_field.rb, line 115 def empty? self.size == 0 end
first(n=nil)
click to toggle source
# File lib/google/protobuf/repeated_field.rb, line 81 def first(n=nil) if n.nil? return self[0] elsif n < 0 raise ArgumentError, "negative array size" else return self[0...n] end end
last(n=nil)
click to toggle source
# File lib/google/protobuf/repeated_field.rb, line 92 def last(n=nil) if n.nil? return self[-1] elsif n < 0 raise ArgumentError, "negative array size" else start = [self.size-n, 0].max return self[start...self.size] end end
pop(n=nil)
click to toggle source
# File lib/google/protobuf/repeated_field.rb, line 104 def pop(n=nil) if n results = [] n.times{ results << pop_one } return results else return pop_one end end