summaryrefslogtreecommitdiff
path: root/lib/rb/lib
diff options
context:
space:
mode:
authorBryan Duxbury <bryanduxbury@apache.org>2009-05-29 20:18:58 +0000
committerBryan Duxbury <bryanduxbury@apache.org>2009-05-29 20:18:58 +0000
commit2fb877a794ce3df3eb488926f991e210f419ebf6 (patch)
tree4705289332d137390920c6e915d47d31d151d972 /lib/rb/lib
parent9e347410049ea20bf69f5fcf79d36d89e44f6121 (diff)
downloadthrift-2fb877a794ce3df3eb488926f991e210f419ebf6.tar.gz
THRIFT-511. rb: Better performing hash method for generated structs
This patch uses a hash function that takes into account the hashes of struct elements, instead of just returning 0. This make hashes of Thrift structs O(1) instead of O(n). git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@780094 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'lib/rb/lib')
-rw-r--r--lib/rb/lib/thrift/struct.rb8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/rb/lib/thrift/struct.rb b/lib/rb/lib/thrift/struct.rb
index 01aae56b7..dfc8a2fec 100644
--- a/lib/rb/lib/thrift/struct.rb
+++ b/lib/rb/lib/thrift/struct.rb
@@ -141,9 +141,13 @@ module Thrift
self.class == other.class && self == other
end
- # for the time being, we're ok with a naive hash. this could definitely be improved upon.
def hash
- 0
+ field_values = []
+ each_field do |fid, field_info|
+ name = field_info[:name]
+ field_values << self.instance_variable_get("@#{name}")
+ end
+ field_values.hash
end
def differences(other)