lib/raindrops/struct.rb in raindrops-0.4.1 vs lib/raindrops/struct.rb in raindrops-0.5.0
- old
+ new
@@ -1,8 +1,23 @@
# -*- encoding: binary -*-
+# This is a wrapper around Raindrops objects much like the core Ruby
+# \Struct can be seen as a wrapper around the core \Array class.
+# It's usage is similar to the core \Struct class, except its fields
+# may only be used to house unsigned long integers.
+#
+# class Foo < Raindrops::Struct.new(:readers, :writers)
+# end
+#
+# foo = Foo.new 0, 0
+#
+# foo.incr_writers -> 1
+# foo.incr_readers -> 1
+#
class Raindrops::Struct
+ # returns a new class derived from Raindrops::Struct and supporting
+ # the given +members+ as fields, just like \Struct.new in core Ruby.
def self.new(*members)
members = members.map { |x| x.to_sym }.freeze
str = <<EOS
def initialize(*values)
(MEMBERS.size >= values.size) or raise ArgumentError, "too many arguments"