Provided by: critcl_3.1.18.1+dfsg-3_amd64 bug

NAME

       critcl::bitmap - CriTcl Utilities: Bitset en- and decoding

SYNOPSIS

       package require Tcl  8.4

       package require critcl  ?3.1.11?

       package require critcl::bitmap  ?1.0.1?

       ::critcl::bitmap::def name definition ?exclusions?

_________________________________________________________________________________________________

DESCRIPTION

       C  Runtime In Tcl, or CriTcl , is a system for compiling C code embedded in Tcl on the fly
       and either loading the resulting objects into Tcl for immediate use or packaging them  for
       distribution.  Use CriTcl to improve performance by rewriting in C those routines that are
       performance bottlenecks.

       This document is the reference  manpage  for  the  critcl::bitmap  package.  This  package
       provides  convenience commands for advanced functionality built on top of both critcl core
       and package critcl::iassoc.

       C level libraries often use bit-sets to  encode  many  flags  into  a  single  value.  Tcl
       bindings  to  such  libraries now have the task of converting a Tcl representation of such
       flags (like a list of strings) into such bit-sets, and back.  Note here that  the  C-level
       information  has  to  be something which already exists. The package does not create these
       values. This is in contrast to the package critcl::enum which creates an enumeration based
       on the specified symbolic names.

       This package was written to make the declaration and management of such bit-sets and their
       associated conversions functions easy, hiding all attendant complexity from the user.

       Its intended audience are mainly developers wishing to write Tcl packages with embedded  C
       code.

       This package resides in the Core Package Layer of CriTcl.

       +----------------+
       |Applications    |
       | critcl         |
       | critcl::app    |
       +----------------+

       *================*
       |Core Packages   |
       | critcl         |
       | critcl::util   |
       *================*

       +----------------+
       |Support Packages|
       | stubs::*       |
       | md5, platform  |
       |  ...           |
       +----------------+

API

       ::critcl::bitmap::def name definition ?exclusions?
              This  command  defines two C functions for the conversion of the named bit-set into
              Tcl lists, and  vice  versa.   The  underlying  mapping  tables  are  automatically
              initialized on first access, and finalized on interpreter destruction.

              The definition dictionary provides the mapping from the Tcl-level symbolic names of
              the flags to their C expressions (often the name of the macro specifying the actual
              value).   Note  here that the C-level information has to be something which already
              exists. The package does not create these  values.  This  is  in  contrast  to  the
              package  critcl::enum  which creates an enumeration based on the specified symbolic
              names.

              The optional exlusion list is for the flags/bit-sets for which conversion from bit-
              set  to  flag,  i.e.  decoding  makes no sense. One case for such, for example, are
              flags representing a combination of other flags.

              The package generates multiple things (declarations  and  definitions)  with  names
              derived from name, which has to be a proper C identifier.

              name_encode
                     The function for encoding a Tcl list of strings into the equivalent bit-set.
                     Its signature is

                     int name_encode (Tcl_Interp* interp, Tcl_Obj* flags, int* result);

              The return value of the function is a Tcl error code, i.e. TCL_OK, TCL_ERROR, etc.

              name_decode
                     The function for decoding a bit-set into the equivalent Tcl list of strings.
                     Its signature is

                     Tcl_Obj* name_decode (Tcl_Interp* interp, int flags);

              name.h A  header file containing the declarations for the two conversion functions,
                     for use by other parts of the system, if necessary.

                     The generated file is stored in a place where it will not interfere with the
                     overall  system  outside  of  the  package,  yet  also be available for easy
                     inclusion by package files (csources).

              name   The name of a critcl argument type encapsulating the  encoder  function  for
                     use by critcl::cproc.

              name   The  name of a critcl result type encapsulating the decoder function for use
                     by critcl::cproc.

EXAMPLE

       The example shown below is the specification of the event flags pulled from the draft work
       on a Tcl binding to Linux's inotify APIs.

              package require Tcl 8.5
              package require critcl 3.1.11

              critcl::buildrequirement {
                  package require critcl::bitmap
              }

              critcl::bitmap::def tcl_inotify_events {
                  accessed       IN_ACCESS
                  all            IN_ALL_EVENTS
                  attribute      IN_ATTRIB
                  closed         IN_CLOSE
                  closed-nowrite IN_CLOSE_NOWRITE
                  closed-write   IN_CLOSE_WRITE
                  created        IN_CREATE
                  deleted        IN_DELETE
                  deleted-self   IN_DELETE_SELF
                  dir-only       IN_ONLYDIR
                  dont-follow    IN_DONT_FOLLOW
                  modified       IN_MODIFY
                  move           IN_MOVE
                  moved-from     IN_MOVED_FROM
                  moved-self     IN_MOVE_SELF
                  moved-to       IN_MOVED_TO
                  oneshot        IN_ONESHOT
                  open           IN_OPEN
                  overflow       IN_Q_OVERFLOW
                  unmount        IN_UNMOUNT
              } {
                  all closed move oneshot
              }

              # Declarations:          tcl_inotify_events.h
              # Encoder:      int      tcl_inotify_events_encode (Tcl_Interp* interp, Tcl_Obj* flags, int* result);
              # Decoder:      Tcl_Obj* tcl_inotify_events_decode (Tcl_Interp* interp, int flags);
              # crit arg-type          tcl_inotify_events
              # crit res-type          tcl_inotify_events

AUTHORS

       Andreas Kupries

BUGS, IDEAS, FEEDBACK

       This  document,  and  the  package  it  describes, will undoubtedly contain bugs and other
       problems.  Please report such at https://github.com/andreas-kupries/critcl.   Please  also
       report any ideas for enhancements you may have for either package and/or documentation.

KEYWORDS

       C  code, Embedded C Code, Tcl Interp Association, bitmask, bitset, code generator, compile
       & run, compiler, dynamic code generation, dynamic compilation,  flags,  generate  package,
       linker, on demand compilation, on-the-fly compilation, singleton

CATEGORY

       Glueing/Embedded C code

COPYRIGHT

       Copyright (c) 2011-2018 Andreas Kupries