Name:          psqueues
Version:       0.2.4.0
License:       BSD3
License-file:  LICENSE
Maintainer:    Jasper Van der Jeugt <jaspervdj@gmail.com>
Bug-reports:   https://github.com/jaspervdj/psqueues/issues
Synopsis:      Pure priority search queues
Category:      Data Structures
Build-type:    Simple
Cabal-version: >=1.8

Description:
    The psqueues package provides
    <http://en.wikipedia.org/wiki/Priority_queue Priority Search Queues> in
    three different flavors.
    .
    * @OrdPSQ k p v@, which uses the @Ord k@ instance to provide fast insertion,
    deletion and lookup. This implementation is based on Ralf Hinze's
    <http://citeseer.ist.psu.edu/hinze01simple.html A Simple Implementation Technique for Priority Search Queues>.
    Hence, it is similar to the
    <http://hackage.haskell.org/package/PSQueue PSQueue> library, although it is
    considerably faster and provides a slightly different API.
    .
    * @IntPSQ p v@ is a far more efficient implementation. It fixes the key type
    to @Int@ and uses a <http://en.wikipedia.org/wiki/Radix_tree radix tree>
    (like @IntMap@) with an additional min-heap property.
    .
    * @HashPSQ k p v@ is a fairly straightforward extension of @IntPSQ@: it
    simply uses the keys' hashes as indices in the @IntPSQ@. If there are any
    hash collisions, it uses an @OrdPSQ@ to resolve those. The performance of
    this implementation is comparable to that of @IntPSQ@, but it is more widely
    applicable since the keys are not restricted to @Int@, but rather to any
    @Hashable@ datatype.
    .
    Each of the three implementations provides the same API, so they can be used
    interchangeably. The benchmarks show how they perform relative to one
    another, and also compared to the other Priority Search Queue
    implementations on Hackage:
    <http://hackage.haskell.org/package/PSQueue PSQueue>
    and
    <http://hackage.haskell.org/package/fingertree-psqueue fingertree-psqueue>.
    .
    <<http://i.imgur.com/KmbDKR6.png>>
    .
    <<http://i.imgur.com/ClT181D.png>>
    .
    Typical applications of Priority Search Queues include:
    .
    * Caches, and more specifically LRU Caches;
    .
    * Schedulers;
    .
    * Pathfinding algorithms, such as Dijkstra's and A*.

Extra-source-files:
    CHANGELOG

Source-repository head
    type:     git
    location: http://github.com/jaspervdj/psqueues.git

Library
    Ghc-options:    -O2 -Wall
    Hs-source-dirs: src

    Build-depends:
          base     >= 4.2     && < 5
        , deepseq  >= 1.2     && < 1.5
        , hashable >= 1.1.2.3 && < 1.3

    if impl(ghc>=6.10)
        Build-depends: ghc-prim

    Exposed-modules:
        Data.HashPSQ
        Data.IntPSQ
        Data.OrdPSQ
    Other-modules:
        Data.BitUtil
        Data.HashPSQ.Internal
        Data.IntPSQ.Internal
        Data.OrdPSQ.Internal

Benchmark psqueues-benchmarks
    Type:           exitcode-stdio-1.0
    Hs-source-dirs: src benchmarks
    Main-is:        Main.hs
    Ghc-options:    -Wall

    Other-modules:
        BenchmarkTypes
        Data.BitUtil
        Data.FingerTree.PSQueue.Benchmark
        Data.HashPSQ
        Data.HashPSQ.Benchmark
        Data.HashPSQ.Internal
        Data.IntPSQ
        Data.IntPSQ.Benchmark
        Data.IntPSQ.Internal
        Data.OrdPSQ
        Data.OrdPSQ.Benchmark
        Data.OrdPSQ.Internal
        Data.PSQueue.Benchmark

    Build-depends:
          containers           >= 0.5
        , unordered-containers >= 0.2.4
        , criterion            >= 0.8
        , mtl                  >= 2.1
        , fingertree-psqueue   >= 0.3
        , PSQueue              >= 1.1
        , random               >= 1.0

        , base
        , deepseq
        , ghc-prim
        , hashable
        , psqueues

Test-suite psqueues-tests
    Cpp-options:    -DTESTING -DSTRICT
    Ghc-options:    -Wall
    Hs-source-dirs: src tests
    Main-is:        Main.hs
    Type:           exitcode-stdio-1.0

    Other-modules:
        Data.BitUtil
        Data.HashPSQ
        Data.HashPSQ.Internal
        Data.HashPSQ.Tests
        Data.IntPSQ
        Data.IntPSQ.Internal
        Data.IntPSQ.Tests
        Data.OrdPSQ
        Data.OrdPSQ.Internal
        Data.OrdPSQ.Tests
        Data.PSQ.Class
        Data.PSQ.Class.Gen
        Data.PSQ.Class.Tests
        Data.PSQ.Class.Util

    Build-depends:
          HUnit                      >= 1.2 && < 1.7
        , QuickCheck                 >= 2.7 && < 2.11
        , test-framework             >= 0.8 && < 0.9
        , test-framework-hunit       >= 0.3 && < 0.4
        , test-framework-quickcheck2 >= 0.3 && < 0.4

        , base
        , array
        , deepseq
        , ghc-prim
        , hashable
        , psqueues
        , tagged