packages feed

abstract-deque-0.2.2: abstract-deque.cabal

Name:                abstract-deque
Version:             0.2.2
License:             BSD3
License-file:        LICENSE
Author:              Ryan R. Newton
Maintainer:          rrnewton@gmail.com
Category:            Data 
Build-type:          Simple
Cabal-version:       >= 1.8

Homepage: https://github.com/rrnewton/haskell-lockfree-queue/wiki

-- Version History:
-- 0.1: 
-- 0.1.1: Added nullQ to interface. [First release]
-- 0.1.2: dependency on IORefCAS
-- 0.1.3: Actually turned on real CAS! DANGER
-- 0.1.4: Another release.
-- 0.1.5: Fix for 6.12 and 7.0.
-- 0.1.6: Make useCAS default FALSE.
-- 0.1.7: Add leftThreadSafe / rightThreadSafe
-- 0.2:   [breaking] Refactor names of exposed Tests
-- 0.2.2: Add Debugger

Synopsis: Abstract, parameterized interface to mutable Deques.

Description:

  An abstract interface to highly-parameterizable queues/deques.
  . 
  Background: There exists a feature space for queues that extends between:
  .
    * simple, single-ended, non-concurrent, bounded queues 
  .
    * double-ended, threadsafe, growable queues
  .
  ... with important points inbetween (such as
  the queues used for work-stealing).
  .
  This package includes an interface for Deques that allows the
  programmer to use a single API for all of the above, while using the
  type-system to select an efficient implementation given the
  requirements (using type families).
  .
  This package also includes a simple reference implementation based
  on 'IORef' and "Data.Sequence".


-- Making this default False because abstract-deque should be VERY depndency-safe.
-- The reference implementation can be factored out in the future.
Flag useCAS
  Description: Enable the reference implementation to use hardware compare-and-swap.
  Default:     False

Library
  exposed-modules:   Data.Concurrent.Deque.Class,
                     Data.Concurrent.Deque.Tests,
                     Data.Concurrent.Deque.Reference,
                     Data.Concurrent.Deque.Reference.DequeInstance,
                     Data.Concurrent.Deque.Debugger
  build-depends:     base >= 4 && < 5, array, random,
                     containers, 
                     HUnit, test-framework >= 0.6, test-framework-hunit >= 0.2.7
  if flag(useCAS) && impl( ghc >= 7.4 ) && !os(mingw32) {
    build-depends:   IORefCAS >= 0.2 
    cpp-options:  -DUSE_CAS -DDEFAULT_SIGNATURES
--    extensions: DefaultSignatures
--    GHC-Options: -XDefaultSignatures
  }

  extensions: CPP
  ghc-options: -O2

Source-Repository head
    Type:         git
    Location:     git://github.com/rrnewton/haskell-lockfree-queue.git

Test-Suite test-abstract-deque
    type:       exitcode-stdio-1.0
    main-is:    Test.hs
    build-depends:  base >= 4 && < 5, containers, HUnit, array, random,
                    HUnit, test-framework >= 0.6, test-framework-hunit >= 0.2.7
    ghc-options: -O2 -threaded -rtsopts

    -- ghc-options: -keep-tmp-files -dsuppress-module-prefixes -ddump-to-file -ddump-core-stats -ddump-simpl-stats -dcore-lint -dcmm-lint
    -- ghc-options: -ddump-ds -ddump-simpl -ddump-stg -ddump-asm -ddump-bcos -ddump-cmm -ddump-opt-cmm -ddump-inlinings


    -- Disabling this for now due to a limitation of cabal-install-0.10.2:
    -- Examining generated code:
    -- If 
    --------------------------------------------------------------------------------
    -- if flag(useCAS) && impl( ghc >= 7.4 ) && !os(mingw32) {
    --   ghc-options:  -with-rtsopts=-K32M
    --   build-depends:   IORefCAS >= 0.2 
    --   cpp-options:  -DUSE_CAS -DDEFAULT_SIGNATURES
    -- }
    -- if impl( ghc < 7 )
    --   buildable: False