@@ -22,38 +22,42 @@ public void updateOrderBookOnNewOrder(boolean isBuyOrder, Double price, Double o
2222 if (isBuyOrder ){
2323 BuyOrderBookUnit buyOrderBookUnit = buyOrderBookUnitMap .get (price );
2424 if (buyOrderBookUnit == null ){
25- buyOrderBookUnit = new BuyOrderBookUnit (price , orderSize );
26- buyOrderBookUnitMap .put (price , buyOrderBookUnit );
27- buyOrderBookUnitListSet .add (buyOrderBookUnit );
25+ addBuyOrderBookUnit (price , orderSize );
2826 } else {
2927 buyOrderBookUnit .addOrder (orderSize );
3028 }
3129 } else {
3230 SellOrderBookUnit sellOrderBookUnit = sellOrderBookUnitMap .get (price );
3331 if (sellOrderBookUnit == null ){
34- sellOrderBookUnit = new SellOrderBookUnit (price , orderSize );
35- sellOrderBookUnitMap .put (price , sellOrderBookUnit );
36- sellOrderBookUnitListSet .add (sellOrderBookUnit );
32+ addSellOrderBookUnit (price , orderSize );
3733 } else {
3834 sellOrderBookUnit .addOrder (orderSize );
3935 }
4036 }
4137 }
4238
4339 public void updateOrderBookOnTradeExecuted (boolean isBuyOrder , Double price , Double orderSize ) {
44- if (isBuyOrder ){
40+ if (approxEquals (orderSize , 0.0 ) || approxEquals (price , 0.0 )){
41+ throw new IllegalArgumentException ("orderSize or price cannot be 0.0" );
42+ }
43+
44+ if (isBuyOrder ) {
4545 BuyOrderBookUnit buyOrderBookUnit = buyOrderBookUnitMap .get (price );
46+ if (buyOrderBookUnit == null ) {
47+ return ;
48+ }
4649 buyOrderBookUnit .executeTrade (orderSize );
4750 if (approxEquals (buyOrderBookUnit .getSize (), 0.0 )){
48- buyOrderBookUnitMap .remove (price );
49- buyOrderBookUnitListSet .remove (buyOrderBookUnit );
51+ removeBuyOrderBookUnit (buyOrderBookUnit , price );
5052 }
5153 } else {
5254 SellOrderBookUnit sellOrderBookUnit = sellOrderBookUnitMap .get (price );
55+ if (sellOrderBookUnit == null ) {
56+ return ;
57+ }
5358 sellOrderBookUnit .executeTrade (orderSize );
5459 if (approxEquals (sellOrderBookUnit .getSize (), 0.0 )){
55- sellOrderBookUnitMap .remove (price );
56- sellOrderBookUnitListSet .remove (sellOrderBookUnit );
60+ removeSellOrderBookUnit (sellOrderBookUnit , price );
5761 }
5862 }
5963 }
@@ -71,4 +75,40 @@ public List<OrderBookUnit> getSellOrderBookList(int size){
7175 .limit (size )
7276 .collect (Collectors .toList ());
7377 }
78+
79+ protected synchronized void addBuyOrderBookUnit (Double price , Double size ) {
80+ BuyOrderBookUnit buyOrderBookUnit = buyOrderBookUnitMap .get (price );
81+ if (buyOrderBookUnit != null ){
82+ return ;
83+ }
84+
85+ buyOrderBookUnit = new BuyOrderBookUnit (price , size );
86+ buyOrderBookUnitMap .put (price , buyOrderBookUnit );
87+ buyOrderBookUnitListSet .add (buyOrderBookUnit );
88+ }
89+
90+ protected synchronized void addSellOrderBookUnit (Double price , Double size ) {
91+ SellOrderBookUnit sellOrderBookUnit = sellOrderBookUnitMap .get (price );
92+ if (sellOrderBookUnit != null ){
93+ return ;
94+ }
95+
96+ sellOrderBookUnit = new SellOrderBookUnit (price , size );
97+ sellOrderBookUnitMap .put (price , sellOrderBookUnit );
98+ sellOrderBookUnitListSet .add (sellOrderBookUnit );
99+ }
100+
101+ protected synchronized void removeBuyOrderBookUnit (BuyOrderBookUnit buyOrderBookUnit , Double price ) {
102+ if (approxEquals (buyOrderBookUnit .getSize (), 0.0 )) {
103+ buyOrderBookUnitMap .remove (price );
104+ buyOrderBookUnitListSet .remove (buyOrderBookUnit );
105+ }
106+ }
107+
108+ protected synchronized void removeSellOrderBookUnit (SellOrderBookUnit sellOrderBookUnit , Double price ) {
109+ if (approxEquals (sellOrderBookUnit .getSize (), 0.0 )) {
110+ sellOrderBookUnitMap .remove (price );
111+ sellOrderBookUnitListSet .remove (sellOrderBookUnit );
112+ }
113+ }
74114}
0 commit comments