changes
This commit is contained in:
33
src/main.rs
33
src/main.rs
@@ -200,14 +200,26 @@ impl RoyaltyTree {
|
||||
self.tree[index].acc
|
||||
}
|
||||
fn add_royalty(&mut self, amount: FiNum) {
|
||||
if self.next_entry==0 { self.spare_change+=amount }
|
||||
if self.next_entry==0 || FiNum::is_zero(self.tree[self.forefather()].weight) { self.spare_change+=amount }
|
||||
else {
|
||||
let ff=self.forefather();
|
||||
if self.weight_here_below(ff).is_zero() { self.spare_change+=amount } else { self.tree[ff].lazy+=amount };
|
||||
}
|
||||
}
|
||||
fn remove_order_id(&mut self, id: usize) {
|
||||
fn remove_order_id(&mut self, id: usize) { // And zero out in the tree
|
||||
let pos=*self.order_finder.get(&id).unwrap();
|
||||
self.order_finder.remove(&id);
|
||||
let weight=self.tree[pos].weight;
|
||||
self.sub_weight(pos,weight);
|
||||
}
|
||||
fn sub_weight(&mut self, index: usize, weight: FiNum) {
|
||||
self.get_royalty(index);
|
||||
let redist=self.tree[index].acc;
|
||||
self.tree[index].acc=FiNum::zero();
|
||||
let mut index=index;
|
||||
let ff=self.forefather();
|
||||
while index!=ff { self.tree[index].weight-=weight; index=wt_parent(index); }
|
||||
self.add_royalty(redist);
|
||||
}
|
||||
fn set_location(&mut self, id: usize, index: usize) {
|
||||
self.order_finder.insert(id,index);
|
||||
@@ -610,6 +622,23 @@ impl OrderQueue {
|
||||
}
|
||||
|
||||
impl Market {
|
||||
fn random_orders(&mut self, seed: u64, count: u64) {
|
||||
let mut rng: StdRng=StdRng::seed_from_u64(13u64);
|
||||
for _ in 1..count {
|
||||
let cmd=match rng.gen_range(1..2) {
|
||||
1 => Command::AddFunds { user_id: rng.gen_range(1..self.traders.len()-1),
|
||||
asset_id: rng.gen_range(0..self.assets.len()-1),
|
||||
amt: FiNum::new(rng.gen_range(1<<32..20<<32)), },
|
||||
2 => Command::Order { user_id: rng.gen_range(1..self.traders.len()-1),
|
||||
sell_type: rng.gen_range(0..self.assets.len()-1),
|
||||
sell_qty: FiNum::new(rng.gen_range(1<<32..20<<32)),
|
||||
buy_type: rng.gen_range(0..self.assets.len()-1),
|
||||
buy_qty: FiNum::new(rng.gen_range(1<<32..20<<32)), },
|
||||
_ => Command::Error("This can never happen".to_string()),
|
||||
};
|
||||
self.execute(&cmd);
|
||||
}
|
||||
}
|
||||
fn exercise(&mut self) {
|
||||
let mut rng: StdRng=StdRng::seed_from_u64(13u64);
|
||||
let teppy=self.register_trader("Teppy");
|
||||
|
||||
Reference in New Issue
Block a user