changes
This commit is contained in:
33
src/main.rs
33
src/main.rs
@@ -200,14 +200,26 @@ impl RoyaltyTree {
|
|||||||
self.tree[index].acc
|
self.tree[index].acc
|
||||||
}
|
}
|
||||||
fn add_royalty(&mut self, amount: FiNum) {
|
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 {
|
else {
|
||||||
let ff=self.forefather();
|
let ff=self.forefather();
|
||||||
if self.weight_here_below(ff).is_zero() { self.spare_change+=amount } else { self.tree[ff].lazy+=amount };
|
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);
|
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) {
|
fn set_location(&mut self, id: usize, index: usize) {
|
||||||
self.order_finder.insert(id,index);
|
self.order_finder.insert(id,index);
|
||||||
@@ -610,6 +622,23 @@ impl OrderQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Market {
|
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) {
|
fn exercise(&mut self) {
|
||||||
let mut rng: StdRng=StdRng::seed_from_u64(13u64);
|
let mut rng: StdRng=StdRng::seed_from_u64(13u64);
|
||||||
let teppy=self.register_trader("Teppy");
|
let teppy=self.register_trader("Teppy");
|
||||||
|
|||||||
Reference in New Issue
Block a user