package com.sun.identity.shared.datastruct;

import jakarta.annotation.Nonnull;
import java.io.Serializable;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class OrderedSet<T> extends AbstractSet<T> implements Set<T>, Serializable {
   private final List<T> list = new ArrayList<>();

   @Override
   public boolean add(T o) {
      if (!this.list.contains(o)) {
         this.list.add(o);
         return true;
      } else {
         return false;
      }
   }

   @Nonnull
   @Override
   public Iterator<T> iterator() {
      return this.list.iterator();
   }

   @Override
   public int size() {
      return this.list.size();
   }

   public boolean addAll(Set<T> s) {
      if (s != null && !s.isEmpty()) {
         Iterator<T> it = s.iterator();
         boolean changed = false;

         while (it.hasNext()) {
            boolean c = this.add(it.next());
            if (c) {
               changed = true;
            }
         }

         return changed;
      } else {
         return false;
      }
   }

   public void removeAll(Integer[] array) {
      for (int i = array.length - 1; i >= 0; i--) {
         this.list.remove(array[i].intValue());
      }
   }

   public T get(int index) {
      return this.list.get(index);
   }

   public void set(int index, T value) {
      this.list.set(index, value);
   }
}
