Packages

A simple Erlang/Elixir NIF wrapper for the NetCDF C library

Current section

Files

Jump to
netcdf_nif src netcdf_nif.erl
Raw

src/netcdf_nif.erl

-module(netcdf_nif).
-on_load(init/0).
-export([nc_type/1]).
-export([nc_create/1]).
-export([nc_close/1]).
-export([nc_def_dim/3]).
-export([nc_def_var/5]).
-export([nc_put_att_text/4]).
-export([nc_put_att_double/4]).
-export([nc_enddef/1]).
-export([nc_put_var_double_single/3]).
-export([nc_put_var_double/3]).
-define(APPNAME, netcdf_nif).
-define(LIBNAME, netcdf_nif).
%% Types
%% Types for variables
%% https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_8h.html#afe40bef4fdf46f2820e9cd64c64a11b5
nc_type(nat) -> 0;
nc_type(byte) -> 1;
nc_type(char) -> 2;
nc_type(short) -> 3;
nc_type(int) -> 4;
nc_type(long) -> nc_type(int);
nc_type(float) -> 5;
nc_type(double) -> 6;
nc_type(ubyte) -> 7;
nc_type(ushort) -> 8;
nc_type(uint) -> 9;
nc_type(int64) -> 10;
nc_type(uint64) -> 11;
nc_type(string) -> 12.
%%====================================================================
%% API functions
%%====================================================================
nc_create(_) -> nif_not_loaded.
nc_close(_) -> nif_not_loaded.
nc_def_dim(_, _, _) -> nif_not_loaded.
nc_def_var(_, _, _, _, _) -> nif_not_loaded.
nc_put_att_text(_, _, _, _) -> nif_not_loaded.
nc_put_att_double(_, _, _, _) -> nif_not_loaded.
nc_enddef(_) -> nif_not_loaded.
nc_put_var_double_single(_, _, _) -> nif_not_loaded.
nc_put_var_double(_, _, _) -> nif_not_loaded.
%%====================================================================
%% Internal functions
%%====================================================================
init() ->
SoName = case code:priv_dir(?APPNAME) of
{error, bad_name} ->
case filelib:is_dir(filename:join(["..", priv])) of
true -> filename:join(["..", priv, ?LIBNAME]);
_ -> filename:join([priv, ?LIBNAME])
end;
Dir -> filename:join(Dir, ?LIBNAME)
end,
erlang:load_nif(SoName, 0).