File tree Expand file tree Collapse file tree 1 file changed +45
-0
lines changed
quickfixj-core/src/main/java/quickfix Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change 1+ package quickfix ;
2+
3+ import java .util .LinkedHashMap ;
4+ import java .util .List ;
5+ import java .util .Map ;
6+ import java .util .stream .Collectors ;
7+
8+ /**
9+ * A bounded-size version of InMemoryMessageQueue.
10+ * @see InMemoryMessageQueue
11+ */
12+ public class BoundInMemoryMessageQueue implements MessageQueue {
13+ // The map should be accessed from a single thread
14+ private final Map <Integer , Message > backingMap = new LinkedHashMap <>();
15+ private final int maxSize ;
16+
17+ public BoundInMemoryMessageQueue (int maxSize ) {
18+ this .maxSize = maxSize ;
19+ }
20+
21+ public void enqueue (int sequence , Message message ) {
22+ if (backingMap .size () >= maxSize ) {
23+ List <Integer > keys = backingMap .keySet ().stream ().sorted ().collect (Collectors .toList ());
24+ if (sequence < keys .get (0 )) {
25+ backingMap .remove (keys .get (keys .size ()-1 ));
26+ backingMap .put (sequence , message );
27+ }
28+ } else {
29+ this .backingMap .put (sequence , message );
30+ }
31+ }
32+
33+ public Message dequeue (int sequence ) {
34+ return (Message ) this .backingMap .remove (sequence );
35+ }
36+
37+ public void clear () {
38+ this .backingMap .clear ();
39+ }
40+
41+ Map <Integer , Message > getBackingMap () {
42+ return this .backingMap ;
43+ }
44+ }
45+
You can’t perform that action at this time.
0 commit comments