/*!

The Rust core library.

The Rust core library provides runtime features required by the language,
including the task scheduler and memory allocators, as well as library
support for Rust built-in types, platform abstractions, and other commonly
used features.

`core` includes modules corresponding to each of the integer types, each of
the floating point types, the `bool` type, tuples, characters, strings,
vectors (`vec`), shared boxes (`box`), and unsafe and borrowed pointers
(`ptr`).  Additionally, `core` provides task management and creation (`task`),
communication primitives (`comm` and `pipes`), an efficient vector builder
(`dvec`), platform abstractions (`os` and `path`), basic I/O abstractions
(`io`), common traits (`cmp`, `num`, `to_str`), and complete bindings
to the C standard library (`libc`).

`core` is linked to all crates by default and its contents imported.
Implicitly, all crates behave as if they included the following prologue:

    extern mod core;
    use core::*;

*/

#[link(name = "core",
       vers = "0.4",
       uuid = "c70c24a7-5551-4f73-8e37-380b11d80be8",
       url = "https://github.com/mozilla/rust/tree/master/src/libcore")];

#[comment = "The Rust core library"];
#[license = "MIT"];
#[crate_type = "lib"];

// Don't link to core. We are core.
#[no_core];

#[warn(deprecated_mode)];
#[warn(deprecated_pattern)];

#[warn(vecs_implicitly_copyable)];
#[deny(non_camel_case_types)];

// Built-in-type support modules

/// Operations and constants for `int`
#[path = "int-template"]
pub mod int {
    pub use inst::{ pow };
    #[path = "int.rs"]
    pub mod inst;
}

/// Operations and constants for `i8`
#[path = "int-template"]
pub mod i8 {
    #[path = "i8.rs"]
    pub mod inst;
}

/// Operations and constants for `i16`
#[path = "int-template"]
pub mod i16 {
    #[path = "i16.rs"]
    pub mod inst;
}

/// Operations and constants for `i32`
#[path = "int-template"]
pub mod i32 {
    #[path = "i32.rs"]
    pub mod inst;
}

/// Operations and constants for `i64`
#[path = "int-template"]
pub mod i64 {
    #[path = "i64.rs"]
    pub mod inst;
}

/// Operations and constants for `uint`
#[path = "uint-template"]
pub mod uint {
    pub use inst::{
        div_ceil, div_round, div_floor, iterate,
        next_power_of_two
    };
    #[path = "uint.rs"]
    pub mod inst;
}

/// Operations and constants for `u8`
#[path = "uint-template"]
pub mod u8 {
    pub use inst::is_ascii;
    #[path = "u8.rs"]
    pub mod inst;
}

/// Operations and constants for `u16`
#[path = "uint-template"]
pub mod u16 {
    #[path = "u16.rs"]
    pub mod inst;
}

/// Operations and constants for `u32`
#[path = "uint-template"]
pub mod u32 {
    #[path = "u32.rs"]
    pub mod inst;
}

/// Operations and constants for `u64`
#[path = "uint-template"]
pub mod u64 {
    #[path = "u64.rs"]
    pub mod inst;
}


pub mod box;
pub mod char;
pub mod float;
pub mod f32;
pub mod f64;
pub mod str;
pub mod ptr;
pub mod vec;
pub mod at_vec;
pub mod bool;
pub mod tuple;
pub mod unit;
pub mod uniq;

// Ubiquitous-utility-type modules

#[cfg(notest)]
pub mod ops;
pub mod cmp;
pub mod num;
pub mod hash;
pub mod either;
pub mod iter;
pub mod logging;
pub mod option;
#[path="iter-trait"]
pub mod option_iter {
    #[path = "option.rs"]
    pub mod inst;
}
pub mod result;
pub mod to_str;
pub mod to_bytes;
pub mod from_str;
pub mod util;

// Data structure modules

pub mod dvec;
#[path="iter-trait"]
pub mod dvec_iter {
    #[path = "dvec.rs"]
    pub mod inst;
}
pub mod dlist;
#[path="iter-trait"]
pub mod dlist_iter {
    #[path ="dlist.rs"]
    pub mod inst;
}
pub mod send_map;

// Concurrency
pub mod comm;
pub mod task {
    pub mod local_data;
    mod local_data_priv;
    pub mod spawn;
    pub mod rt;
}
pub mod future;
pub mod pipes;

// Runtime and language-primitive support

pub mod gc;
pub mod io;
pub mod libc;
pub mod os;
pub mod path;
pub mod rand;
pub mod run;
pub mod sys;
pub mod cast;
pub mod mutable;
pub mod flate;
pub mod repr;
pub mod cleanup;
pub mod reflect;

// Modules supporting compiler-generated code
// Exported but not part of the public interface

pub mod extfmt;
// The test harness links against core, so don't include runtime in tests.
#[cfg(notest)]
#[legacy_exports]
pub mod rt;

// Ideally not exported, but currently is.
pub mod private;

// For internal use, not exported.
mod unicode;
mod cmath;
mod stackwalk;

// Local Variables:
// mode: rust;
// fill-column: 78;
// indent-tabs-mode: nil
// c-basic-offset: 4
// buffer-file-coding-system: utf-8-unix
// End:
