95 if (finalLayerDist == finalLayerSize) {
100 minKey = data[succ].key;
106 otherKey = data[succ + 1].key;
107 if (otherKey < minKey) { minKey = otherKey; delta = 1; }
108 otherKey = data[succ + 2].key;
109 if (otherKey < minKey) { minKey = otherKey; delta = 2; }
110 otherKey = data[succ + 3].key;
111 if (otherKey < minKey) { minKey = otherKey; delta = 3; }
116 data[hole].key = minKey;
117 data[hole].value = data[succ].value;
121 succ = succ - layerPos + layerSize;
128 Key bubble = data[sz].key;
132 int layerDist = layerSize - layerPos - 1;
133 int pred = hole + layerDist - layerSize;
136 pred = pred - layerDist;
137 while (data[pred].key > bubble) {
138 data[hole] = data[pred];
140 pred = hole + layerDist - layerSize;
143 pred = pred - layerDist;
147 data[hole].key = bubble;
148 data[hole].value = data[sz].value;
150 data[sz].key = getSupremum();
159 Debug4(cout <<
"insert(" << k <<
", " << v <<
")" << endl);
161 int layerSize = finalLayerSize;
162 int layerDist = finalLayerDist;
164 if (finalLayerDist == -1) {
166 finalLayerSize <<= 2;
167 finalLayerDist = finalLayerSize - 1;
171 int pred = hole + layerDist - layerSize;
174 pred = pred - layerDist;
175 Key predKey = data[pred].key;
176 while (predKey > k) {
177 data[hole].key = predKey;
178 data[hole].value = data[pred].value;
180 pred = hole + layerDist - layerSize;
183 pred = pred - layerDist;
184 predKey = data[pred].key;
189 data[hole].value = v;