keycloak-federation
公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.freedesktop.dbus.EfficientQueue クラス
org.freedesktop.dbus.EfficientQueue 連携図
Collaboration graph

公開メンバ関数

 EfficientQueue (int initial_size)
 
Message [] getKeys ()
 
void add (Message m)
 
Message remove ()
 
boolean isEmpty ()
 
int size ()
 

非公開メンバ関数

void grow ()
 
void shrink ()
 

非公開変数類

Message [] mv
 
int start
 
int end
 
int init_size
 

詳解

Provides a Message queue which doesn't allocate objects on insertion/removal.

構築子と解体子

◆ EfficientQueue()

org.freedesktop.dbus.EfficientQueue.EfficientQueue ( int  initial_size)
inline
25  {
26  init_size = initial_size;
27  shrink();
28  }
void shrink()
Definition: EfficientQueue.java:64
int init_size
Definition: EfficientQueue.java:23

関数詳解

◆ add()

void org.freedesktop.dbus.EfficientQueue.add ( Message  m)
inline
73  {
74  if (Debug.debug) Debug.print(Debug.DEBUG, "Enqueueing Message " + m);
75  // put this at the end
76  mv[end] = m;
77  // move the end
78  if (end == (mv.length - 1)) end = 0;
79  else end++;
80  // if we are out of space, grow.
81  if (end == start) grow();
82  }
Message [] mv
Definition: EfficientQueue.java:20
void grow()
Definition: EfficientQueue.java:30
int start
Definition: EfficientQueue.java:21
int end
Definition: EfficientQueue.java:22

◆ getKeys()

Message [] org.freedesktop.dbus.EfficientQueue.getKeys ( )
inline
48  {
49  if (start == end) return new Message[0];
50  Message[] lv;
51  if (start < end) {
52  int size = end - start;
53  lv = new Message[size];
54  System.arraycopy(mv, start, lv, 0, size);
55  } else {
56  int size = mv.length - start + end;
57  lv = new Message[size];
58  System.arraycopy(mv, start, lv, 0, mv.length - start);
59  System.arraycopy(mv, 0, lv, mv.length - start, end);
60  }
61  return lv;
62  }
Message [] mv
Definition: EfficientQueue.java:20
int start
Definition: EfficientQueue.java:21
int size()
Definition: EfficientQueue.java:103
int end
Definition: EfficientQueue.java:22

◆ grow()

void org.freedesktop.dbus.EfficientQueue.grow ( )
inlineprivate
30  {
31  if (Debug.debug) Debug.print(Debug.DEBUG, "Growing");
32  // create new vectors twice as long
33  Message[] oldmv = mv;
34  mv = new Message[oldmv.length * 2];
35 
36  // copy start->length to the start of the new vector
37  System.arraycopy(oldmv, start, mv, 0, oldmv.length - start);
38  // copy 0->end to the next part of the new vector
39  if (end != (oldmv.length - 1)) {
40  System.arraycopy(oldmv, 0, mv, oldmv.length - start, end + 1);
41  }
42  // reposition pointers
43  start = 0;
44  end = oldmv.length;
45  }
Message [] mv
Definition: EfficientQueue.java:20
int start
Definition: EfficientQueue.java:21
int end
Definition: EfficientQueue.java:22

◆ isEmpty()

boolean org.freedesktop.dbus.EfficientQueue.isEmpty ( )
inline
98  {
99  // check if find succeeds
100  return start == end;
101  }
int start
Definition: EfficientQueue.java:21
int end
Definition: EfficientQueue.java:22

◆ remove()

Message org.freedesktop.dbus.EfficientQueue.remove ( )
inline
84  {
85  if (start == end) return null;
86  // find the item
87  int pos = start;
88  // get the value
89  Message m = mv[pos];
90  // set it as unused
91  mv[pos] = null;
92  if (start == (mv.length - 1)) start = 0;
93  else start++;
94  if (Debug.debug) Debug.print(Debug.DEBUG, "Dequeueing " + m);
95  return m;
96  }
Message [] mv
Definition: EfficientQueue.java:20
int start
Definition: EfficientQueue.java:21
int end
Definition: EfficientQueue.java:22

◆ shrink()

void org.freedesktop.dbus.EfficientQueue.shrink ( )
inlineprivate
64  {
65  if (Debug.debug) Debug.print(Debug.DEBUG, "Shrinking");
66  if (null != mv && mv.length == init_size) return;
67  // reset to original size
68  mv = new Message[init_size];
69  start = 0;
70  end = 0;
71  }
Message [] mv
Definition: EfficientQueue.java:20
int start
Definition: EfficientQueue.java:21
int end
Definition: EfficientQueue.java:22
int init_size
Definition: EfficientQueue.java:23

◆ size()

int org.freedesktop.dbus.EfficientQueue.size ( )
inline
103  {
104  if (end >= start)
105  return end - start;
106  else
107  return mv.length - start + end;
108  }
Message [] mv
Definition: EfficientQueue.java:20
int start
Definition: EfficientQueue.java:21
int end
Definition: EfficientQueue.java:22

メンバ詳解

◆ end

int org.freedesktop.dbus.EfficientQueue.end
private

◆ init_size

int org.freedesktop.dbus.EfficientQueue.init_size
private

◆ mv

Message [] org.freedesktop.dbus.EfficientQueue.mv
private

◆ start

int org.freedesktop.dbus.EfficientQueue.start
private

このクラス詳解は次のファイルから抽出されました: