HPCToolkit
fmt.c File Reference
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <float.h>
#include <ctype.h>
#include <math.h>
#include "fmt.h"
Include dependency graph for fmt.c:

Go to the source code of this file.

Classes

struct  buf
 

Macros

#define T   Fmt_T
 
#define pad(n, c)
 
#define MAXEXP   308
 
#define MAXFRACT   39
 
#define DEFPREC   6
 
#define DEFLPREC   14
 
#define FPBUF_LEN   (MAXEXP+MAXFRACT+1)
 

Functions

static void cvt_s (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static void cvt_d (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static void cvt_u (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static void cvt_o (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static void cvt_x (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static void cvt_p (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static void cvt_c (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static void roundit_f (double num, char *start, char *end, bool *neg)
 
static int help_cvt_f (char *buf, size_t buflen, double num, int prec, bool *neg)
 
static void cvt_f (int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
static int fixed_len_insert (int c, void *cl)
 
void hpcrun_msg_puts (const char *str, int len, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 
void hpcrun_msg_fmt (int put(int c, void *), void *cl, const char *fmt,...)
 
int hpcrun_msg_ns (char *buf, size_t len, const char *fmt,...)
 
int hpcrun_msg_vns (char *buf, size_t len, const char *fmt, va_list_box *box)
 
void hpcrun_msg_vfmt (int put(int c, void *cl), void *cl, const char *fmt, va_list_box *box)
 
T hpcrun_msg_register (int code, T newcvt)
 
void hpcrun_msg_putd (const char *str, int len, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
 

Variables

static const char * Fmt_flags = "-+ 0"
 
static T cvt [256]
 

Macro Definition Documentation

◆ DEFLPREC

#define DEFLPREC   14

Definition at line 98 of file fmt.c.

◆ DEFPREC

#define DEFPREC   6

Definition at line 97 of file fmt.c.

◆ FPBUF_LEN

#define FPBUF_LEN   (MAXEXP+MAXFRACT+1)

Definition at line 101 of file fmt.c.

◆ MAXEXP

#define MAXEXP   308

Definition at line 87 of file fmt.c.

◆ MAXFRACT

#define MAXFRACT   39

Definition at line 92 of file fmt.c.

◆ pad

#define pad (   n,
 
)
Value:
do { int nn = (n); \
while (nn-- > 0) \
put((c), cl); } while (0)
<!-- ********************************************************************--> n<!-- HPCToolkit Experiment DTD --> n<!-- Version 2.1 --> n<!-- ********************************************************************--> n<!ELEMENT HPCToolkitExperiment(Header,(SecCallPathProfile|SecFlatProfile) *)> n<!ATTLIST HPCToolkitExperiment\n version CDATA #REQUIRED > n n<!-- ******************************************************************--> n n<!-- Info/NV:flexible name-value pairs:(n) ame;(t) ype;(v) alue --> n<!ELEMENT Info(NV *)> n<!ATTLIST Info\n n CDATA #IMPLIED > n<!ELEMENT NV EMPTY > n<!ATTLIST NV\n n CDATA #REQUIRED\n t CDATA #IMPLIED\n v CDATA #REQUIRED > n n<!-- ******************************************************************--> n<!-- Header --> n<!-- ******************************************************************--> n<!ELEMENT Header(Info *)> n<!ATTLIST Header\n n CDATA #REQUIRED > n n<!-- ******************************************************************--> n<!-- Section Header --> n<!-- ******************************************************************--> n<!ELEMENT SecHeader(MetricTable?, MetricDBTable?, TraceDBTable?, LoadModuleTable?, FileTable?, ProcedureTable?, Info *)> n n<!-- MetricTable:--> n<!ELEMENT MetricTable(Metric) * > n n<!-- Metric:(i) d;(n) ame --> n<!--(v) alue-type:transient type of values --> n<!--(t) ype:persistent type of metric --> n<!-- fmt:format;show;--> n<!ELEMENT Metric(MetricFormula *, Info?)> n<!ATTLIST Metric\n i CDATA #REQUIRED\n n CDATA #REQUIRED\n es CDATA #IMPLIED\n em CDATA #IMPLIED\n ep CDATA #IMPLIED\n v(raw|final|derived-incr|derived) \"raw\\ t (inclusive|exclusive|nil) \nil\\ partner CDATA #IMPLIED\ fmt CDATA #IMPLIED\ show (1|0) \1\\ show-percent (1|0) \1> n n<!-- MetricFormula represents derived metrics: (t)ype; (frm): formula --> n<!ELEMENT MetricFormula (Info?)> n<!ATTLIST MetricFormula\ t (combine|finalize) \finalize\\ i CDATA #IMPLIED\ frm CDATA #REQUIRED> n n<!-- Metric data, used in sections: (n)ame [from Metric]; (v)alue --> n<!ELEMENT M EMPTY> n<!ATTLIST M\ n CDATA #REQUIRED\ v CDATA #REQUIRED> n n<!-- MetricDBTable: --> n<!ELEMENT MetricDBTable (MetricDB)*> n n<!-- MetricDB: (i)d; (n)ame --> n<!-- (t)ype: persistent type of metric --> n<!-- db-glob: file glob describing files in metric db --> n<!-- db-id: id within metric db --> n<!-- db-num-metrics: number of metrics in db --> n<!-- db-header-sz: size (in bytes) of a db file header --> n<!ELEMENT MetricDB EMPTY> n<!ATTLIST MetricDB\ i CDATA #REQUIRED\ n CDATA #REQUIRED\ t (inclusive|exclusive|nil) \nil\\ partner CDATA #IMPLIED\ db-glob CDATA #IMPLIED\ db-id CDATA #IMPLIED\ db-num-metrics CDATA #IMPLIED\ db-header-sz CDATA #IMPLIED> n n<!-- TraceDBTable: --> n<!ELEMENT TraceDBTable (TraceDB)> n n<!-- TraceDB: (i)d --> n<!-- db-min-time: min beginning time stamp (global) --> n<!-- db-max-time: max ending time stamp (global) --> n<!ELEMENT TraceDB EMPTY> n<!ATTLIST TraceDB\ i CDATA #REQUIRED\ db-glob CDATA #IMPLIED\ db-min-time CDATA #IMPLIED\ db-max-time CDATA #IMPLIED\ db-header-sz CDATA #IMPLIED> n n<!-- LoadModuleTable assigns a short name to a load module --> n<!ELEMENT LoadModuleTable (LoadModule)*> n n<!ELEMENT LoadModule (Info?)> n<!ATTLIST LoadModule\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!-- FileTable assigns a short name to a file --> n<!ELEMENT FileTable (File)*> n n<!ELEMENT File (Info?)> n<!ATTLIST File\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!-- ProcedureTable assigns a short name to a procedure --> n<!ELEMENT ProcedureTable (Procedure)*> n n<!-- Info/NV: flexible name-value pairs: (n)ame; (t)ype; (v)alue --> n<!-- f: family of the procedure (fake, root, ...)--> n<!ELEMENT Procedure (Info?)> n<!ATTLIST Procedure\ i CDATA #REQUIRED\ n CDATA #REQUIRED\ f CDATA #IMPLIED> n n<!-- ****************************************************************** --> n<!-- Section: Call path profile --> n<!-- ****************************************************************** --> n<!ELEMENT SecCallPathProfile (SecHeader, SecCallPathProfileData)> n<!ATTLIST SecCallPathProfile\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!ELEMENT SecCallPathProfileData (PF|M)*> n<!-- Procedure frame --> n<!-- (i)d: unique identifier for cross referencing --> n<!-- (s)tatic scope id --> n<!-- (n)ame: a string or an id in ProcedureTable --> n<!-- (lm) load module: a string or an id in LoadModuleTable --> n<!-- (f)ile name: a string or an id in LoadModuleTable --> n<!-- (l)ine range: \beg-end\ (inclusive range) --> n<!-- (a)lien: whether frame is alien to enclosing P --> n<!-- (str)uct: hpcstruct node id --> n<!-- (t)ype: hpcrun node type: memory access, variable declaration, ... --> n<!-- (v)ma-range-set: \{[beg-end), [beg-end)...}\ --> n<!ELEMENT PF (PF|Pr|L|C|S|M)*> n<!ATTLIST PF\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ n CDATA #REQUIRED\ lm CDATA #IMPLIED\ f CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Procedure (static): GOAL: replace with 'P' --> n<!ELEMENT Pr (Pr|L|C|S|M)*> n<!ATTLIST Pr\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ n CDATA #REQUIRED\ lm CDATA #IMPLIED\ f CDATA #IMPLIED\ l CDATA #IMPLIED\ a (1|0) \0\\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Callsite (a special StatementRange) --> n<!ELEMENT C (PF|M)*> n<!ATTLIST C\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n n<!-- ****************************************************************** --> n<!-- Section: Flat profile --> n<!-- ****************************************************************** --> n<!ELEMENT SecFlatProfile (SecHeader, SecFlatProfileData)> n<!ATTLIST SecFlatProfile\ i CDATA #REQUIRED\ n CDATA #REQUIRED> n n<!ELEMENT SecFlatProfileData (LM|M)*> n<!-- Load module: (i)d; (n)ame; (v)ma-range-set --> n<!ELEMENT LM (F|P|M)*> n<!ATTLIST LM\ i CDATA #IMPLIED\ n CDATA #REQUIRED\ v CDATA #IMPLIED> n<!-- File --> n<!ELEMENT F (P|L|S|M)*> n<!ATTLIST F\ i CDATA #IMPLIED\ n CDATA #REQUIRED> n<!-- Procedure (Note 1) --> n<!ELEMENT P (P|A|L|S|C|M)*> n<!ATTLIST P\ i CDATA #IMPLIED\ n CDATA #REQUIRED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Alien (Note 1) --> n<!ELEMENT A (A|L|S|C|M)*> n<!ATTLIST A\ i CDATA #IMPLIED\ f CDATA #IMPLIED\ n CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Loop (Note 1,2) --> n<!ELEMENT L (A|Pr|L|S|C|M)*> n<!ATTLIST L\ i CDATA #IMPLIED\ s CDATA #IMPLIED\ l CDATA #IMPLIED\ f CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Statement (Note 2) --> n<!-- (it): trace record identifier --> n<!ELEMENT S (S|M)*> n<!ATTLIST S\ i CDATA #IMPLIED\ it CDATA #IMPLIED\ s CDATA #IMPLIED\ l CDATA #IMPLIED\ str CDATA #IMPLIED\ v CDATA #IMPLIED> n<!-- Note 1: Contained Cs may not contain PFs --> n<!-- Note 2: The 's' attribute is not used for flat profiles --> n

Definition at line 74 of file fmt.c.

◆ T

#define T   Fmt_T

Definition at line 72 of file fmt.c.

Function Documentation

◆ cvt_c()

static void cvt_c ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 255 of file fmt.c.

◆ cvt_d()

static void cvt_d ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 137 of file fmt.c.

Here is the call graph for this function:

◆ cvt_f()

static void cvt_f ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 363 of file fmt.c.

Here is the call graph for this function:

◆ cvt_o()

static void cvt_o ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 191 of file fmt.c.

Here is the call graph for this function:

◆ cvt_p()

static void cvt_p ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 237 of file fmt.c.

Here is the call graph for this function:

◆ cvt_s()

static void cvt_s ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 125 of file fmt.c.

Here is the call graph for this function:

◆ cvt_u()

static void cvt_u ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 169 of file fmt.c.

Here is the call graph for this function:

◆ cvt_x()

static void cvt_x ( int  code,
va_list_box box,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)
static

Definition at line 214 of file fmt.c.

Here is the call graph for this function:

◆ fixed_len_insert()

static int fixed_len_insert ( int  c,
void *  cl 
)
static

Definition at line 392 of file fmt.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ help_cvt_f()

static int help_cvt_f ( char *  buf,
size_t  buflen,
double  num,
int  prec,
bool *  neg 
)
static

Definition at line 318 of file fmt.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hpcrun_msg_fmt()

void hpcrun_msg_fmt ( int   putint c, void *,
void *  cl,
const char *  fmt,
  ... 
)

Definition at line 456 of file fmt.c.

Here is the call graph for this function:

◆ hpcrun_msg_ns()

int hpcrun_msg_ns ( char *  buf,
size_t  len,
const char *  fmt,
  ... 
)

Definition at line 466 of file fmt.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hpcrun_msg_putd()

void hpcrun_msg_putd ( const char *  str,
int  len,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)

Definition at line 554 of file fmt.c.

Here is the caller graph for this function:

◆ hpcrun_msg_puts()

void hpcrun_msg_puts ( const char *  str,
int  len,
int   putint c, void *cl,
void *  cl,
unsigned char  flags[],
int  width,
int  precision 
)

Definition at line 430 of file fmt.c.

Here is the caller graph for this function:

◆ hpcrun_msg_register()

T hpcrun_msg_register ( int  code,
T  newcvt 
)

Definition at line 544 of file fmt.c.

◆ hpcrun_msg_vfmt()

void hpcrun_msg_vfmt ( int   putint c, void *cl,
void *  cl,
const char *  fmt,
va_list_box box 
)

Definition at line 491 of file fmt.c.

Here is the caller graph for this function:

◆ hpcrun_msg_vns()

int hpcrun_msg_vns ( char *  buf,
size_t  len,
const char *  fmt,
va_list_box box 
)

Definition at line 477 of file fmt.c.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ roundit_f()

static void roundit_f ( double  num,
char *  start,
char *  end,
bool *  neg 
)
static

Definition at line 277 of file fmt.c.

Here is the caller graph for this function:

Variable Documentation

◆ cvt

T cvt[256]
static
Initial value:
= {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, cvt_c, cvt_d, cvt_f, cvt_f, cvt_f,
0, 0, 0, 0, 0, 0, 0, cvt_o,
cvt_p, 0, 0, cvt_s, 0, cvt_u, 0, 0,
cvt_x, 0, 0, 0, 0, 0, 0, 0
}
static void cvt_f(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:363
static void cvt_x(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:214
static void cvt_p(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:237
static void cvt_u(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:169
static void cvt_o(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:191
static void cvt_s(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:125
static void cvt_c(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:255
static void cvt_d(int code, va_list_box *box, int put(int c, void *cl), void *cl, unsigned char flags[], int width, int precision)
Definition: fmt.c:137

Definition at line 406 of file fmt.c.

◆ Fmt_flags

const char* Fmt_flags = "-+ 0"
static

Definition at line 118 of file fmt.c.