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

公開メンバ関数

 EfficientMap (int initial_size)
 
long [] getKeys ()
 
void put (long l, MethodCall m)
 
MethodCall remove (long l)
 
boolean contains (long l)
 

非公開メンバ関数

void grow ()
 
void shrink ()
 
int find (long l)
 

非公開変数類

long [] kv
 
MethodCall [] vv
 
int start
 
int end
 
int init_size
 

詳解

Provides a long => MethodCall map which doesn't allocate objects on insertion/removal. Keys must be inserted in ascending order.

構築子と解体子

◆ EfficientMap()

org.freedesktop.dbus.EfficientMap.EfficientMap ( int  initial_size)
inline
24  {
25  init_size = initial_size;
26  shrink();
27  }
int init_size
Definition: EfficientMap.java:22
void shrink()
Definition: EfficientMap.java:65

関数詳解

◆ contains()

boolean org.freedesktop.dbus.EfficientMap.contains ( long  l)
inline
108  {
109  // check if find succeeds
110  return -1 != find(l);
111  }
int find(long l)
Definition: EfficientMap.java:114

◆ find()

int org.freedesktop.dbus.EfficientMap.find ( long  l)
inlineprivate
114  {
115  int i = start;
116  while (i != end && kv[i] != l)
117  if (i == (kv.length - 1)) i = 0;
118  else i++;
119  if (i == end) return -1;
120  return i;
121  }
long [] kv
Definition: EfficientMap.java:18
int start
Definition: EfficientMap.java:20
int end
Definition: EfficientMap.java:21

◆ getKeys()

long [] org.freedesktop.dbus.EfficientMap.getKeys ( )
inline
50  {
51  int size;
52  if (start < end) size = end - start;
53  else size = kv.length - (start - end);
54  long[] lv = new long[size];
55  int copya;
56  if (size > kv.length - start) copya = kv.length - start;
57  else copya = size;
58  System.arraycopy(kv, start, lv, 0, copya);
59  if (copya < size) {
60  System.arraycopy(kv, 0, lv, copya, size - copya);
61  }
62  return lv;
63  }
long [] kv
Definition: EfficientMap.java:18
int start
Definition: EfficientMap.java:20
int end
Definition: EfficientMap.java:21

◆ grow()

void org.freedesktop.dbus.EfficientMap.grow ( )
inlineprivate
29  {
30  // create new vectors twice as long
31  long[] oldkv = kv;
32  kv = new long[oldkv.length * 2];
33  MethodCall[] oldvv = vv;
34  vv = new MethodCall[oldvv.length * 2];
35 
36  // copy start->length to the start of the new vector
37  System.arraycopy(oldkv, start, kv, 0, oldkv.length - start);
38  System.arraycopy(oldvv, start, vv, 0, oldvv.length - start);
39  // copy 0->end to the next part of the new vector
40  if (end != (oldkv.length - 1)) {
41  System.arraycopy(oldkv, 0, kv, oldkv.length - start, end + 1);
42  System.arraycopy(oldvv, 0, vv, oldvv.length - start, end + 1);
43  }
44  // reposition pointers
45  start = 0;
46  end = oldkv.length;
47  }
long [] kv
Definition: EfficientMap.java:18
MethodCall [] vv
Definition: EfficientMap.java:19
int start
Definition: EfficientMap.java:20
int end
Definition: EfficientMap.java:21

◆ put()

void org.freedesktop.dbus.EfficientMap.put ( long  l,
MethodCall  m 
)
inline
74  {
75  // put this at the end
76  kv[end] = l;
77  vv[end] = m;
78  // move the end
79  if (end == (kv.length - 1)) end = 0;
80  else end++;
81  // if we are out of space, grow.
82  if (end == start) grow();
83  }
long [] kv
Definition: EfficientMap.java:18
void grow()
Definition: EfficientMap.java:29
MethodCall [] vv
Definition: EfficientMap.java:19
int start
Definition: EfficientMap.java:20
int end
Definition: EfficientMap.java:21

◆ remove()

MethodCall org.freedesktop.dbus.EfficientMap.remove ( long  l)
inline
85  {
86  // find the item
87  int pos = find(l);
88  // if we don't have it return null
89  if (-1 == pos) return null;
90  // get the value
91  MethodCall m = vv[pos];
92  // set it as unused
93  vv[pos] = null;
94  kv[pos] = -1;
95  // move the pointer to the first full element
96  while (-1 == kv[start]) {
97  if (start == (kv.length - 1)) start = 0;
98  else start++;
99  // if we have emptied the list, shrink it
100  if (start == end) {
101  shrink();
102  break;
103  }
104  }
105  return m;
106  }
long [] kv
Definition: EfficientMap.java:18
void shrink()
Definition: EfficientMap.java:65
MethodCall [] vv
Definition: EfficientMap.java:19
int start
Definition: EfficientMap.java:20
int find(long l)
Definition: EfficientMap.java:114
int end
Definition: EfficientMap.java:21

◆ shrink()

void org.freedesktop.dbus.EfficientMap.shrink ( )
inlineprivate
65  {
66  if (null != kv && kv.length == init_size) return;
67  // reset to original size
68  kv = new long[init_size];
69  vv = new MethodCall[init_size];
70  start = 0;
71  end = 0;
72  }
int init_size
Definition: EfficientMap.java:22
long [] kv
Definition: EfficientMap.java:18
MethodCall [] vv
Definition: EfficientMap.java:19
int start
Definition: EfficientMap.java:20
int end
Definition: EfficientMap.java:21

メンバ詳解

◆ end

int org.freedesktop.dbus.EfficientMap.end
private

◆ init_size

int org.freedesktop.dbus.EfficientMap.init_size
private

◆ kv

long [] org.freedesktop.dbus.EfficientMap.kv
private

◆ start

int org.freedesktop.dbus.EfficientMap.start
private

◆ vv

MethodCall [] org.freedesktop.dbus.EfficientMap.vv
private

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