♻️ refactor: mark where we can optimize tables for int keys
n-body actually doesn't need this, it's bottlenecked on string key reads and writes.main
							parent
							
								
									4e9f9a74c5
								
							
						
					
					
						commit
						5331b5a4d2
					
				|  | @ -508,7 +508,7 @@ impl <'a> State <'a> { | |||
| 				
 | ||||
| 				let value = { | ||||
| 					let table = self.reg (*b).as_table ().expect ("GetI only works on tables").borrow (); | ||||
| 					table.get (key) | ||||
| 					table.get_int (key) | ||||
| 				}; | ||||
| 				
 | ||||
| 				*self.reg_mut (*a) = value; | ||||
|  | @ -752,7 +752,7 @@ impl <'a> State <'a> { | |||
| 				
 | ||||
| 				let mut dst = self.reg_mut (*a).as_table ().expect ("SetI only works on tables").borrow_mut (); | ||||
| 				
 | ||||
| 				dst.insert (i64::from (*b), value); | ||||
| 				dst.insert_int (i64::from (*b), value); | ||||
| 			}, | ||||
| 			Instruction::SetList (a, b, c, k) => { | ||||
| 				if *b == 0 { | ||||
|  | @ -766,7 +766,7 @@ impl <'a> State <'a> { | |||
| 				
 | ||||
| 				for i in 1..=*b { | ||||
| 					let src = self.reg (*a + i); | ||||
| 					dst.insert (Value::from (i64::from (*c + i)), src.clone ()); | ||||
| 					dst.insert_int (i64::from (*c + i), src.clone ()); | ||||
| 				} | ||||
| 			}, | ||||
| 			Instruction::SetTabUp (_a, _b, _c) => unimplemented! (), | ||||
|  |  | |||
							
								
								
									
										13
									
								
								src/value.rs
								
								
								
								
							
							
						
						
									
										13
									
								
								src/value.rs
								
								
								
								
							|  | @ -261,10 +261,16 @@ impl Table { | |||
| 		self.get_inner (&(key.into ())) | ||||
| 	} | ||||
| 	
 | ||||
| 	pub fn get_int (&self, key: i64) -> Value { | ||||
| 		self.get_inner (&(key.into ())) | ||||
| 	} | ||||
| 	
 | ||||
| 	fn insert_inner (&mut self, a: Value, b: Value) { | ||||
| 		self.hash.insert (a, b); | ||||
| 	} | ||||
| 	
 | ||||
| 	/// Insert value at arbitrary key
 | ||||
| 	
 | ||||
| 	pub fn insert <A: Into <Value>, B: Into <Value>> ( | ||||
| 		&mut self, | ||||
| 		a: A, | ||||
|  | @ -273,6 +279,13 @@ impl Table { | |||
| 		self.insert_inner (a.into (), b.into ()) | ||||
| 	} | ||||
| 	
 | ||||
| 	/// Insert value at integer key
 | ||||
| 	
 | ||||
| 	pub fn insert_int <A: Into <Value>> (&mut self, k: i64, v: A) 
 | ||||
| 	{ | ||||
| 		self.insert_inner (k.into (), v.into ()) | ||||
| 	} | ||||
| 	
 | ||||
| 	pub fn length (&self) -> i64 { | ||||
| 		for i in 1..i64::MAX { | ||||
| 			if self.get (i) == Value::Nil { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 _
						_