• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

evolvedbinary / elemental / 982

29 Apr 2025 08:34PM UTC coverage: 56.409% (+0.007%) from 56.402%
982

push

circleci

adamretter
[feature] Improve README.md badges

28451 of 55847 branches covered (50.94%)

Branch coverage included in aggregate %.

77468 of 131924 relevant lines covered (58.72%)

0.59 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/exist-core/src/main/java/org/exist/util/RingBuffer.java
1
/*
2
 * Elemental
3
 * Copyright (C) 2024, Evolved Binary Ltd
4
 *
5
 * admin@evolvedbinary.com
6
 * https://www.evolvedbinary.com | https://www.elemental.xyz
7
 *
8
 * Use of this software is governed by the Business Source License 1.1
9
 * included in the LICENSE file and at www.mariadb.com/bsl11.
10
 *
11
 * Change Date: 2028-04-27
12
 *
13
 * On the date above, in accordance with the Business Source License, use
14
 * of this software will be governed by the Apache License, Version 2.0.
15
 *
16
 * Additional Use Grant: Production use of the Licensed Work for a permitted
17
 * purpose. A Permitted Purpose is any purpose other than a Competing Use.
18
 * A Competing Use means making the Software available to others in a commercial
19
 * product or service that: substitutes for the Software; substitutes for any
20
 * other product or service we offer using the Software that exists as of the
21
 * date we make the Software available; or offers the same or substantially
22
 * similar functionality as the Software.
23
 */
24
package org.exist.util;
25

26
import net.jcip.annotations.NotThreadSafe;
27

28
import javax.annotation.Nullable;
29
import java.util.function.Supplier;
30

31
/**
32
 * Simple Ring Buffer implementation.
33
 *
34
 * @author Adam Retter adam.retter@googlemail.com
35
 */
36
@NotThreadSafe
37
public class RingBuffer<T> {
38
    private final int capacity;
39
    private final T[] elements;
40

41
    private int writePos;
42
    private int available;
43

44
    @SuppressWarnings("unchecked")
45
    public RingBuffer(final int capacity, final Supplier<T> constructor) {
×
46
        this.capacity = capacity;
×
47
        this.elements = (T[])new Object[capacity];
×
48
        for (int i = 0; i < capacity; i++) {
×
49
            elements[i] = constructor.get();
×
50
        }
51

52
        this.available = capacity;
×
53
        this.writePos = capacity;
×
54
    }
×
55

56
    public @Nullable T takeEntry() {
57
        if(available == 0){
×
58
            return null;
×
59
        }
60
        int nextSlot = writePos - available;
×
61
        if(nextSlot < 0){
×
62
            nextSlot += capacity;
×
63
        }
64
        final T nextObj = elements[nextSlot];
×
65
        available--;
×
66
        return nextObj;
×
67
    }
68

69
    public void returnEntry(final T element) {
70
        if(available < capacity){
×
71
            if(writePos >= capacity){
×
72
                writePos = 0;
×
73
            }
74
            elements[writePos] = element;
×
75
            writePos++;
×
76
            available++;
×
77
        }
78
    }
×
79
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc