OpenMAMA
MamdaOrderBook.h
Go to the documentation of this file.
1 /* $Id$
2  *
3  * OpenMAMA: The open middleware agnostic messaging API
4  * Copyright (C) 2011 NYSE Technologies, Inc.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301 USA
20  */
21 
22 #ifndef MamdaOrderBookH
23 #define MamdaOrderBookH
24 
30 #include <mama/mamacpp.h>
31 #include <mama/MamaSourceDerivative.h>
32 #include <iosfwd>
33 
34 using std::ostream;
35 
36 namespace Wombat
37 {
38 
39  class MamdaOrderBookBasicDelta;
40  class MamdaOrderBookBasicDeltaList;
41 
47  class MAMDAOPTExpDLL MamdaOrderBook
48  {
49  public:
50  MamdaOrderBook ();
51  ~MamdaOrderBook ();
52 
53  // Copying and assignment
55  MamdaOrderBook& operator= (const MamdaOrderBook&);
56 
62  void clear (bool deleteLevels = true);
63 
69  void setSymbol (const char* symbol);
70 
76  const char* getSymbol () const;
77 
82  void setPartId (const char* partId);
83 
88  const char* getPartId () const;
89 
94  bool hasPartId () const;
95 
110  MamdaOrderBookPriceLevel* findOrCreateLevel (
111  double price,
113 
114  MamdaOrderBookPriceLevel* findOrCreateLevel (
115  MamaPrice& price,
117 
118  MamdaOrderBookPriceLevel* findOrCreateLevel (
119  double price,
122 
123  MamdaOrderBookPriceLevel* findOrCreateLevel (
124  MamaPrice& price,
127 
128  MamdaOrderBookPriceLevel* findLevel (
129  double price,
131 
132  MamdaOrderBookPriceLevel* findLevel (
133  MamaPrice& price,
135 
144  void addLevel (const MamdaOrderBookPriceLevel& level);
145 
154  void updateLevel (const MamdaOrderBookPriceLevel& level);
155 
164  void deleteLevel (const MamdaOrderBookPriceLevel& level);
165 
174  void apply (const MamdaOrderBook& deltaBook);
175 
184  void apply (const MamdaOrderBookBasicDelta& delta);
185 
194  void apply (const MamdaOrderBookBasicDeltaList& delta);
195 
204  void applyMarketOrder (const MamdaOrderBookBasicDelta& delta);
205 
214  void applyMarketOrder (const MamdaOrderBookBasicDeltaList& delta);
215 
224  void copy (const MamdaOrderBook& rhs);
225 
230  void setAsDeltaDeleted (const MamdaOrderBook& bookToDelete);
231 
236  void setAsDeltaDifference (const MamdaOrderBook& lhs,
237  const MamdaOrderBook& rhs);
238 
244  size_t getTotalNumLevels() const;
245 
251  size_t getNumBidLevels() const;
252 
258  size_t getNumAskLevels() const;
259 
265  MamdaOrderBookPriceLevel* getBidMarketOrders() const;
266 
272  MamdaOrderBookPriceLevel* getAskMarketOrders() const;
273 
281  MamdaOrderBookPriceLevel* getMarketOrdersSide (
283 
291  MamdaOrderBookPriceLevel* getOrCreateMarketOrdersSide (
293 
299  void detach (MamdaOrderBookPriceLevel* level);
300 
306  void detach (MamdaOrderBookEntry* entry);
307 
313  void cleanupDetached ();
314 
322  const MamaDateTime& getBookTime() const;
323 
329  void setBookTime(const MamaDateTime& bookTime) const;
330 
336  void setSourceDerivative (const MamaSourceDerivative* sourceDeriv);
337 
343  const MamaSourceDerivative* getSourceDerivative () const;
344 
350  const MamaSource* getSource () const;
351 
357  void setQuality (mamaQuality quality);
358 
364  mamaQuality getQuality () const;
365 
371  void setClosure (void* closure);
372 
378  void* getClosure () const;
379 
388  bool operator== (const MamdaOrderBook& rhs) const;
389 
398  bool operator!= (const MamdaOrderBook& rhs) const
399  { return ! operator== (rhs); }
400 
405  void addEntry (
406  MamdaOrderBookEntry* entry,
407  double price,
409  const MamaDateTime& eventTime,
410  MamdaOrderBookBasicDelta* delta);
411 
416  void addEntry (
417  MamdaOrderBookEntry* entry,
418  MamaPrice& price,
420  const MamaDateTime& eventTime,
421  MamdaOrderBookBasicDelta* delta);
422 
428  MamdaOrderBookEntry* addEntry (
429  const char* entryId,
430  mama_quantity_t entrySize,
431  double price,
433  const MamaDateTime& eventTime,
434  const MamaSourceDerivative* sourceDeriv,
435  MamdaOrderBookBasicDelta* delta);
436 
442  MamdaOrderBookEntry* addEntry (
443  const char* entryId,
444  mama_quantity_t entrySize,
445  MamaPrice& price,
447  const MamaDateTime& eventTime,
448  const MamaSourceDerivative* sourceDeriv,
449  MamdaOrderBookBasicDelta* delta);
450 
457  void updateEntry (
458  MamdaOrderBookEntry* entry,
459  mama_quantity_t size,
460  const MamaDateTime& eventTime,
461  MamdaOrderBookBasicDelta* delta);
462 
469  void deleteEntry (
470  MamdaOrderBookEntry* entry,
471  const MamaDateTime& eventTime,
472  MamdaOrderBookBasicDelta* delta);
473 
481  void addEntriesFromBook (
482  const MamdaOrderBook* book,
485 
495  void addPriceLevelsFromBookAsEntries (
496  const MamdaOrderBook* book,
497  const char* source,
499 
506  void deleteEntriesFromSource (
507  const MamaSource* source,
509 
517  bool reevaluate ();
518 
522  void setNeedsReevaluation (bool need);
523 
527  bool getNeedsReevaluation () const;
528 
533  void setCheckSourceState (bool check);
534 
539  bool getCheckSourceState () const;
540 
550  MamdaOrderBookPriceLevel* getLevelAtPrice (
551  double price,
552  MamdaOrderBookPriceLevel::Side side) const;
553 
563  MamdaOrderBookPriceLevel* getLevelAtPosition (
564  mama_u32_t pos,
565  MamdaOrderBookPriceLevel::Side side) const;
566 
574  MamdaOrderBookEntry* getEntryAtPosition (
575  mama_u32_t pos,
576  MamdaOrderBookPriceLevel::Side side) const;
577 
588  void assertEqual (const MamdaOrderBook& rhs) const;
589 
590 
591  // Iterators
592 
593  class MAMDAOPTExpDLL bidIterator
594  {
595  protected:
596  friend class MamdaOrderBook;
597  struct bidIteratorImpl;
598  bidIteratorImpl& mImpl;
599  public:
600  bidIterator ();
601  bidIterator (const bidIterator& copy);
602  bidIterator (const bidIteratorImpl& copy);
603  ~bidIterator ();
604  bidIterator& operator= (const bidIterator& rhs);
605  bidIterator& operator++ ();
606  const bidIterator& operator++ () const;
607  bidIterator& operator-- ();
608  const bidIterator& operator-- () const;
609  bool operator== (const bidIterator& rhs) const;
610  bool operator!= (const bidIterator& rhs) const;
611  MamdaOrderBookPriceLevel* operator* ();
612  const MamdaOrderBookPriceLevel* operator* () const;
613  };
614 
615  class MAMDAOPTExpDLL askIterator
616  {
617  protected:
618  friend class MamdaOrderBook;
619  struct askIteratorImpl;
620  askIteratorImpl& mImpl;
621  public:
622  askIterator ();
623  askIterator (const askIterator& copy);
624  askIterator (const askIteratorImpl& copy);
625  ~askIterator ();
626  askIterator& operator= (const askIterator& rhs);
627  askIterator& operator++ ();
628  const askIterator& operator++ () const;
629  askIterator& operator-- ();
630  const askIterator& operator-- () const;
631  bool operator== (const askIterator& rhs) const;
632  bool operator!= (const askIterator& rhs) const;
633  MamdaOrderBookPriceLevel* operator* ();
634  const MamdaOrderBookPriceLevel* operator* () const;
635  };
636 
637  class MAMDAOPTExpDLL bidEntryIterator
638  {
639  protected:
640  friend class MamdaOrderBook;
641  struct bidEntryIteratorImpl;
642  bidEntryIteratorImpl& mImpl;
643  public:
644  bidEntryIterator ();
645  bidEntryIterator (const bidEntryIterator& copy);
646  bidEntryIterator (const bidEntryIteratorImpl& copy);
647  ~bidEntryIterator ();
648  bidEntryIterator& operator= (const bidEntryIterator& rhs);
649  bidEntryIterator& operator++ ();
650  const bidEntryIterator& operator++ () const;
651  bool operator== (const bidEntryIterator& rhs) const;
652  bool operator!= (const bidEntryIterator& rhs) const;
653  MamdaOrderBookEntry* operator* ();
654  const MamdaOrderBookEntry* operator* () const;
655  };
656 
657  class MAMDAOPTExpDLL askEntryIterator
658  {
659  protected:
660  friend class MamdaOrderBook;
661  struct askEntryIteratorImpl;
662  askEntryIteratorImpl& mImpl;
663  public:
664  askEntryIterator ();
665  askEntryIterator (const askEntryIterator& copy);
666  askEntryIterator (const askEntryIteratorImpl& copy);
667  ~askEntryIterator ();
668  askEntryIterator& operator= (const askEntryIterator& rhs);
669  askEntryIterator& operator++ ();
670  const askEntryIterator& operator++ () const;
671  bool operator== (const askEntryIterator& rhs) const;
672  bool operator!= (const askEntryIterator& rhs) const;
673  MamdaOrderBookEntry* operator* ();
674  const MamdaOrderBookEntry* operator* () const;
675  };
676 
681 
682  bidIterator bidBegin();
683  constBidIterator bidBegin() const;
684  bidIterator bidEnd();
685  constBidIterator bidEnd() const;
686  askIterator askBegin();
687  constAskIterator askBegin() const;
688  askIterator askEnd();
689  constAskIterator askEnd() const;
690 
691  bidEntryIterator bidEntryBegin();
692  constBidEntryIterator bidEntryBegin() const;
693  bidEntryIterator bidEntryEnd();
694  constBidEntryIterator bidEntryEnd() const;
695  askEntryIterator askEntryBegin();
696  constAskEntryIterator askEntryBegin() const;
697  askEntryIterator askEntryEnd();
698  constAskEntryIterator askEntryEnd() const;
699 
708  void setIsConsistent (bool isConsistent);
709 
720  bool getIsConsistent () const;
721 
727  void dump (ostream& output) const;
728 
734  static void setStrictChecking (bool strict);
735 
741  void generateDeltaMsgs (bool generate);
742 
747  bool getGenerateDeltaMsgs();
748 
755  bool populateDelta (MamaMsg& msg);
756 
762  void populateRecap (MamaMsg& msg);
763 
774  void addDelta (MamdaOrderBookEntry* entry,
776  mama_quantity_t plDeltaSize,
778  MamdaOrderBookEntry::Action entAction);
779 
783  void clearDeltaList();
784 
789  void setBookContributors (const char* bookContributors);
790 
795  const char* getBookContributors () const;
796 
801  bool hasBookContributors () const;
802 
807  bool getBookContributorsModified () const;
808 
813  void setBookContributorsModified (bool modified);
814 
815  private:
816  struct MamdaOrderBookImpl;
817  MamdaOrderBookImpl& mImpl;
818  };
819 
820 } // namespace
821 
822 #endif // MamdaOrderBookH


© 2012 Linux Foundation