---
name: "gd_native_type"
section: "3"
platform: "linux"
package: "libgetdata-doc"
version: "0.11.0-15"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/gd_native_type"
---

# gd\_native\_type(3)

returns the native data type of a field in a Dirfile

## NAME

gd\_native\_type — returns the native data type of a field in a Dirfile

## SYNOPSIS

**#include \<getdata.h\>**

**gd\_type\_t gd\_native\_type(DIRFILE \****dirfile***, const char \****field\_code***);**

## DESCRIPTION

The **gd\_native\_type**() function queries a [dirfile(5)](/dirfile/5.md) database specified by *dirfile* and determines the native type of data specified by *field\_code*, which may contain a representation suffix.

The  *dirfile* argument must point to a valid DIRFILE object previously created by a call to [**gd\_open**(3)](/gd_open/3.md).

The native data type of a field of a given entry type is calculated as:\
  .PP **BIT**\
  .TP 8 **INDEX** **GD\_UINT64**;\
  .PP **CONST**\
  .TP 8 **CARRAY** the data type of the field;\
  .PP **DIVIDE**\
  .TP 8 **MULTIPLY** if either input field is complex valued: **GD\_COMPLEX128**, otherwise: **GD\_FLOAT64**;\
  .TP 8 **INDIR** the data type of the input **CARRAY**;\
  .PP **LINCOM**\
  .TP 8 **POLYNOM** if any of the scalar parameters is complex valued, or if the native data type of any of the input fields is complex valued: **GD\_COMPLEX128**, otherwise: **GD\_FLOAT64**;\
  .TP 8 **LINTERP** if the look-up table is complex valued: **GD\_COMPLEX128**, otherwise: **GD\_FLOAT64**;\
  .PP **MPLEX**\
  .TP 8 **WINDOW** the native data type of the data field;\
  .TP 8 **PHASE** the native data type of the input field;\
  .TP 8 **RAW** the data type of the raw data on disk;\
  .TP 8 **RECIP** if the dividend or the native data type of the input field is complex valued: **GD\_COMPLEX128**, otherwise: **GD\_FLOAT64**;\
  .PP **SARRAY**\
  .PP **SINDIR**\
  .TP 8 **STRING** **GD\_STRING**;\
  .TP 8 **SBIT** **GD\_INT64**.

Furthermore, if the supplied *field\_code* contains a representation suffix, and the native data type of the field is complex valued, the native type returned will be the corresponding real valued type.

## RETURN VALUE

Upon successful completion, **gd\_native\_type**() returns the native data type of the field code specified.  This will equal one of the symbols:

-

  **GD\_UINT8**, **GD\_INT8**, **GD\_UINT16**, **GD\_INT16**, **GD\_UINT32**, **GD\_INT32**, **GD\_FLOAT32**, **GD\_FLOAT64**, **GD\_COMPLEX64**, **GD\_COMPLEX128**, **GD\_STRING**.

The meanings of these symbols are explained in the [**gd\_getdata**(3)](/gd_getdata/3.md) manual page.

On error, this function returns **GD\_UNKNOWN** and stores a negative-valued error code in the **DIRFILE** object which may be retrieved by a subsequent call to [**gd\_error**(3)](/gd_error/3.md). Possible error codes are:\
  .TP 8 **GD\_E\_ALLOC** The library was unable to allocate memory.\
  .TP 8 **GD\_E\_BAD\_CODE** The field specified by *field\_code* or one of the fields it uses as input was not found in the database.\
  .TP 8 **GD\_E\_BAD\_DIRFILE** The supplied dirfile was invalid.\
  .TP 8 **GD\_E\_DIMENSION** A scalar field was found where a vector field was expected.\
  .TP 8 **GD\_E\_IO** An error occurred while trying to read a LINTERP table from disk.\
  .TP 8 **GD\_E\_LUT** A LINTERP table was malformed.\
  .TP 8 **GD\_E\_RECURSE\_LEVEL** Too many levels of recursion were encountered while trying to resolve *field\_code*. This usually indicates a circular dependency in field specification in the dirfile.

A descriptive error string for the error may be obtained by calling [**gd\_error\_string**(3)](/gd_error_string/3.md).

## HISTORY

The **get\_native\_type**() function appeared in GetData-0.6.0.  The return type for **STRING** fields was **GD\_NULL**.

In GetData-0.7.0, this function was renamed to **gd\_native\_type**().

Before GetData-0.10.0, the return type for **STRING** fields was **GD\_NULL**.

## SEE ALSO

[**gd\_error**(3)](/gd_error/3.md), [**gd\_error\_string**(3)](/gd_error_string/3.md) [**gd\_getdata**(3)](/gd_getdata/3.md), [**gd\_open**(3)](/gd_open/3.md), [dirfile(5)](/dirfile/5.md)
