changes
This commit is contained in:
14
src/main.rs
14
src/main.rs
@@ -110,6 +110,7 @@ struct Order {
|
|||||||
commission_remain: FiNum, // Based on commission1
|
commission_remain: FiNum, // Based on commission1
|
||||||
owner: usize,
|
owner: usize,
|
||||||
rt_loc: usize, // Location in the Royalty Tree
|
rt_loc: usize, // Location in the Royalty Tree
|
||||||
|
id: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RoyaltyTree {
|
struct RoyaltyTree {
|
||||||
@@ -268,6 +269,7 @@ struct Market {
|
|||||||
orders: HashMap<(usize,usize),PQueue<Rc<RefCell<Order>>>>,
|
orders: HashMap<(usize,usize),PQueue<Rc<RefCell<Order>>>>,
|
||||||
royalties: HashMap<usize,RoyaltyTree>, // Active orders that are accepting asset X. They receive royalties when someone makes an order to sell X
|
royalties: HashMap<usize,RoyaltyTree>, // Active orders that are accepting asset X. They receive royalties when someone makes an order to sell X
|
||||||
royalty_rate: HashMap<usize,FiNum>,
|
royalty_rate: HashMap<usize,FiNum>,
|
||||||
|
next_order_id: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Market {
|
impl Market {
|
||||||
@@ -281,6 +283,7 @@ impl Market {
|
|||||||
orders: HashMap::new(),
|
orders: HashMap::new(),
|
||||||
royalties: HashMap::new(),
|
royalties: HashMap::new(),
|
||||||
royalty_rate: HashMap::new(),
|
royalty_rate: HashMap::new(),
|
||||||
|
next_order_id: 1,
|
||||||
};
|
};
|
||||||
rval.register_trader("*HOUSE*");
|
rval.register_trader("*HOUSE*");
|
||||||
rval
|
rval
|
||||||
@@ -397,6 +400,7 @@ impl Market {
|
|||||||
let ap=(buy_type,sell_type);
|
let ap=(buy_type,sell_type);
|
||||||
let mut royalty_acc=FiNum::zero();
|
let mut royalty_acc=FiNum::zero();
|
||||||
let mut commission_acc=FiNum::zero();
|
let mut commission_acc=FiNum::zero();
|
||||||
|
let new_order_id:usize;
|
||||||
while buy_qty>FiNum::new(0) && self.orders.contains_key(&ap) && self.orders.get(&ap).unwrap().v.len()>0 {
|
while buy_qty>FiNum::new(0) && self.orders.contains_key(&ap) && self.orders.get(&ap).unwrap().v.len()>0 {
|
||||||
let mut elt=(*(self.orders.get(&ap).unwrap().v[0].borrow())).clone();
|
let mut elt=(*(self.orders.get(&ap).unwrap().v[0].borrow())).clone();
|
||||||
if sell_qty/buy_qty_initial>=elt.buy_qty/elt.sell_qty { // Transact at ask_rate
|
if sell_qty/buy_qty_initial>=elt.buy_qty/elt.sell_qty { // Transact at ask_rate
|
||||||
@@ -447,19 +451,21 @@ impl Market {
|
|||||||
let rt=self.royalties.entry(buy_type).or_insert(RoyaltyTree::new());
|
let rt=self.royalties.entry(buy_type).or_insert(RoyaltyTree::new());
|
||||||
rt.add_weight(rt.next_entry,buy_qty); // Weight should really be the quantity you would be able to immediately transact rather than how much you wish for.
|
rt.add_weight(rt.next_entry,buy_qty); // Weight should really be the quantity you would be able to immediately transact rather than how much you wish for.
|
||||||
let neworder=Rc::new(RefCell::new(
|
let neworder=Rc::new(RefCell::new(
|
||||||
Order { owner:owner, sell_qty:sell_qty_remain, sell_remain:sell_qty_remain, buy_qty:buy_qty, rt_loc: rt.next_entry, royalty_remain:royalty1_qty, commission_remain:commission1_qty } ));
|
Order { owner:owner, sell_qty:sell_qty_remain, sell_remain:sell_qty_remain, buy_qty:buy_qty, rt_loc: rt.next_entry, royalty_remain:royalty1_qty, commission_remain:commission1_qty, id:self.next_order_id } ));
|
||||||
|
new_order_id=self.next_order_id;
|
||||||
|
self.next_order_id+=1;
|
||||||
rt.next_entry+=1;
|
rt.next_entry+=1;
|
||||||
bids.insert(neworder);
|
bids.insert(neworder);
|
||||||
self.traders[owner].sub_balance(sell_type,sell_qty_remain);
|
self.traders[owner].sub_balance(sell_type,sell_qty_remain);
|
||||||
self.traders[0].add_balance(sell_type,commission0_qty);
|
self.traders[0].add_balance(sell_type,commission0_qty);
|
||||||
log.push(format!("Moved {} {} ({}) to market",sell_qty_remain,self.number_to_name(sell_type),self.traders[owner].name));
|
log.push(format!("Moved {} {} ({}) to market",sell_qty_remain,self.number_to_name(sell_type),self.traders[owner].name));
|
||||||
}
|
} else { new_order_id=0; }
|
||||||
}
|
} else { new_order_id=0; }
|
||||||
self.traders[0].add_balance(sell_type,commission_acc);
|
self.traders[0].add_balance(sell_type,commission_acc);
|
||||||
self.traders[owner].sub_balance(sell_type,royalty_acc+commission_acc);
|
self.traders[owner].sub_balance(sell_type,royalty_acc+commission_acc);
|
||||||
log.push(format!("Paid {} {} in royalties and {} {} ({}) in commissions",royalty_acc ,self.number_to_name(sell_type),
|
log.push(format!("Paid {} {} in royalties and {} {} ({}) in commissions",royalty_acc ,self.number_to_name(sell_type),
|
||||||
commission_acc,self.number_to_name(sell_type),self.traders[owner].name));
|
commission_acc,self.number_to_name(sell_type),self.traders[owner].name));
|
||||||
Result::PlacedOrder(0,log)
|
Result::PlacedOrder(new_order_id,log)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user