@@ -45,6 +45,23 @@ def meta_get_with_value_and_cas
45
45
[ @value_marshaller . retrieve ( read_data ( tokens [ 1 ] . to_i ) , bitflags_from_tokens ( tokens ) ) , cas ]
46
46
end
47
47
48
+ def meta_get_with_value_and_meta_flags ( cache_nils : false )
49
+ tokens = error_on_unexpected! ( [ VA , EN , HD ] )
50
+ return [ ( cache_nils ? ::Dalli ::NOT_FOUND : nil ) , { } ] if tokens . first == EN
51
+
52
+ meta_flags = {
53
+ c : cas_from_tokens ( tokens ) ,
54
+ h : hit_from_tokens ( tokens ) ,
55
+ l : last_accessed_from_tokens ( tokens ) ,
56
+ t : ttl_remaining_from_tokens ( tokens ) ,
57
+ }
58
+ return [ ( cache_nils ? ::Dalli ::NOT_FOUND : nil ) , meta_flags ] unless tokens . first == VA
59
+
60
+ value , bitflag = @value_marshaller . retrieve ( read_data ( tokens [ 1 ] . to_i ) , bitflags_from_tokens ( tokens ) )
61
+ meta_flags [ :bitflag ] = bitflag
62
+ [ value , meta_flags ]
63
+ end
64
+
48
65
def meta_get_without_value
49
66
tokens = error_on_unexpected! ( [ EN , HD ] )
50
67
tokens . first == EN ? nil : true
@@ -180,6 +197,18 @@ def cas_from_tokens(tokens)
180
197
value_from_tokens ( tokens , 'c' ) &.to_i
181
198
end
182
199
200
+ def hit_from_tokens ( tokens )
201
+ value_from_tokens ( tokens , 'h' ) &.to_i != 0
202
+ end
203
+
204
+ def last_accessed_from_tokens ( tokens )
205
+ value_from_tokens ( tokens , 'l' ) &.to_i
206
+ end
207
+
208
+ def ttl_remaining_from_tokens ( tokens )
209
+ value_from_tokens ( tokens , 't' ) &.to_i
210
+ end
211
+
183
212
def key_from_tokens ( tokens )
184
213
encoded_key = value_from_tokens ( tokens , 'k' )
185
214
base64_encoded = tokens . any? ( 'b' )
0 commit comments