| 209 | } |
| 210 | |
| 211 | pub fn add(&mut self, key: &[u8], value: &[u8]) { |
| 212 | let start = self.data.len() as i32; |
| 213 | |
| 214 | // key_len (var int) + key + value_len (var int) + value |
| 215 | let mut var_buf = [0u8; 5]; |
| 216 | let n = encode_var_int_to_slice(&mut var_buf, 0, key.len() as i32); |
| 217 | self.data.extend_from_slice(&var_buf[..n]); |
| 218 | self.data.extend_from_slice(key); |
| 219 | |
| 220 | let n = encode_var_int_to_slice(&mut var_buf, 0, value.len() as i32); |
| 221 | self.data.extend_from_slice(&var_buf[..n]); |
| 222 | self.data.extend_from_slice(value); |
| 223 | |
| 224 | let end = self.data.len() as i32; |
| 225 | self.positions.push(start); |
| 226 | |
| 227 | if self.aligned { |
| 228 | let current_size = end - start; |
| 229 | if self.aligned_size == 0 { |
| 230 | self.aligned_size = current_size; |
| 231 | } else { |
| 232 | self.aligned = self.aligned_size == current_size; |
| 233 | } |
| 234 | } |
| 235 | } |
| 236 | |
| 237 | pub fn entry_count(&self) -> usize { |
| 238 | self.positions.len() |