/***************************************************************************
 *  include/stxxl/bits/defines.h
 *
 *  Document all defines that may change the behavior of stxxl.
 *
 *  Part of the STXXL. See http://stxxl.sourceforge.net
 *
 *  Copyright (C) 2008-2010 Andreas Beckmann <beckmann@cs.uni-frankfurt.de>
 *
 *  Distributed under the Boost Software License, Version 1.0.
 *  (See accompanying file LICENSE_1_0.txt or copy at
 *  http://www.boost.org/LICENSE_1_0.txt)
 **************************************************************************/

#ifndef STXXL_DEFINES_HEADER
#define STXXL_DEFINES_HEADER

//#define STXXL_HAVE_MMAP_FILE 0/1
//#define STXXL_HAVE_SIMDISK_FILE 0/1
//#define STXXL_HAVE_BOOSTFD_FILE 0/1
//#define STXXL_HAVE_WINCALL_FILE 0/1
//#define STXXL_HAVE_WBTL_FILE 0/1
#define STXXL_HAVE_AIO_FILE 0  // only available on the kernelaio branch
// default: 0/1 (platform and type dependent)
// used in: io/*_file.h, io/*_file.cpp, mng/mng.cpp
// affects: library
// effect:  enables/disables some file implementations

//#define STXXL_CHECK_BLOCK_ALIGNING
// default: not defined
// used in: io/*_file.cpp
// effect:  call request::check_alignment() from request::request(...)

//#define STXXL_CHECK_FOR_PENDING_REQUESTS_ON_SUBMISSION 0/1
// default: 1
// used in: io/*_queue*.cpp
// affects: library
// effect:  check (and warn) for multiple concurrently pending I/O requests
//          for the same block, usually causing coherency problems on
//          out-of-order execution

//#define STXXL_DO_NOT_COUNT_WAIT_TIME
// default: not defined
// used in: io/iostats.{h,cpp}
// effect:  makes calls to wait time counting functions no-ops

//#define STXXL_WAIT_LOG_ENABLED
// default: not defined
// used in: common/log.cpp, io/iostats.cpp
// effect:  writes wait timing information to the file given via environment
//          variable STXXLWAITLOGFILE, does nothing if this is not defined

//#define STXXL_PRINT_TIMESTAMP_ALWAYS
// default: not defined
// used in: common/verbose.cpp
// affects: library
// effect:  prefix all MSG/ERRMSG/VERBOSE with elapsed time since program start

//#define STXXL_SORT_OPTIMAL_PREFETCHING 0/1
// default: 1
// used in: algo/*sort.h, stream/sort_stream.h
// effect if defined to 0: does not reorder prefetch requests to a disk
//          optimal schedule (Hutchinson, Sanders, Vitter: Duality between
//          prefetching and queued writing on parallel disks, 2005)

//#define STXXL_CHECK_ORDER_IN_SORTS 0/1
// default: 0
// used in: algo/*sort.h, stream/sort_stream.h, containers/priority_queue.h
// effect if set to 1: perform additional checking of sorted results

//#define STXXL_NO_WARN_RECURSIVE_SORT
// default: not defined
// used in: algo/sort_base.h
// affects: programs
// effect if defined: does not print error messages about possibly inefficient
//          recursive merging

//#define STXXL_HACK_SINGLE_IO_THREAD
// default: not defined
// used in: io/disk_queues.h
// affects: programs
// effect if defined: uses only a single I/O thread instead of one per disk
//          used e.g. by EcoSort which puts input file, output file and
//          scratch on a single disk (RAID0)

#endif // !STXXL_DEFINES_HEADER
