rsspice 0.1.0

Pure Rust port of the SPICE Toolkit for space geometry
Documentation
//
// GENERATED FILE
//

use super::*;
use crate::SpiceContext;
use f2rust_std::*;

struct SaveVars {
    VALUE: f64,
}

impl SaveInit for SaveVars {
    fn new() -> Self {
        let mut VALUE: f64 = 0.0;

        VALUE = 0.0;

        Self { VALUE }
    }
}

/// Value of pi
///
/// Return the value of pi (the ratio of the circumference of
/// a circle to its diameter).
///
/// # Brief I/O
///
/// ```text
///  The function returns the value of pi.
/// ```
///
/// # Detailed Output
///
/// ```text
///  The function returns the value of pi (the ratio of a circle's
///  circumference to its diameter), determined by the ACOS function.
///  That is,
///
///        PI = ACOS ( -1.D0 )
/// ```
///
/// # Exceptions
///
/// ```text
///  Error free.
/// ```
///
/// # Particulars
///
/// ```text
///  The first time the function is referenced, the value is computed
///  as shown above. The value is saved, and returned directly upon
///  subsequent reference.
/// ```
///
/// # Examples
///
/// ```text
///  The code fragment below illustrates the use of PI.
///
///     C
///     C     Compute the polar radius,
///     C
///     C                 p
///     C          ----------------
///     C          1 + e cos(theta)
///     C
///     C     at evenly spaced values of the polar angle, theta.
///     C
///           DELTA = PI() / N
///
///           DO I = 0, N
///              R(I) = P / (1.D0 + ECC * COS(I*DELTA))
///           END DO
/// ```
///
/// # Author and Institution
///
/// ```text
///  J. Diaz del Rio    (ODC Space)
///  W.L. Taber         (JPL)
///  I.M. Underwood     (JPL)
/// ```
///
/// # Version
///
/// ```text
/// -    SPICELIB Version 1.0.2, 08-JUL-2020 (JDR)
///
///         Edited the header to comply with NAIF standard.
///
/// -    SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)
///
///         Comment section for permuted index source lines was added
///         following the header.
///
/// -    SPICELIB Version 1.0.0, 31-JAN-1990 (WLT) (IMU)
/// ```
pub fn pi(ctx: &mut SpiceContext) -> f64 {
    let ret = PI(ctx.raw_context());
    ret
}

//$Procedure PI ( Value of pi )
pub fn PI(ctx: &mut Context) -> f64 {
    let save = ctx.get_vars::<SaveVars>();
    let save = &mut *save.borrow_mut();

    let mut PI: f64 = 0.0;

    //
    // Local variables
    //

    //
    // Initial values
    //

    //
    // What is there to say?
    //
    if (save.VALUE == 0.0) {
        save.VALUE = f64::acos(-1.0);
    }

    PI = save.VALUE;

    PI
}