knitr::opts_chunk$set( collapse = FALSE, comment = "#>" ) library(cairocore)
enums in C are a datastructure defining a mapping from human-readable variable
names to integer values. For example, the
cairo_format_t enum in the Cairo library defines the valid colour formats
that it knows how to deal with.
Instead of having to remember that 2 stands for CAIRO_FORMAT_A8 when writing C code,
the programmer would just use CAIRO_FORMAT_A8 and the compiler would automatically
replace this with 2 everywhere it appears.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// The definition of 'cairo_format_t' in the C header 'cairo.h'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
typedef enum _cairo_format {
CAIRO_FORMAT_INVALID = -1,
CAIRO_FORMAT_ARGB32 = 0,
CAIRO_FORMAT_RGB24 = 1,
CAIRO_FORMAT_A8 = 2,
CAIRO_FORMAT_A1 = 3,
CAIRO_FORMAT_RGB16_565 = 4,
CAIRO_FORMAT_RGB30 = 5,
CAIRO_FORMAT_RGB96F = 6,
CAIRO_FORMAT_RGBA128F = 7
} cairo_format_t;
R doesn't have the concept of an enum, so in cairocore they are implemented
as named lists of integers.
Each enum has documentation accessible via the standard help mechanism e.g. ?cairo_format_t
cairo_format_t
So to access an enum value by its name, you would write:
cairo_format_t$CAIRO_FORMAT_A8
To look-up an enum name by its value there is a helper function enum_lookup() -
enum_lookup(cairo_format_t, 2)
One downside of implementing enums like this in R is that there is little in the way of checking of values.
In C, if you tried to use CAIRO_FORMAT_A_DOES_NOT_EXIST then the compiler would
throw an error.
In R, using cairo_format_t$CAIRO_FORMAT_A_DOES_NOT_EXIST will return a NULL,
which would then mean a likely error somewhere later in the program.
To avoid the use of undefined enums, a new datatype/class could be defined which was stricter about raising an error if a supplied enum name didn't exist.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.