Rev 84221 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/** R : A Computer Language for Statistical Data Analysis* Copyright (C) 1998-2023 The R Core Team** This header file is free software; you can redistribute it and/or modify* it under the terms of the GNU Lesser General Public License as published by* the Free Software Foundation; either version 2.1 of the License, or* (at your option) any later version.** This file is part of R. R is distributed under the terms of the* GNU General Public License, either Version 2, June 1991 or Version 3,* June 2007. See doc/COPYRIGHTS for details of the copyright status of R.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public License* along with this program; if not, a copy is available at* https://www.R-project.org/Licenses/*//* Included by R.h: API */#ifndef R_COMPLEX_H#define R_COMPLEX_H#ifdef __cplusplusextern "C" {#endif# ifdef R_LEGACY_RCOMPLEX/* This definition does not work with optimizing compilers which takeadvantage of strict aliasing rules. It is not safe to use with FortranCOMPLEX*16 (PR#18430) or in arguments to library calls expecting C99_Complex double. This definition should not be used, but if it were stillnecessary, one should at least disable LTO.*/typedef struct {double r;double i;} Rcomplex;# else/* This definition uses an anonymous structure, which is defined in C11 (butnot C99). It is, however, supported at least by GCC, clang and icc. Theprivate_data_c member should never be used in code, but tells the compilerabout type punning when accessing the .r and .i elements, so is safer to usewhen interfacing with Fortran COMPLEX*16 or directly C99 _Complex double(PR#18430).This form of static initialization works with both definitions:Rcomplex z = { .r = 1, .i = 2 };Anonymous structures and C99 _Complex have not been incorporated into C++standard. While they are usually supported as compiler extensions, warningsare typically issued (-pedantic) by a C++ compiler.*/#ifdef __cplusplus// Look for clang first as it defines __GNUC__ and reacts to #pragma GCC# if defined(__clang__)# pragma clang diagnostic push# pragma clang diagnostic ignored "-Wgnu-anonymous-struct"# pragma clang diagnostic ignored "-Wc99-extensions"# elif defined(__GNUC__)# pragma GCC diagnostic push# pragma GCC diagnostic ignored "-Wpedantic"# endif#endiftypedef union {struct {double r;double i;};double _Complex private_data_c;} Rcomplex;#ifdef __cplusplus# if defined(__clang__)# pragma clang diagnostic pop# elif defined(__GNUC__)# pragma GCC diagnostic pop# endif#endif# endif#ifdef __cplusplus}#endif#endif /* R_COMPLEX_H */