SpiceCel.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:20k
- /*
- -Header_File SpiceCel.h ( CSPICE Cell definitions )
- -Abstract
- Perform CSPICE definitions for the SpiceCell data type.
-
- -Disclaimer
- THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE
- CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S.
- GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE
- ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE
- PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS"
- TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY
- WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A
- PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC
- SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE
- SOFTWARE AND RELATED MATERIALS, HOWEVER USED.
- IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA
- BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT
- LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND,
- INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS,
- REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE
- REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY.
- RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF
- THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY
- CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE
- ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE.
- -Required_Reading
- CELLS
-
- -Particulars
- This header defines structures, macros, and enumerated types that
- may be referenced in application code that calls CSPICE cell
- functions.
-
- CSPICE cells are data structures that implement functionality
- parallel to that of the cell abstract data type in SPICELIB. In
- CSPICE, a cell is a C structure containing bookkeeping information,
- including a pointer to an associated data array.
-
- For numeric data types, the data array is simply a SPICELIB-style
- cell, including a valid control area. For character cells, the data
- array has the same number of elements as the corresponding
- SPICELIB-style cell, but the contents of the control area are not
- maintained, and the data elements are null-terminated C-style
- strings.
- CSPICE cells should be declared using the declaration macros
- provided in this header file. See the table of macros below.
-
- Structures
- ==========
-
- Name Description
- ---- ----------
-
- SpiceCell Structure containing CSPICE cell metadata.
-
- The members are:
- dtype: Data type of cell: character,
- integer, or double precision.
- dtype has type
- SpiceCellDataType.
- length: For character cells, the
- declared length of the
- cell's string array.
-
- size: The maximum number of data
- items that can be stored in
- the cell's data array.
- card: The cell's "cardinality": the
- number of data items currently
- present in the cell.
- isSet: Boolean flag indicating whether
- the cell is a CSPICE set.
- Sets have no duplicate data
- items, and their data items are
- stored in increasing order.
- adjust: Boolean flag indicating whether
- the cell's data area has
- adjustable size. Adjustable
- size cell data areas are not
- currently implemented.
- init: Boolean flag indicating whether
- the cell has been initialized.
- base: is a void pointer to the
- associated data array. base
- points to the start of the
- control area of this array.
- data: is a void pointer to the
- first data slot in the
- associated data array. This
- slot is the element following
- the control area.
-
- ConstSpiceCell A const SpiceCell.
-
-
- Declaration Macros
- ==================
- Name Description
- ---- ----------
- SPICECHAR_CELL ( name, size, length ) Declare a
- character CSPICE
- cell having cell
- name name,
- maximum cell
- cardinality size,
- and string length
- length. The
- macro declares
- both the cell and
- the associated
- data array. The
- name of the data
- array begins with
- "SPICE_".
-
-
- SPICEDOUBLE_CELL ( name, size ) Like SPICECHAR_CELL,
- but declares a
- double precision
- cell.
-
- SPICEINT_CELL ( name, size ) Like
- SPICECHAR_CELL,
- but declares an
- integer cell.
- Assignment Macros
- =================
- Name Description
- ---- ----------
- SPICE_CELL_SET_C( item, i, cell ) Assign the ith
- element of a
- character cell.
- Arguments cell
- and item are
- pointers.
-
- SPICE_CELL_SET_D( item, i, cell ) Assign the ith
- element of a
- double precision
- cell. Argument
- cell is a
- pointer.
-
- SPICE_CELL_SET_I( item, i, cell ) Assign the ith
- element of an
- integer cell.
- Argument cell is
- a pointer.
-
- Fetch Macros
- ==============
- Name Description
- ---- ----------
- SPICE_CELL_GET_C( cell, i, lenout, item ) Fetch the ith
- element from a
- character cell.
- Arguments cell
- and item are
- pointers.
- Argument lenout
- is the available
- space in item.
-
- SPICE_CELL_GET_D( cell, i, item ) Fetch the ith
- element from a
- double precision
- cell. Arguments
- cell and item are
- pointers.
- SPICE_CELL_GET_I( cell, i, item ) Fetch the ith
- element from an
- integer cell.
- Arguments cell
- and item are
- pointers.
- Element Pointer Macros
- ======================
- Name Description
- ---- ----------
- SPICE_CELL_ELEM_C( cell, i ) Macro evaluates
- to a SpiceChar
- pointer to the
- ith data element
- of a character
- cell. Argument
- cell is a
- pointer.
- SPICE_CELL_ELEM_D( cell, i ) Macro evaluates
- to a SpiceDouble
- pointer to the
- ith data element
- of a double
- precision cell.
- Argument cell is
- a pointer.
- SPICE_CELL_ELEM_I( cell, i ) Macro evaluates
- to a SpiceInt
- pointer to the
- ith data element
- of an integer
- cell. Argument
- cell is a
- pointer.
- -Literature_References
- None.
- -Author_and_Institution
- N.J. Bachman (JPL)
-
- -Restrictions
- None.
-
- -Version
- -CSPICE Version 1.0.0, 22-AUG-2002 (NJB)
- */
- #ifndef HAVE_SPICE_CELLS_H
- #define HAVE_SPICE_CELLS_H
-
- /*
- Data type codes:
- */
- typedef enum _SpiceDataType SpiceCellDataType;
- /*
- Cell structure:
- */
- struct _SpiceCell
-
- { SpiceCellDataType dtype;
- SpiceInt length;
- SpiceInt size;
- SpiceInt card;
- SpiceBoolean isSet;
- SpiceBoolean adjust;
- SpiceBoolean init;
- void * base;
- void * data; };
-
- typedef struct _SpiceCell SpiceCell;
- typedef const SpiceCell ConstSpiceCell;
- /*
- SpiceCell control area size:
- */
- #define SPICE_CELL_CTRLSZ 6
- /*
- Declaration macros:
- */
-
- #define SPICECHAR_CELL( name, size, length )
-
- static SpiceChar SPICE_CELL_##name[SPICE_CELL_CTRLSZ + size][length];
-
- static SpiceCell name =
-
- { SPICE_CHR,
- length,
- size,
- 0,
- SPICETRUE,
- SPICEFALSE,
- SPICEFALSE,
- (void *) &(SPICE_CELL_##name),
- (void *) &(SPICE_CELL_##name[SPICE_CELL_CTRLSZ]) }
-
- #define SPICEDOUBLE_CELL( name, size )
-
- static SpiceDouble SPICE_CELL_##name [SPICE_CELL_CTRLSZ + size];
-
- static SpiceCell name =
-
- { SPICE_DP,
- 0,
- size,
- 0,
- SPICETRUE,
- SPICEFALSE,
- SPICEFALSE,
- (void *) &(SPICE_CELL_##name),
- (void *) &(SPICE_CELL_##name[SPICE_CELL_CTRLSZ]) }
-
- #define SPICEINT_CELL( name, size )
-
- static SpiceInt SPICE_CELL_##name [SPICE_CELL_CTRLSZ + size];
-
- static SpiceCell name =
-
- { SPICE_INT,
- 0,
- size,
- 0,
- SPICETRUE,
- SPICEFALSE,
- SPICEFALSE,
- (void *) &(SPICE_CELL_##name),
- (void *) &(SPICE_CELL_##name[SPICE_CELL_CTRLSZ]) }
-
- /*
- Access macros for individual elements:
- */
- /*
- Data element pointer macros:
- */
- #define SPICE_CELL_ELEM_C( cell, i )
-
- ( ( (SpiceChar *) (cell)->data ) + (i)*( (cell)->length ) )
- #define SPICE_CELL_ELEM_D( cell, i )
-
- ( ( (SpiceDouble *) (cell)->data )[(i)] )
- #define SPICE_CELL_ELEM_I( cell, i )
-
- ( ( (SpiceInt *) (cell)->data )[(i)] )
- /*
- "Fetch" macros:
- */
- #define SPICE_CELL_GET_C( cell, i, lenout, item )
-
- {
- SpiceInt nBytes;
-
- nBytes = brckti_c ( (cell)->length, 0, (lenout-1) )
- * sizeof ( SpiceChar );
-
- memmove ( (item), SPICE_CELL_ELEM_C((cell), (i)), nBytes );
-
- item[nBytes] = NULLCHAR;
- }
- #define SPICE_CELL_GET_D( cell, i, item )
-
- ( (*item) = ( (SpiceDouble *) (cell)->data)[i] )
- #define SPICE_CELL_GET_I( cell, i, item )
-
- ( (*item) = ( (SpiceInt *) (cell)->data)[i] )
- /*
- Assignment macros:
- */
- #define SPICE_CELL_SET_C( item, i, cell )
-
- {
- SpiceChar * sPtr;
- SpiceInt nBytes;
-
- nBytes = brckti_c ( strlen(item), 0, (cell)->length - 1 )
- * sizeof ( SpiceChar );
-
- sPtr = SPICE_CELL_ELEM_C((cell), (i));
-
- memmove ( sPtr, (item), nBytes );
-
- sPtr[nBytes] = NULLCHAR;
- }
- #define SPICE_CELL_SET_D( item, i, cell )
-
- ( ( (SpiceDouble *) (cell)->data)[i] = (item) )
- #define SPICE_CELL_SET_I( item, i, cell )
-
- ( ( (SpiceInt *) (cell)->data)[i] = (item) )
- /*
- The enum SpiceTransDir is used to indicate language translation
- direction: C to Fortran or vice versa.
- */
- enum _SpiceTransDir { C2F = 0, F2C = 1 };
-
- typedef enum _SpiceTransDir SpiceTransDir;
- #endif