1919import java .util .Arrays ;
2020import java .util .Collection ;
2121import java .util .Comparator ;
22- import java .util .EnumSet ;
2322import java .util .Objects ;
24- import java .util .Set ;
2523
2624/**
2725 * Staged builder for building a {@link Dbi}
@@ -224,35 +222,28 @@ public DbiBuilderStage3<T> withIteratorComparator(final Comparator<T> comparator
224222 public static class DbiBuilderStage3 <T > {
225223
226224 private final DbiBuilderStage2 <T > dbiBuilderStage2 ;
227- private Set <DbiFlags > dbiFlags = null ;
225+ private final FlagSet . Builder <DbiFlags , DbiFlagSet > flagSetBuilder = DbiFlagSet . builder () ;
228226 private Txn <T > txn = null ;
229227
230228 private DbiBuilderStage3 (DbiBuilderStage2 <T > dbiBuilderStage2 ) {
231229 this .dbiBuilderStage2 = dbiBuilderStage2 ;
232230 }
233231
234- private void initDbiFlags () {
235- if (dbiFlags == null ) {
236- dbiFlags = EnumSet .noneOf (DbiFlags .class );
237- }
238- }
239-
240232 /**
241233 * <p>
242234 * Apply all the dbi flags supplied in dbiFlags.
243235 * </p>
244236 * <p>
245237 * Replaces any flags applies in previous calls to
246238 * {@link DbiBuilderStage3#withDbiFlags(Collection)}, {@link DbiBuilderStage3#withDbiFlags(DbiFlags...)}
247- * or {@link DbiBuilderStage3#addDbiFlag (DbiFlags)}.
239+ * or {@link DbiBuilderStage3#setDbiFlag (DbiFlags)}.
248240 * </p>
249241 *
250242 * @param dbiFlags to open the database with.
251243 */
252244 public DbiBuilderStage3 <T > withDbiFlags (final Collection <DbiFlags > dbiFlags ) {
253- initDbiFlags ();
254245 if (dbiFlags != null ) {
255- this . dbiFlags .stream ()
246+ dbiFlags .stream ()
256247 .filter (Objects ::nonNull )
257248 .forEach (dbiFlags ::add );
258249 }
@@ -265,36 +256,35 @@ public DbiBuilderStage3<T> withDbiFlags(final Collection<DbiFlags> dbiFlags) {
265256 * </p>
266257 * <p>
267258 * Replaces any flags applies in previous calls to
268- * {@link DbiBuilderStage3#withDbiFlags(Collection)}, {@link DbiBuilderStage3#withDbiFlags(DbiFlags...)}
269- * or {@link DbiBuilderStage3#addDbiFlag(DbiFlags)}.
259+ * {@link DbiBuilderStage3#withDbiFlags(Collection)},
260+ * {@link DbiBuilderStage3#withDbiFlags(DbiFlags...)}
261+ * or {@link DbiBuilderStage3#setDbiFlag(DbiFlags)}.
270262 * </p>
271263 *
272264 * @param dbiFlags to open the database with.
273265 * A null array is a no-op. Null items are ignored.
274266 */
275267 public DbiBuilderStage3 <T > withDbiFlags (final DbiFlags ... dbiFlags ) {
276- initDbiFlags ();
268+ flagSetBuilder . clear ();
277269 if (dbiFlags != null ) {
278270 Arrays .stream (dbiFlags )
279271 .filter (Objects ::nonNull )
280- .forEach (this .dbiFlags :: add );
272+ .forEach (this .flagSetBuilder :: setFlag );
281273 }
282274 return this ;
283275 }
284276
285277 /**
286278 * Adds dbiFlag to those flags already added to this builder by
287- * {@link DbiBuilderStage3#withDbiFlags(DbiFlags...)}, {@link DbiBuilderStage3#withDbiFlags(Collection)}
288- * or {@link DbiBuilderStage3#addDbiFlag(DbiFlags)}.
279+ * {@link DbiBuilderStage3#withDbiFlags(DbiFlags...)},
280+ * {@link DbiBuilderStage3#withDbiFlags(Collection)}
281+ * or {@link DbiBuilderStage3#setDbiFlag(DbiFlags)}.
289282 *
290283 * @param dbiFlag to open the database with. A null value is a no-op.
291284 * @return this builder instance.
292285 */
293- public DbiBuilderStage3 <T > addDbiFlag (final DbiFlags dbiFlag ) {
294- initDbiFlags ();
295- if (dbiFlags != null ) {
296- this .dbiFlags .add (dbiFlag );
297- }
286+ public DbiBuilderStage3 <T > setDbiFlag (final DbiFlags dbiFlag ) {
287+ this .flagSetBuilder .setFlag (dbiFlag );
298288 return this ;
299289 }
300290
@@ -341,9 +331,7 @@ private Txn<T> getTxn(final DbiBuilder<T> dbiBuilder) {
341331
342332 private Dbi <T > open (final Txn <T > txn ,
343333 final DbiBuilder <T > dbiBuilder ) {
344- final DbiFlags [] dbiFlagsArr = dbiFlags != null && !dbiFlags .isEmpty ()
345- ? this .dbiFlags .toArray (new DbiFlags [0 ])
346- : null ;
334+ final DbiFlagSet dbiFlagSet = flagSetBuilder .build ();
347335
348336 return new Dbi <>(
349337 dbiBuilder .env ,
@@ -352,7 +340,7 @@ private Dbi<T> open(final Txn<T> txn,
352340 dbiBuilderStage2 .comparator ,
353341 dbiBuilderStage2 .useNativeCallback ,
354342 dbiBuilder .proxy ,
355- dbiFlagsArr );
343+ dbiFlagSet );
356344 }
357345 }
358346}
0 commit comments