IDA C++ SDK 9.2
Loading...
Searching...
No Matches
lines.hpp
Go to the documentation of this file.
1/*
2 * Interactive disassembler (IDA).
3 * Copyright (c) 1990-2026 Hex-Rays
4 * ALL RIGHTS RESERVED.
5 *
6 */
7
8#ifndef _LINES_HPP
9#define _LINES_HPP
10
11#include <ida.hpp>
12
23
24struct range_t;
25
26//---------------------------------------------------------------------------
27// C O L O R D E F I N I T I O N S
28//---------------------------------------------------------------------------
29
70
74#define COLOR_ON '\1'
76#define COLOR_OFF '\2'
78#define COLOR_ESC '\3'
81#define COLOR_INV '\4'
84
85#define SCOLOR_ON "\1"
86#define SCOLOR_OFF "\2"
87#define SCOLOR_ESC "\3"
88#define SCOLOR_INV "\4"
89
91inline THREAD_SAFE bool requires_color_esc(char c) { return c >= COLOR_ON && c <= COLOR_INV; }
93
94typedef uchar color_t;
98const color_t
103 COLOR_INSN = 0x05,
105 COLOR_DNAME = 0x07,
108 COLOR_CHAR = 0x0A,
112 COLOR_CREF = 0x0E,
113 COLOR_DREF = 0x0F,
116 COLOR_ERROR = 0x12,
119 COLOR_EXTRA = 0x15,
120 COLOR_ALTOP = 0x16,
126 COLOR_MACRO = 0x1C,
127 COLOR_DSTR = 0x1D,
128 COLOR_DCHAR = 0x1E,
129 COLOR_DNUM = 0x1F,
131 COLOR_REG = 0x21,
135 COLOR_CNAME = 0x25,
136 COLOR_UNAME = 0x26,
139
140 // Fictive colors
141
146
155
156
159
161
168
170#define COLOR_ADDR_SIZE (sizeof(ea_t)*2)
171
175#define SCOLOR_DEFAULT "\x01"
176#define SCOLOR_REGCMT "\x02"
177#define SCOLOR_RPTCMT "\x03"
178#define SCOLOR_AUTOCMT "\x04"
179#define SCOLOR_INSN "\x05"
180#define SCOLOR_DATNAME "\x06"
181#define SCOLOR_DNAME "\x07"
182#define SCOLOR_DEMNAME "\x08"
183#define SCOLOR_SYMBOL "\x09"
184#define SCOLOR_CHAR "\x0A"
185#define SCOLOR_STRING "\x0B"
186#define SCOLOR_NUMBER "\x0C"
187#define SCOLOR_VOIDOP "\x0D"
188#define SCOLOR_CREF "\x0E"
189#define SCOLOR_DREF "\x0F"
190#define SCOLOR_CREFTAIL "\x10"
191#define SCOLOR_DREFTAIL "\x11"
192#define SCOLOR_ERROR "\x12"
193#define SCOLOR_PREFIX "\x13"
194#define SCOLOR_BINPREF "\x14"
195#define SCOLOR_EXTRA "\x15"
196#define SCOLOR_ALTOP "\x16"
197#define SCOLOR_HIDNAME "\x17"
198#define SCOLOR_LIBNAME "\x18"
199#define SCOLOR_LOCNAME "\x19"
200#define SCOLOR_CODNAME "\x1A"
201#define SCOLOR_ASMDIR "\x1B"
202#define SCOLOR_MACRO "\x1C"
203#define SCOLOR_DSTR "\x1D"
204#define SCOLOR_DCHAR "\x1E"
205#define SCOLOR_DNUM "\x1F"
206#define SCOLOR_KEYWORD "\x20"
207#define SCOLOR_REG "\x21"
208#define SCOLOR_IMPNAME "\x22"
209#define SCOLOR_SEGNAME "\x23"
210#define SCOLOR_UNKNAME "\x24"
211#define SCOLOR_CNAME "\x25"
212#define SCOLOR_UNAME "\x26"
213#define SCOLOR_COLLAPSED "\x27"
214#define SCOLOR_ADDR "\x28"
216
217//----------------- Line prefix colors --------------------------------------
221#define COLOR_DEFAULT 0x01
222#define COLOR_SELECTED 0x02
223#define COLOR_LIBFUNC 0x03
224#define COLOR_REGFUNC 0x04
225#define COLOR_CODE 0x05
226#define COLOR_DATA 0x06
227#define COLOR_UNKNOWN 0x07
228#define COLOR_EXTERN 0x08
229#define COLOR_CURITEM 0x09
230#define COLOR_CURLINE 0x0A
231#define COLOR_HIDLINE 0x0B
232#define COLOR_LUMFUNC 0x0C
233#define COLOR_BG_MAX 0x0D
234
235#define PALETTE_SIZE (COLOR_FG_MAX+COLOR_BG_MAX)
237
238
242#define COLSTR(str,tag) SCOLOR_ON tag str SCOLOR_OFF tag
243
244//----------------- Colors for tiplace_t ------------------------------------
247const color_t
256
257#define SCOLOR_NAME SCOLOR_CNAME
258#define SCOLOR_TYPE SCOLOR_HIDNAME
259#define SCOLOR_ATTR SCOLOR_HIDNAME
260#define SCOLOR_TNUM SCOLOR_LIBNAME
261#define SCOLOR_CMT SCOLOR_NUMBER
262#define SCOLOR_ARGLOC SCOLOR_CREFTAIL
263#define SCOLOR_ARGNAME SCOLOR_REG
264#define SCOLOR_PRAGMA SCOLOR_MACRO
266
267
268//------------------------------------------------------------------------
269
275
280
281idaman THREAD_SAFE void ida_export tag_addr(qstring *buf, ea_t ea, bool ins=false);
282
283
287
288idaman THREAD_SAFE ea_t ida_export tag_get_addr(const char *line);
289
290
296
297idaman THREAD_SAFE const char *ida_export tag_advance(const char *line, int cnt);
298
299
303
304idaman THREAD_SAFE const char *ida_export tag_skipcodes(const char *line);
305
306
314
315idaman THREAD_SAFE const char *ida_export tag_skipcode(const char *line);
316
317
321
322idaman THREAD_SAFE ssize_t ida_export tag_strlen(const char *line);
323
324
330
331idaman THREAD_SAFE ssize_t ida_export tag_remove(qstring *buf, const char *str, int init_level=0);
332
333inline THREAD_SAFE ssize_t idaapi tag_remove(qstring *buf, const qstring &str, int init_level=0)
334{
335 return tag_remove(buf, str.c_str(), init_level);
336}
337
338inline THREAD_SAFE ssize_t idaapi tag_remove(qstring *buf, int init_level=0)
339{
340 if ( buf->empty() )
341 return 0;
342 return tag_remove(buf, buf->begin(), init_level);
343}
344
346
348
349
352idaman color_t ida_export calc_prefix_color(ea_t ea);
353
356idaman bgcolor_t ida_export calc_bg_color(ea_t ea);
357
358
359//------------------------------------------------------------------------
360// S O U R C E F I L E S
361//------------------------------------------------------------------------
362
368
376
377idaman bool ida_export add_sourcefile(ea_t ea1, ea_t ea2, const char *filename);
378
379
387
388idaman DEPRECATED const char *ida_export get_sourcefile(ea_t ea, range_t *bounds=nullptr);
389
390
397
398idaman bool ida_export get_sourcefile_by_ea(qstring *out, ea_t ea, range_t *bounds=nullptr);
399
400
404
405idaman bool ida_export del_sourcefile(ea_t ea);
406
409
410idaman size_t ida_export get_sourcefiles_qty(void);
411
413
419
424
425idaman bool ida_export getn_sourcefile(sourcefile_info_t *out, size_t n);
426
428struct sourcefile_t : public range_t
429{
431};
433
438idaman bool ida_export add_sourcefiles(const sourcefilevec_t &items);
440
441//------------------------------------------------------------------------
442// G E N E R A T I O N O F D I S A S S E M B L E D T E X T
443//------------------------------------------------------------------------
444
447
457idaman bool ida_export install_user_defined_prefix(
458 size_t prefix_len,
459 struct user_defined_prefix_t *udp,
460 const void *owner);
461
464{
466 user_defined_prefix_t(size_t prefix_len, const void *owner)
467 {
468 install_user_defined_prefix(prefix_len, this, owner);
469 }
470
472 virtual idaapi ~user_defined_prefix_t()
473 {
474 install_user_defined_prefix(0, this, nullptr);
475 }
476
477 // Get a user-defined prefix.
491 virtual void idaapi get_user_defined_prefix(
492 qstring *vout,
493 ea_t ea,
494 const class insn_t &insn,
495 int lnnum,
496 int indent,
497 const char *line) = 0;
498};
499
501
502//------------------------------------------------------------------------
503// A N T E R I O R / P O S T E R I O R L I N E S
504//------------------------------------------------------------------------
505
508
510
511idaman AS_PRINTF(3, 0) bool ida_export vadd_extra_line(
512 ea_t ea,
513 int vel_flags, // see VEL_...
514 const char *format,
515 va_list va);
516
517#define VEL_POST 0x01
518#define VEL_CMT 0x02
519
520
526
527AS_PRINTF(3, 4) inline bool add_extra_line(ea_t ea, bool isprev, const char *format, ...)
528{
529 va_list va;
531 int vel_flags = (isprev ? 0 : VEL_POST);
532 bool ok = vadd_extra_line(ea, vel_flags, format, va);
534 return ok;
535}
536
537
545
546AS_PRINTF(3, 4) inline bool add_extra_cmt(ea_t ea, bool isprev, const char *format, ...)
547{
548 va_list va;
550 int vel_flags = (isprev ? 0 : VEL_POST) | VEL_CMT;
551 bool ok = vadd_extra_line(ea, vel_flags, format, va);
552 va_end(va);
553 return ok;
554}
555
556
562
563AS_PRINTF(1, 2) inline bool add_pgm_cmt(const char *format, ...)
564{
565 va_list va;
567 bool ok = vadd_extra_line(inf_get_min_ea(), VEL_CMT, format, va);
568 va_end(va);
569 return ok;
570}
571
573
576
577// Generate disassembly (many lines) and put them into a buffer
578// Returns number of generated lines
579idaman int ida_export generate_disassembly(
580 qstrvec_t *out, // buffer to hold generated lines
581 int *lnnum, // number of "the most interesting" line
582 ea_t ea, // address to generate disassembly for
583 int maxsize, // maximum number of lines
584 int flags = 0);
585
586#define GDISMF_AS_STACK (1 << 0)
587#define GDISMF_ADDR_TAG (1 << 1)
588#define GDISMF_REMOVE_TAGS (1 << 2)
589#define GDISMF_UNHIDE (1 << 3)
590
591// Generate one line of disassembly
592// This function discards all "non-interesting" lines
593// It is designed to generate one-line descriptions
594// of addresses for lists, etc.
595idaman bool ida_export generate_disasm_line(
596 qstring *buf, // output buffer
597 ea_t ea, // address to generate disassembly for
598 int flags=0);
599#define GENDSM_FORCE_CODE (1 << 0)
601#define GENDSM_MULTI_LINE (1 << 1)
603#define GENDSM_REMOVE_TAGS (1 << 2)
604#define GENDSM_UNHIDE (1 << 3)
605
607
608idaman int ida_export get_last_pfxlen();
609
610
611// Get pointer to the sequence of characters denoting 'close comment'
612// empty string means no comment (the current assembler has no open-comment close-comment pairs)
613// This function uses ash.cmnt2
614
615idaman const char *ida_export closing_comment();
616
617
618// Every anterior/posterior line has its number.
619// Anterior lines have numbers from E_PREV
620// Posterior lines have numbers from E_NEXT
621
622const int E_PREV = 1000;
623const int E_NEXT = 2000;
624
625idaman int ida_export get_first_free_extra_cmtidx(ea_t ea, int start);
626idaman bool ida_export update_extra_cmt(ea_t ea, int what, const char *str);
627idaman bool ida_export del_extra_cmt(ea_t ea, int what);
628idaman ssize_t ida_export get_extra_cmt(qstring *buf, ea_t ea, int what);
629idaman void ida_export delete_extra_cmts(ea_t ea, int what);
630
631idaman ea_t ida_export align_down_to_stack(ea_t newea);
632idaman ea_t ida_export align_up_to_stack(ea_t ea1, ea_t ea2=BADADDR);
633
634// A helper class, to encode from UTF-8, -> into the target encoding.
635// This is typically used when generating listings (or any kind of
636// output file.)
637struct encoder_t
638{
639 // whether or not a message should be printed, letting the
640 // user know that some text couldn't be recoded properly
641 enum notify_recerr_t
642 {
643 nr_none,
644 nr_once,
645 };
646
647 virtual ~encoder_t() {}
648 virtual bool idaapi get_bom(bytevec_t *out) const = 0;
649 // returns true if conversion was entirely successful, false otherwise.
650 // codepoints that couldn't be converted, will be output as C
651 // literal-escaped UTF-8 sequences (e.g., "\xC3\xD9"), and if
652 // 'nr_once' was passed at creation-time, a one-time notification
653 // well be output in the messages window.
654 virtual bool idaapi encode(qstring *s) const = 0;
655 // encode()s the UTF-8 string composed by format + args, and
656 // returns true if all the resulting bytes could be written to
657 // the output file.
658 AS_PRINTF(3, 4) virtual bool idaapi print(FILE *out, const char *format, ...) const = 0;
659 // should a file be opened as binary, or should it rather be opened
660 // in text mode? This will have an importance in how '\n' characters
661 // are possibly converted into '\x0A\x0D' on windows, which is most
662 // inappropriate when output'ing e.g., UTF-16, UTF-32..
663 virtual bool idaapi requires_binary_mode() const = 0;
664};
665
666// Create the encoder with the given target encoding. If -1 is passed
667// then the effective target encoding will be computed like so:
668// if ( encidx < 0 )
669// {
670// encidx = get_outfile_encoding_idx();
671// if ( encidx == STRENC_DEFAULT )
672// encidx = get_default_encoding_idx(BPU_1B);
673// }
674idaman encoder_t *ida_export create_encoding_helper(
675 int encidx=-1,
676 encoder_t::notify_recerr_t nr=encoder_t::nr_once);
677
680typedef int idaapi html_header_cb_t(FILE *fp);
681typedef int idaapi html_footer_cb_t(FILE *fp);
682typedef int idaapi html_line_cb_t(
683 FILE *fp,
684 const qstring &line,
685 bgcolor_t prefix_color,
686 bgcolor_t bg_color);
687#define gen_outline_t html_line_cb_t
689
691
692
693#endif
bool empty(void) const
Does the qstring have 0 non-null elements?
Definition pro.h:3244
iterator begin(void)
Get a pointer to the beginning of the qstring.
Definition pro.h:3253
const qchar * c_str(void) const
Convert the qstring to a char *.
Definition pro.h:3246
Reimplementation of vector class from STL.
Definition pro.h:2262
const color_t COLOR_OPND4
Instruction operand 4.
Definition lines.hpp:150
const color_t COLOR_MACRO
Macro.
Definition lines.hpp:126
const color_t COLOR_OPND2
Instruction operand 2.
Definition lines.hpp:148
const color_t COLOR_GROUP
Groups together a run of tagged text so it can be looked up as a single span (like COLOR_ADDR_EXPR),...
Definition lines.hpp:162
const color_t COLOR_AUTOCMT
Automatic comment.
Definition lines.hpp:102
const color_t COLOR_CODNAME
Dummy code name.
Definition lines.hpp:124
const color_t COLOR_DNAME
Regular Data Name.
Definition lines.hpp:105
const color_t COLOR_RESERVED1
This tag is reserved for internal IDA use.
Definition lines.hpp:157
const color_t COLOR_REGCMT
Regular comment.
Definition lines.hpp:100
const color_t COLOR_DEMNAME
Demangled Name.
Definition lines.hpp:106
const color_t COLOR_IMPNAME
Imported name.
Definition lines.hpp:132
const color_t COLOR_NUMBER
Numeric constant in instruction.
Definition lines.hpp:110
const color_t COLOR_FG_MAX
Max color number.
Definition lines.hpp:138
const color_t COLOR_BINPREF
Binary line prefix bytes.
Definition lines.hpp:118
const color_t COLOR_RPTCMT
Repeatable comment (comment defined somewhere else)
Definition lines.hpp:101
const color_t COLOR_COLLAPSED
Collapsed line.
Definition lines.hpp:137
const color_t COLOR_DATNAME
Dummy Data Name.
Definition lines.hpp:104
const color_t COLOR_OPND3
Instruction operand 3.
Definition lines.hpp:149
const color_t COLOR_CREFTAIL
Code reference to tail byte.
Definition lines.hpp:114
const color_t COLOR_ASMDIR
Assembler directive.
Definition lines.hpp:125
const color_t COLOR_ADDR_EXPR
Wraps an "address expression" - possibly composed of sub-expressions.
Definition lines.hpp:160
const color_t COLOR_REG
Register name.
Definition lines.hpp:131
const color_t COLOR_KEYWORD
Keywords.
Definition lines.hpp:130
const color_t COLOR_UNKNAME
Dummy unknown name.
Definition lines.hpp:134
const color_t COLOR_STRING
String constant in instruction.
Definition lines.hpp:109
const color_t COLOR_LIBNAME
Library function name.
Definition lines.hpp:122
const color_t COLOR_EXTRA
Extra line.
Definition lines.hpp:119
const color_t COLOR_OPND8
Instruction operand 8.
Definition lines.hpp:154
const color_t COLOR_CHAR
Char constant in instruction.
Definition lines.hpp:108
const color_t COLOR_PREFIX
Line prefix.
Definition lines.hpp:117
const color_t COLOR_LOCNAME
Local variable name.
Definition lines.hpp:123
const color_t COLOR_VOIDOP
Void operand.
Definition lines.hpp:111
const color_t COLOR_DREF
Data reference.
Definition lines.hpp:113
const color_t COLOR_SEGNAME
Segment name.
Definition lines.hpp:133
const color_t COLOR_DSTR
String constant in data directive.
Definition lines.hpp:127
const color_t COLOR_DCHAR
Char constant in data directive.
Definition lines.hpp:128
const color_t COLOR_OPND7
Instruction operand 7.
Definition lines.hpp:153
const color_t COLOR_OPND6
Instruction operand 6.
Definition lines.hpp:152
const color_t COLOR_CREF
Code reference.
Definition lines.hpp:112
const color_t COLOR_HIDNAME
Hidden name.
Definition lines.hpp:121
const color_t COLOR_CNAME
Regular code name.
Definition lines.hpp:135
const color_t COLOR_ALTOP
Alternative operand.
Definition lines.hpp:120
const color_t COLOR_UNAME
Regular unknown name.
Definition lines.hpp:136
const color_t COLOR_DREFTAIL
Data reference to tail byte.
Definition lines.hpp:115
const color_t COLOR_ADDR
Hidden address marks.
Definition lines.hpp:142
const color_t COLOR_OPND1
Instruction operand 1.
Definition lines.hpp:147
const color_t COLOR_DEFAULT
Default.
Definition lines.hpp:99
const color_t COLOR_OPND5
Instruction operand 5.
Definition lines.hpp:151
const color_t COLOR_SYMBOL
Punctuation.
Definition lines.hpp:107
const color_t COLOR_INSN
Instruction.
Definition lines.hpp:103
const color_t COLOR_ERROR
Error or problem.
Definition lines.hpp:116
const color_t COLOR_DNUM
Numeric constant in data directive.
Definition lines.hpp:129
const color_t COLOR_LUMINA
Lumina-related, only for the navigation band.
Definition lines.hpp:158
const color_t COLOR_ARGLOC
arglocs - red
Definition lines.hpp:253
const color_t COLOR_TNUM
numbers - light blue
Definition lines.hpp:251
const color_t COLOR_PRAGMA
pragmas - purple
Definition lines.hpp:255
const color_t COLOR_TYPE
type names - gray
Definition lines.hpp:249
const color_t COLOR_ARGNAME
argnames - dark blue
Definition lines.hpp:254
const color_t COLOR_ATTR
type attrs - gray
Definition lines.hpp:250
const color_t COLOR_NAME
names - blue
Definition lines.hpp:248
const color_t COLOR_CMT
comments - green
Definition lines.hpp:252
idaman THREAD_SAFE ssize_t ida_export tag_strlen(const char *line)
Calculate length of a colored string This function computes the length in unicode codepoints of a lin...
idaman THREAD_SAFE ssize_t ida_export tag_remove(qstring *buf, const char *str, int init_level=0)
Remove color escape sequences from a string.
idaman THREAD_SAFE void ida_export tag_addr(qstring *buf, ea_t ea, bool ins=false)
Insert an address mark into a string.
idaman THREAD_SAFE const char *ida_export tag_skipcode(const char *line)
Skip one color code.
idaman THREAD_SAFE const char *ida_export tag_advance(const char *line, int cnt)
Move pointer to a 'line' to 'cnt' positions right.
idaman THREAD_SAFE ea_t ida_export tag_get_addr(const char *line)
Decode an address from an address mark.
idaman THREAD_SAFE const char *ida_export tag_skipcodes(const char *line)
Move the pointer past all color codes.
uchar color_t
see <lines.hpp>
Definition kernwin.hpp:26
THREAD_SAFE bool requires_color_esc(char c)
Is the given char a color escape character?
Definition lines.hpp:91
idaman THREAD_SAFE va_list va
See qsscanf()
Definition err.h:21
idaman THREAD_SAFE const char * format
Definition fpro.h:78
idaman THREAD_SAFE AS_PRINTF(1, 0) void ida_export vqperror(const char *format
Print error message to stderr (analog of perror)
idaman size_t n
Definition pro.h:1000
Contains the inf structure definition and some functions common to the whole IDA project.
ea_t inf_get_min_ea()
Definition ida.hpp:810
bool ok
Definition kernwin.hpp:7410
bool const char va_start(va, format)
idaman AS_PRINTF(3, 0) bool ida_export vadd_extra_line(ea_t ea
See higher level functions below.
qvector< sourcefile_t > sourcefilevec_t
Definition lines.hpp:432
idaman int vel_flags
Definition lines.hpp:513
va_end(va)
idaman size_t ida_export get_sourcefiles_qty(void)
Get number of source file ranges.
idaman bool ida_export add_sourcefile(ea_t ea1, ea_t ea2, const char *filename)
Mark a range of address as belonging to a source file.
idaman bool ida_export add_sourcefiles(const sourcefilevec_t &items)
Batch version of add_sourcefile(): insert all source file ranges at once and perform a single save() ...
bool isprev
Definition lines.hpp:527
idaman color_t ida_export calc_prefix_color(ea_t ea)
Get prefix color for line at 'ea'.
idaman bool ida_export install_user_defined_prefix(size_t prefix_len, struct user_defined_prefix_t *udp, const void *owner)
User-defined line-prefixes are displayed just after the autogenerated line prefixes in the disassembl...
idaman bgcolor_t ida_export calc_bg_color(ea_t ea)
Get background color for line at 'ea'.
idaman bool ida_export getn_sourcefile(sourcefile_info_t *out, size_t n)
Get information about a source file range by its index.
idaman DEPRECATED const char *ida_export get_sourcefile(ea_t ea, range_t *bounds=nullptr)
Get name of source file occupying the given address.
idaman bool ida_export get_sourcefile_by_ea(qstring *out, ea_t ea, range_t *bounds=nullptr)
Get name of source file occupying the given address.
idaman bool ida_export del_sourcefile(ea_t ea)
Delete information about the source file.
qvector< qstring > qstrvec_t
Definition lumina.hpp:831
int bool
Definition pro.h:333
uint32 bgcolor_t
background color in RGB
Definition pro.h:5109
uint64 ea_t
Definition pro.h:425
struct bytevec_tag bytevec_t
Definition pro.h:4762
unsigned char uchar
unsigned 8 bit value
Definition pro.h:341
ptrdiff_t ssize_t
Signed size_t - used to check for size overflows when the counter becomes negative.
Definition pro.h:385
_qstring< char > qstring
regular string
Definition pro.h:3771
Base class for an range.
Definition range.hpp:35
range_t(ea_t ea1=0, ea_t ea2=0)
Definition range.hpp:39
Snapshot of a source file range (thread-safe, no pointer lifetime issues).
Definition lines.hpp:415
qstring filename
owned copy of the source file name
Definition lines.hpp:417
range_t range
address range of the source file
Definition lines.hpp:416
One source file range entry for the batch add_sourcefiles() API.
Definition lines.hpp:429
qstring filename
Definition lines.hpp:430
Class to generate user-defined prefixes in the disassembly listing.
Definition lines.hpp:464
virtual idaapi ~user_defined_prefix_t()
Destroying a user-defined prefix object uninstalls it.
Definition lines.hpp:472
virtual void idaapi get_user_defined_prefix(qstring *vout, ea_t ea, const class insn_t &insn, int lnnum, int indent, const char *line)=0
This callback must be overridden by the derived class.
user_defined_prefix_t(size_t prefix_len, const void *owner)
Creating a user-defined prefix object installs it.
Definition lines.hpp:466