#![allow(dead_code)]
//! The Phreak algorithm is a Rule matching algorithm, based upon the Rete algorithm, as described
//! in the paper "Production Matching for Large Learning Systems" by Robert B. Doorenbos,
//! January 31, 1995, CMU-CS-95-113
//!
//! The algorithm is used to match facts against a number of rules to see if any combination
//! triggers the rule. A rule is called a production, and when a combination of facts matches the
//! rule, it is called an activation.
//!
//! The phreak algorithm is implemented by the Drools project. We are not trying to create a java
//! to rust port, but instead we are building an algorithm from scratch with the ideas from the
//! Drools documentation.
//!
//! We aim to use only safe rust code.
//!
//! We are trying to obtain a good performance by focusing on the following concepts:
//!  - Lazy evaluation
//!
//!    The fastest code is code you don't execute.
//!
//!  - Cache friendly evaluation
//!
//!    By grouping data evaluation, we try to optimize cache usage for the CPU.
//!
//!  - Minimize data allocations
//!
//!    Allocations are slow, so they should be avoided. We use the rust ownership model to safely
//!    pass around data instead of passing on copies.
//!
pub use crate::core::Phreak;

pub mod traits;
pub mod multiset;
pub mod condition;
pub mod memory;
pub mod jointest;
pub mod segment;
pub mod actions;
pub mod betanode;
pub mod core;

mod token;
pub mod nodes;
