1 /*
2  * Licensed under the Apache License, Version 2.0 (the "License");
3  * you may not use this file except in compliance with the License.
4  * You may obtain a copy of the License at
5  *
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  */

14 package io.netty.util.internal.shaded.org.jctools.queues;
15
16 import static io.netty.util.internal.shaded.org.jctools.queues.LinkedArrayQueueUtil.length;
17
18 /**
19  * An MPSC array queue which starts at <i>initialCapacity</i> and grows indefinitely in linked chunks of the initial size.
20  * The queue grows only when the current chunk is full and elements are not copied on
21  * resize, instead a link to the new chunk is stored in the old chunk for the consumer to follow.
22  */

23 public class MpscUnboundedArrayQueue<E> extends BaseMpscLinkedArrayQueue<E>
24 {
25     byte b000,b001,b002,b003,b004,b005,b006,b007;//  8b
26     byte b010,b011,b012,b013,b014,b015,b016,b017;// 16b
27     byte b020,b021,b022,b023,b024,b025,b026,b027;// 24b
28     byte b030,b031,b032,b033,b034,b035,b036,b037;// 32b
29     byte b040,b041,b042,b043,b044,b045,b046,b047;// 40b
30     byte b050,b051,b052,b053,b054,b055,b056,b057;// 48b
31     byte b060,b061,b062,b063,b064,b065,b066,b067;// 56b
32     byte b070,b071,b072,b073,b074,b075,b076,b077;// 64b
33     byte b100,b101,b102,b103,b104,b105,b106,b107;// 72b
34     byte b110,b111,b112,b113,b114,b115,b116,b117;// 80b
35     byte b120,b121,b122,b123,b124,b125,b126,b127;// 88b
36     byte b130,b131,b132,b133,b134,b135,b136,b137;// 96b
37     byte b140,b141,b142,b143,b144,b145,b146,b147;//104b
38     byte b150,b151,b152,b153,b154,b155,b156,b157;//112b
39     byte b160,b161,b162,b163,b164,b165,b166,b167;//120b
40     byte b170,b171,b172,b173,b174,b175,b176,b177;//128b
41
42     public MpscUnboundedArrayQueue(int chunkSize)
43     {
44         super(chunkSize);
45     }
46
47
48     @Override
49     protected long availableInQueue(long pIndex, long cIndex)
50     {
51         return Integer.MAX_VALUE;
52     }
53
54     @Override
55     public int capacity()
56     {
57         return MessagePassingQueue.UNBOUNDED_CAPACITY;
58     }
59
60     @Override
61     public int drain(Consumer<E> c)
62     {
63         return drain(c, 4096);
64     }
65
66     @Override
67     public int fill(Supplier<E> s)
68     {
69         return MessagePassingQueueUtil.fillUnbounded(this, s);
70     }
71
72     @Override
73     protected int getNextBufferSize(E[] buffer)
74     {
75         return length(buffer);
76     }
77
78     @Override
79     protected long getCurrentBufferCapacity(long mask)
80     {
81         return mask;
82     }
83 }
84