README.md

# LimitedMapSet

**LimitedMapSet** is an extension of Elixir’s `MapSet` that keeps insertion order (FIFO)
and automatically evicts the oldest elements when the limit is reached.

## Examples

- Creating a limited set
```elixir
iex> s = LimitedMapSet.new(3)
#LimitedMapSet<limit: 3, size: 0>

iex> s = LimitedMapSet.put(s, :a)
iex> s = LimitedMapSet.put(s, :b)
iex> s = LimitedMapSet.put(s, :c)
iex> LimitedMapSet.to_list(s)
[:a, :b, :c]
```

- Automatic eviction when full
```elixir
iex> s = LimitedMapSet.put(s, :d)
iex> LimitedMapSet.to_list(s)
[:b, :c, :d]   # :a was evicted
```

- Membership and deletion
```elixir
iex> LimitedMapSet.member?(s, :b)
true

iex> s = LimitedMapSet.delete(s, :b)
iex> LimitedMapSet.member?(s, :b)
false
```

- Creating from a list
```elixir
iex> s = LimitedMapSet.new([1, 2, 3, 4], 3)
iex> LimitedMapSet.to_list(s)
[2, 3, 4]
```

- Checking size
```elixir
iex> LimitedMapSet.size(s)
3
```

- Using `Enum`
```elixir
iex> s = LimitedMapSet.new([:a, :b, :c], 3)
iex> Enum.member?(s, :b)
true
iex> Enum.to_list(s)
[:a, :b, :c]
```

# Add to your `mix.exs`:

```elixir
def deps do
  [
    {:limited_map_set, "~> 0.1.0"}
  ]
end
```