4222 lines
238 KiB
HTML
4222 lines
238 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="generator" content="Asciidoctor 2.0.23">
|
|
<title>Boost.Uuid</title>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
|
|
<style>
|
|
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
|
|
/* Uncomment the following line when using as a custom stylesheet */
|
|
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
|
|
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
|
|
a{background:none}
|
|
a:focus{outline:thin dotted}
|
|
a:active,a:hover{outline:0}
|
|
h1{font-size:2em;margin:.67em 0}
|
|
b,strong{font-weight:bold}
|
|
abbr{font-size:.9em}
|
|
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
|
|
dfn{font-style:italic}
|
|
hr{height:0}
|
|
mark{background:#ff0;color:#000}
|
|
code,kbd,pre,samp{font-family:monospace;font-size:1em}
|
|
pre{white-space:pre-wrap}
|
|
q{quotes:"\201C" "\201D" "\2018" "\2019"}
|
|
small{font-size:80%}
|
|
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
|
|
sup{top:-.5em}
|
|
sub{bottom:-.25em}
|
|
img{border:0}
|
|
svg:not(:root){overflow:hidden}
|
|
figure{margin:0}
|
|
audio,video{display:inline-block}
|
|
audio:not([controls]){display:none;height:0}
|
|
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
|
|
legend{border:0;padding:0}
|
|
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
|
|
button,input{line-height:normal}
|
|
button,select{text-transform:none}
|
|
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
|
|
button[disabled],html input[disabled]{cursor:default}
|
|
input[type=checkbox],input[type=radio]{padding:0}
|
|
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
|
|
textarea{overflow:auto;vertical-align:top}
|
|
table{border-collapse:collapse;border-spacing:0}
|
|
*,::before,::after{box-sizing:border-box}
|
|
html,body{font-size:100%}
|
|
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
|
|
a:hover{cursor:pointer}
|
|
img,object,embed{max-width:100%;height:auto}
|
|
object,embed{height:100%}
|
|
img{-ms-interpolation-mode:bicubic}
|
|
.left{float:left!important}
|
|
.right{float:right!important}
|
|
.text-left{text-align:left!important}
|
|
.text-right{text-align:right!important}
|
|
.text-center{text-align:center!important}
|
|
.text-justify{text-align:justify!important}
|
|
.hide{display:none}
|
|
img,object,svg{display:inline-block;vertical-align:middle}
|
|
textarea{height:auto;min-height:50px}
|
|
select{width:100%}
|
|
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
|
|
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
|
|
a{color:#2156a5;text-decoration:underline;line-height:inherit}
|
|
a:hover,a:focus{color:#1d4b8f}
|
|
a img{border:0}
|
|
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
|
|
p aside{font-size:.875em;line-height:1.35;font-style:italic}
|
|
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
|
|
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
|
|
h1{font-size:2.125em}
|
|
h2{font-size:1.6875em}
|
|
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
|
|
h4,h5{font-size:1.125em}
|
|
h6{font-size:1em}
|
|
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
|
|
em,i{font-style:italic;line-height:inherit}
|
|
strong,b{font-weight:bold;line-height:inherit}
|
|
small{font-size:60%;line-height:inherit}
|
|
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
|
|
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
|
|
ul,ol{margin-left:1.5em}
|
|
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
|
|
ul.circle{list-style-type:circle}
|
|
ul.disc{list-style-type:disc}
|
|
ul.square{list-style-type:square}
|
|
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
|
|
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
|
|
dl dt{margin-bottom:.3125em;font-weight:bold}
|
|
dl dd{margin-bottom:1.25em}
|
|
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
|
|
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
|
|
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
|
|
h1{font-size:2.75em}
|
|
h2{font-size:2.3125em}
|
|
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
|
|
h4{font-size:1.4375em}}
|
|
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
|
|
table thead,table tfoot{background:#f7f8f7}
|
|
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
|
|
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
|
|
table tr.even,table tr.alt{background:#f8f8f7}
|
|
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
|
|
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
|
|
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
|
|
.center{margin-left:auto;margin-right:auto}
|
|
.stretch{width:100%}
|
|
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
|
|
.clearfix::after,.float-group::after{clear:both}
|
|
:not(pre).nobreak{word-wrap:normal}
|
|
:not(pre).nowrap{white-space:nowrap}
|
|
:not(pre).pre-wrap{white-space:pre-wrap}
|
|
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
|
|
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
|
|
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
|
|
pre>code{display:block}
|
|
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
|
|
em em{font-style:normal}
|
|
strong strong{font-weight:400}
|
|
.keyseq{color:rgba(51,51,51,.8)}
|
|
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
|
|
.keyseq kbd:first-child{margin-left:0}
|
|
.keyseq kbd:last-child{margin-right:0}
|
|
.menuseq,.menuref{color:#000}
|
|
.menuseq b:not(.caret),.menuref{font-weight:inherit}
|
|
.menuseq{word-spacing:-.02em}
|
|
.menuseq b.caret{font-size:1.25em;line-height:.8}
|
|
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
|
|
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
|
|
b.button::before{content:"[";padding:0 3px 0 2px}
|
|
b.button::after{content:"]";padding:0 2px 0 3px}
|
|
p a>code:hover{color:rgba(0,0,0,.9)}
|
|
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
|
|
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
|
|
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
|
|
#content{margin-top:1.25em}
|
|
#content::before{content:none}
|
|
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
|
|
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
|
|
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
|
|
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
|
|
#header .details span:first-child{margin-left:-.125em}
|
|
#header .details span.email a{color:rgba(0,0,0,.85)}
|
|
#header .details br{display:none}
|
|
#header .details br+span::before{content:"\00a0\2013\00a0"}
|
|
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
|
|
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
|
|
#header #revnumber{text-transform:capitalize}
|
|
#header #revnumber::after{content:"\00a0"}
|
|
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
|
|
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
|
|
#toc>ul{margin-left:.125em}
|
|
#toc ul.sectlevel0>li>a{font-style:italic}
|
|
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
|
|
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
|
|
#toc li{line-height:1.3334;margin-top:.3334em}
|
|
#toc a{text-decoration:none}
|
|
#toc a:active{text-decoration:underline}
|
|
#toctitle{color:#7a2518;font-size:1.2em}
|
|
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
|
|
body.toc2{padding-left:15em;padding-right:0}
|
|
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
|
|
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
|
|
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
|
|
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
|
|
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
|
|
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
|
|
body.toc2.toc-right{padding-left:0;padding-right:15em}
|
|
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
|
|
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
|
|
#toc.toc2{width:20em}
|
|
#toc.toc2 #toctitle{font-size:1.375em}
|
|
#toc.toc2>ul{font-size:.95em}
|
|
#toc.toc2 ul ul{padding-left:1.25em}
|
|
body.toc2.toc-right{padding-left:0;padding-right:20em}}
|
|
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
|
|
#content #toc>:first-child{margin-top:0}
|
|
#content #toc>:last-child{margin-bottom:0}
|
|
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
|
|
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
|
|
#content{margin-bottom:.625em}
|
|
.sect1{padding-bottom:.625em}
|
|
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
|
|
.sect1{padding-bottom:1.25em}}
|
|
.sect1:last-child{padding-bottom:0}
|
|
.sect1+.sect1{border-top:1px solid #e7e7e9}
|
|
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
|
|
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
|
|
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
|
|
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
|
|
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
|
|
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
|
|
details{margin-left:1.25rem}
|
|
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
|
|
details>summary::-webkit-details-marker{display:none}
|
|
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
|
|
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
|
|
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
|
|
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
|
|
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
|
|
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
|
|
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
|
|
.admonitionblock>table td.icon{text-align:center;width:80px}
|
|
.admonitionblock>table td.icon img{max-width:none}
|
|
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
|
|
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
|
|
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
|
|
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
|
|
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
|
|
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
|
|
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
|
|
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
|
|
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
|
|
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
|
|
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
|
|
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
|
|
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
|
|
.listingblock>.content{position:relative}
|
|
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
|
|
.listingblock:hover code[data-lang]::before{display:block}
|
|
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
|
|
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
|
|
.listingblock pre.highlightjs{padding:0}
|
|
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
|
|
.listingblock pre.prettyprint{border-width:0}
|
|
.prettyprint{background:#f7f7f8}
|
|
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
|
|
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
|
|
pre.prettyprint li code[data-lang]::before{opacity:1}
|
|
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
|
|
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
|
|
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
|
|
table.linenotable td.code{padding-left:.75em}
|
|
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
|
|
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
|
|
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
|
|
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
|
|
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
|
|
.quoteblock blockquote{margin:0;padding:0;border:0}
|
|
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
|
|
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
|
|
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
|
|
.verseblock{margin:0 1em 1.25em}
|
|
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
|
|
.verseblock pre strong{font-weight:400}
|
|
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
|
|
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
|
|
.quoteblock .attribution br,.verseblock .attribution br{display:none}
|
|
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
|
|
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
|
|
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
|
|
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
|
|
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
|
|
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
|
|
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
|
|
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
|
|
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
|
|
p.tableblock:last-child{margin-bottom:0}
|
|
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
|
|
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
|
|
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
|
|
table.grid-all>*>tr>*{border-width:1px}
|
|
table.grid-cols>*>tr>*{border-width:0 1px}
|
|
table.grid-rows>*>tr>*{border-width:1px 0}
|
|
table.frame-all{border-width:1px}
|
|
table.frame-ends{border-width:1px 0}
|
|
table.frame-sides{border-width:0 1px}
|
|
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
|
|
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
|
|
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
|
|
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
|
|
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
|
|
th.halign-left,td.halign-left{text-align:left}
|
|
th.halign-right,td.halign-right{text-align:right}
|
|
th.halign-center,td.halign-center{text-align:center}
|
|
th.valign-top,td.valign-top{vertical-align:top}
|
|
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
|
|
th.valign-middle,td.valign-middle{vertical-align:middle}
|
|
table thead th,table tfoot th{font-weight:bold}
|
|
tbody tr th{background:#f7f8f7}
|
|
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
|
|
p.tableblock>code:only-child{background:none;padding:0}
|
|
p.tableblock{font-size:1em}
|
|
ol{margin-left:1.75em}
|
|
ul li ol{margin-left:1.5em}
|
|
dl dd{margin-left:1.125em}
|
|
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
|
|
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
|
|
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
|
|
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
|
|
ul.unstyled,ol.unstyled{margin-left:0}
|
|
li>p:empty:only-child::before{content:"";display:inline-block}
|
|
ul.checklist>li>p:first-child{margin-left:-1em}
|
|
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
|
|
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
|
|
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
|
|
ul.inline>li{margin-left:1.25em}
|
|
.unstyled dl dt{font-weight:400;font-style:normal}
|
|
ol.arabic{list-style-type:decimal}
|
|
ol.decimal{list-style-type:decimal-leading-zero}
|
|
ol.loweralpha{list-style-type:lower-alpha}
|
|
ol.upperalpha{list-style-type:upper-alpha}
|
|
ol.lowerroman{list-style-type:lower-roman}
|
|
ol.upperroman{list-style-type:upper-roman}
|
|
ol.lowergreek{list-style-type:lower-greek}
|
|
.hdlist>table,.colist>table{border:0;background:none}
|
|
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
|
|
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
|
|
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
|
|
td.hdlist2{word-wrap:anywhere}
|
|
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
|
|
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
|
|
.colist td:not([class]):first-child img{max-width:none}
|
|
.colist td:not([class]):last-child{padding:.25em 0}
|
|
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
|
|
.imageblock.left{margin:.25em .625em 1.25em 0}
|
|
.imageblock.right{margin:.25em 0 1.25em .625em}
|
|
.imageblock>.title{margin-bottom:0}
|
|
.imageblock.thumb,.imageblock.th{border-width:6px}
|
|
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
|
|
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
|
|
.image.left{margin-right:.625em}
|
|
.image.right{margin-left:.625em}
|
|
a.image{text-decoration:none;display:inline-block}
|
|
a.image object{pointer-events:none}
|
|
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
|
|
sup.footnote a,sup.footnoteref a{text-decoration:none}
|
|
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
|
|
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
|
|
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
|
|
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
|
|
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
|
|
#footnotes .footnote:last-of-type{margin-bottom:0}
|
|
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
|
|
div.unbreakable{page-break-inside:avoid}
|
|
.big{font-size:larger}
|
|
.small{font-size:smaller}
|
|
.underline{text-decoration:underline}
|
|
.overline{text-decoration:overline}
|
|
.line-through{text-decoration:line-through}
|
|
.aqua{color:#00bfbf}
|
|
.aqua-background{background:#00fafa}
|
|
.black{color:#000}
|
|
.black-background{background:#000}
|
|
.blue{color:#0000bf}
|
|
.blue-background{background:#0000fa}
|
|
.fuchsia{color:#bf00bf}
|
|
.fuchsia-background{background:#fa00fa}
|
|
.gray{color:#606060}
|
|
.gray-background{background:#7d7d7d}
|
|
.green{color:#006000}
|
|
.green-background{background:#007d00}
|
|
.lime{color:#00bf00}
|
|
.lime-background{background:#00fa00}
|
|
.maroon{color:#600000}
|
|
.maroon-background{background:#7d0000}
|
|
.navy{color:#000060}
|
|
.navy-background{background:#00007d}
|
|
.olive{color:#606000}
|
|
.olive-background{background:#7d7d00}
|
|
.purple{color:#600060}
|
|
.purple-background{background:#7d007d}
|
|
.red{color:#bf0000}
|
|
.red-background{background:#fa0000}
|
|
.silver{color:#909090}
|
|
.silver-background{background:#bcbcbc}
|
|
.teal{color:#006060}
|
|
.teal-background{background:#007d7d}
|
|
.white{color:#bfbfbf}
|
|
.white-background{background:#fafafa}
|
|
.yellow{color:#bfbf00}
|
|
.yellow-background{background:#fafa00}
|
|
span.icon>.fa{cursor:default}
|
|
a span.icon>.fa{cursor:inherit}
|
|
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
|
|
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
|
|
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
|
|
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
|
|
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
|
|
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
|
|
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
|
|
.conum[data-value] *{color:#fff!important}
|
|
.conum[data-value]+b{display:none}
|
|
.conum[data-value]::after{content:attr(data-value)}
|
|
pre .conum[data-value]{position:relative;top:-.125em}
|
|
b.conum *{color:inherit!important}
|
|
.conum:not([data-value]):empty{display:none}
|
|
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
|
|
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
|
|
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
|
|
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
|
|
p{margin-bottom:1.25rem}
|
|
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
|
|
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
|
|
.print-only{display:none!important}
|
|
@page{margin:1.25cm .75cm}
|
|
@media print{*{box-shadow:none!important;text-shadow:none!important}
|
|
html{font-size:80%}
|
|
a{color:inherit!important;text-decoration:underline!important}
|
|
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
|
|
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
|
|
abbr[title]{border-bottom:1px dotted}
|
|
abbr[title]::after{content:" (" attr(title) ")"}
|
|
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
|
|
thead{display:table-header-group}
|
|
svg{max-width:100%}
|
|
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
|
|
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
|
|
#header,#content,#footnotes,#footer{max-width:none}
|
|
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
|
|
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
|
|
body.book #header{text-align:center}
|
|
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
|
|
body.book #header .details{border:0!important;display:block;padding:0!important}
|
|
body.book #header .details span:first-child{margin-left:0!important}
|
|
body.book #header .details br{display:block}
|
|
body.book #header .details br+span::before{content:none!important}
|
|
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
|
|
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
|
|
.listingblock code[data-lang]::before{display:block}
|
|
#footer{padding:0 .9375em}
|
|
.hide-on-print{display:none!important}
|
|
.print-only{display:block!important}
|
|
.hide-for-print{display:none!important}
|
|
.show-for-print{display:inherit!important}}
|
|
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
|
|
.sect1{padding:0!important}
|
|
.sect1+.sect1{border:0}
|
|
#footer{background:none}
|
|
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
|
|
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
|
|
</style>
|
|
<style>
|
|
pre.rouge table td { padding: 5px; }
|
|
pre.rouge table pre { margin: 0; }
|
|
pre.rouge, pre.rouge .w {
|
|
color: #24292f;
|
|
background-color: #f6f8fa;
|
|
}
|
|
pre.rouge .k, pre.rouge .kd, pre.rouge .kn, pre.rouge .kp, pre.rouge .kr, pre.rouge .kt, pre.rouge .kv {
|
|
color: #cf222e;
|
|
}
|
|
pre.rouge .gr {
|
|
color: #f6f8fa;
|
|
}
|
|
pre.rouge .gd {
|
|
color: #82071e;
|
|
background-color: #ffebe9;
|
|
}
|
|
pre.rouge .nb {
|
|
color: #953800;
|
|
}
|
|
pre.rouge .nc {
|
|
color: #953800;
|
|
}
|
|
pre.rouge .no {
|
|
color: #953800;
|
|
}
|
|
pre.rouge .nn {
|
|
color: #953800;
|
|
}
|
|
pre.rouge .sr {
|
|
color: #116329;
|
|
}
|
|
pre.rouge .na {
|
|
color: #116329;
|
|
}
|
|
pre.rouge .nt {
|
|
color: #116329;
|
|
}
|
|
pre.rouge .gi {
|
|
color: #116329;
|
|
background-color: #dafbe1;
|
|
}
|
|
pre.rouge .ges {
|
|
font-weight: bold;
|
|
font-style: italic;
|
|
}
|
|
pre.rouge .kc {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .l, pre.rouge .ld, pre.rouge .m, pre.rouge .mb, pre.rouge .mf, pre.rouge .mh, pre.rouge .mi, pre.rouge .il, pre.rouge .mo, pre.rouge .mx {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .sb {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .bp {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .ne {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .nl {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .py {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .nv, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi, pre.rouge .vm {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .o, pre.rouge .ow {
|
|
color: #0550ae;
|
|
}
|
|
pre.rouge .gh {
|
|
color: #0550ae;
|
|
font-weight: bold;
|
|
}
|
|
pre.rouge .gu {
|
|
color: #0550ae;
|
|
font-weight: bold;
|
|
}
|
|
pre.rouge .s, pre.rouge .sa, pre.rouge .sc, pre.rouge .dl, pre.rouge .sd, pre.rouge .s2, pre.rouge .se, pre.rouge .sh, pre.rouge .sx, pre.rouge .s1, pre.rouge .ss {
|
|
color: #0a3069;
|
|
}
|
|
pre.rouge .nd {
|
|
color: #8250df;
|
|
}
|
|
pre.rouge .nf, pre.rouge .fm {
|
|
color: #8250df;
|
|
}
|
|
pre.rouge .err {
|
|
color: #f6f8fa;
|
|
background-color: #82071e;
|
|
}
|
|
pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cm, pre.rouge .cp, pre.rouge .cpf, pre.rouge .c1, pre.rouge .cs {
|
|
color: #6e7781;
|
|
}
|
|
pre.rouge .gl {
|
|
color: #6e7781;
|
|
}
|
|
pre.rouge .gt {
|
|
color: #6e7781;
|
|
}
|
|
pre.rouge .ni {
|
|
color: #24292f;
|
|
}
|
|
pre.rouge .si {
|
|
color: #24292f;
|
|
}
|
|
pre.rouge .ge {
|
|
color: #24292f;
|
|
font-style: italic;
|
|
}
|
|
pre.rouge .gs {
|
|
color: #24292f;
|
|
font-weight: bold;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="article toc2 toc-left">
|
|
<div id="header">
|
|
<h1>Boost.Uuid</h1>
|
|
<div id="toc" class="toc2">
|
|
<div id="toctitle">Table of Contents</div>
|
|
<ul class="sectlevel1">
|
|
<li><a href="#introduction">Introduction</a></li>
|
|
<li><a href="#changes">Revision History</a>
|
|
<ul class="sectlevel2">
|
|
<li><a href="#changes_changes_in_boost_1_91_0">Changes in Boost 1.91.0</a></li>
|
|
<li><a href="#changes_changes_in_boost_1_90_0">Changes in Boost 1.90.0</a></li>
|
|
<li><a href="#changes_changes_in_boost_1_87_0">Changes in Boost 1.87.0</a></li>
|
|
<li><a href="#changes_changes_in_boost_1_86_0_major_update">Changes in Boost 1.86.0 (<strong>major update</strong>)</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#configuration">Configuration</a>
|
|
<ul class="sectlevel2">
|
|
<li><a href="#configuration_instruction_set">Instruction Set</a></li>
|
|
<li><a href="#configuration_alignment">Alignment</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#examples">Examples</a>
|
|
<ul class="sectlevel2">
|
|
<li><a href="#examples_tagging">Tagging</a></li>
|
|
<li><a href="#examples_byte_extraction">Byte Extraction</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#reference">Reference</a>
|
|
<ul class="sectlevel2">
|
|
<li><a href="#uuid_all"><boost/uuid.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#uuid_all_synopsis">Synopsis</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#uuid"><boost/uuid/uuid.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#uuid_synopsis">Synopsis</a></li>
|
|
<li><a href="#uuid_constructors">Constructors</a></li>
|
|
<li><a href="#uuid_iteration">Iteration</a></li>
|
|
<li><a href="#uuid_data">Data</a></li>
|
|
<li><a href="#uuid_size">Size</a></li>
|
|
<li><a href="#uuid_is_nil">is_nil</a></li>
|
|
<li><a href="#uuid_variant">Variant</a></li>
|
|
<li><a href="#uuid_version">Version</a></li>
|
|
<li><a href="#uuid_time_based_fields">Time-based Fields</a></li>
|
|
<li><a href="#uuid_swap">Swap</a></li>
|
|
<li><a href="#uuid_operators">Operators</a></li>
|
|
<li><a href="#uuid_free_swap">Free Swap</a></li>
|
|
<li><a href="#uuid_hash_value">hash_value</a></li>
|
|
<li><a href="#uuid_serialization">Serialization</a></li>
|
|
<li><a href="#uuid_stdhash">std::hash</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#uuid_io"><boost/uuid/uuid_io.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#uuid_io_synopsis">Synopsis</a></li>
|
|
<li><a href="#uuid_io_stream_insertion">Stream Insertion</a></li>
|
|
<li><a href="#uuid_io_stream_extraction">Stream Extraction</a></li>
|
|
<li><a href="#uuid_io_to_chars">to_chars</a></li>
|
|
<li><a href="#uuid_io_to_string">to_string</a></li>
|
|
<li><a href="#uuid_io_from_chars_result">from_chars_result</a></li>
|
|
<li><a href="#uuid_io_from_chars">from_chars</a></li>
|
|
<li><a href="#uuid_io_uuid_from_string">uuid_from_string</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#invalid_uuid"><boost/uuid/invalid_uuid.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#invalid_uuid_synopsis">Synopsis</a></li>
|
|
<li><a href="#invalid_uuid_invalid_uuid">invalid_uuid</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#generators"><boost/uuid/generators.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#generators_synopsis">Synopsis</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#nil_generator"><boost/uuid/nil_generator.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#nil_generator_synopsis">Synopsis</a></li>
|
|
<li><a href="#nil_generator_nil_generator">nil_generator</a></li>
|
|
<li><a href="#nil_generator_nil_uuid">nil_uuid</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#string_generator"><boost/uuid/string_generator.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#string_generator_synopsis">Synopsis</a></li>
|
|
<li><a href="#string_generator_string_generator">string_generator</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#namespaces"><boost/uuid/namespaces.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#namespaces_synopsis">Synopsis</a></li>
|
|
<li><a href="#namespaces_namespaces">Namespaces</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#name_generator_sha1"><boost/uuid/​name_generator_sha1.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#name_generator_sha1_synopsis">Synopsis</a></li>
|
|
<li><a href="#name_generator_sha1_name_generator_sha1">name_generator_sha1</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#name_generator_md5"><boost/uuid/​name_generator_md5.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#name_generator_md5_synopsis">Synopsis</a></li>
|
|
<li><a href="#name_generator_md5_name_generator_md5">name_generator_md5</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#name_generator"><boost/uuid/name_generator.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#name_generator_synopsis">Synopsis</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#basic_random_generator"><boost/uuid/​basic_random_generator.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#basic_random_generator_synopsis">Synopsis</a></li>
|
|
<li><a href="#basic_random_generator_basic_random_generator">basic_random_generator</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#random_generator"><boost/uuid/​random_generator.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#random_generator_synopsis">Synopsis</a></li>
|
|
<li><a href="#random_generator_random_generator">random_generator</a></li>
|
|
<li><a href="#random_generator_random_generator_mt19937">random_generator_mt19937</a></li>
|
|
<li><a href="#random_generator_random_generator_pure">random_generator_pure</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#uuid_clock"><boost/uuid/uuid_clock.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#uuid_clock_synopsis">Synopsis</a></li>
|
|
<li><a href="#uuid_clock_now">now</a></li>
|
|
<li><a href="#uuid_clock_from_sys">from_sys</a></li>
|
|
<li><a href="#uuid_clock_to_sys">to_sys</a></li>
|
|
<li><a href="#uuid_clock_from_timestamp">from_timestamp</a></li>
|
|
<li><a href="#uuid_clock_to_timestamp">to_timestamp</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#time_generator_v1"><boost/uuid/​time_generator_v1.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#time_generator_v1_synopsis">Synopsis</a></li>
|
|
<li><a href="#time_generator_v1_constructors">Constructors</a></li>
|
|
<li><a href="#time_generator_v1_operator">operator()</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#time_generator_v6"><boost/uuid/​time_generator_v6.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#time_generator_v6_synopsis">Synopsis</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#time_generator_v7"><boost/uuid/​time_generator_v7.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#time_generator_v7_synopsis">Synopsis</a></li>
|
|
<li><a href="#time_generator_v7_constructors">Constructors</a></li>
|
|
<li><a href="#time_generator_v7_assignment">Assignment</a></li>
|
|
<li><a href="#time_generator_v7_operator">operator()</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#time_generator"><boost/uuid/time_generator.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#time_generator_synopsis">Synopsis</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#constants"><boost/uuid/constants.hpp></a>
|
|
<ul class="sectlevel3">
|
|
<li><a href="#constants_synopsis">Synopsis</a></li>
|
|
<li><a href="#constants_constants">Constants</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#design_notes">Design Notes</a></li>
|
|
<li><a href="#acknowledgements">Acknowledgements</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#copyright">Copyright and License</a></li>
|
|
<li><a href="#history">Old Revision History</a>
|
|
<ul class="sectlevel2">
|
|
<li><a href="#history_boostuuiduuid_hpp">boost/uuid/uuid.hpp</a></li>
|
|
<li><a href="#history_boostuuiduuid_io_hpp">boost/uuid/uuid_io.hpp</a></li>
|
|
<li><a href="#history_boostuuiddetailsha1_hpp">boost/uuid/detail/sha1.hpp</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div id="content">
|
|
<div class="sect1">
|
|
<h2 id="introduction"><a class="link" href="#introduction">Introduction</a></h2>
|
|
<div class="sectionbody">
|
|
<div class="paragraph">
|
|
<p>A UUID, or universally unique identifier, is intended to uniquely identify information in a distributed environment without significant central coordination.
|
|
It can be used to tag objects with very short lifetimes, or to reliably identify very persistent objects across a network.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>A formal definition for UUID can be found in <a href="https://datatracker.ietf.org/doc/rfc4122/">RFC 4122</a> and <a href="https://datatracker.ietf.org/doc/rfc9562/">RFC 9562</a>.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>UUIDs have many applications.
|
|
Some examples follow: Databases may use UUIDs to identify rows or records in order to ensure that they are unique across different databases, or for publication/subscription services.
|
|
Network messages may be identified with a UUID to ensure that different parts of a message are put back together again.
|
|
Distributed computing may use UUIDs to identify a remote procedure call.
|
|
Transactions and classes involved in serialization may be identified by UUIDs.
|
|
Microsoft’s component object model (COM) uses UUIDs to distinguish different software component interfaces.
|
|
UUIDs are inserted into documents from Microsoft Office programs.
|
|
UUIDs identify audio or video streams in the Advanced Systems Format (ASF).
|
|
UUIDs are also a basis for OIDs (object identifiers), and URNs (uniform resource name).</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>An attractive feature of UUIDs when compared to alternatives is their relative small size, of 128 bits, or 16 bytes.
|
|
Another is that the creation of UUIDs does not require a centralized authority.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>When UUIDs are generated by one of the defined mechanisms, they are either guaranteed to be unique, different from all other generated UUIDs
|
|
(that is, it has never been generated before and it will never be generated again), or it is extremely likely to be unique (depending on the mechanism).</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect1">
|
|
<h2 id="changes"><a class="link" href="#changes">Revision History</a></h2>
|
|
<div class="sectionbody">
|
|
<div class="sect2">
|
|
<h3 id="changes_changes_in_boost_1_91_0"><a class="link" href="#changes_changes_in_boost_1_91_0">Changes in Boost 1.91.0</a></h3>
|
|
<div class="ulist">
|
|
<ul>
|
|
<li>
|
|
<p>Added <code>from_chars</code> to <code>boost/uuid/uuid_io.hpp</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added a <code>noexcept</code> <code>operator()</code> overload to <code>string_generator</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>string_generator</code> now supports the Unicode character types in addition to <code>char</code> and <code>wchar_t</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Most <code>uuid</code> accessors, operations, and <code>to_chars</code> are now <code>constexpr</code> when possible (on C++14 and higher and on recent compilers).</p>
|
|
</li>
|
|
<li>
|
|
<p>Added SIMD implementation of <code>to_chars</code>, which can offer up to 5.5x performance improvement in UUID formatting. (Andrey Semashev)</p>
|
|
</li>
|
|
<li>
|
|
<p>Added SIMD implementation of <code>from_chars</code>, which can offer up to 13x performance improvement in UUID parsing. (Andrey Semashev)</p>
|
|
</li>
|
|
<li>
|
|
<p>Added <code>uuid_from_string</code> to <code>boost/uuid/uuid_io.hpp</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added a dedicated <code>invalid_uuid</code> exception class, derived from <code>std::runtime_error</code> for backward compatibility.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="changes_changes_in_boost_1_90_0"><a class="link" href="#changes_changes_in_boost_1_90_0">Changes in Boost 1.90.0</a></h3>
|
|
<div class="ulist">
|
|
<ul>
|
|
<li>
|
|
<p><code>string_generator</code> is now <code>constexpr</code> on C++14 and higher.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added header <code>boost/uuid/constants.hpp</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Renamed <code>boost/uuid/uuid_generators.hpp</code> to <code>boost/uuid/generators.hpp</code>. The old name is retained for compatibility.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="changes_changes_in_boost_1_87_0"><a class="link" href="#changes_changes_in_boost_1_87_0">Changes in Boost 1.87.0</a></h3>
|
|
<div class="ulist">
|
|
<ul>
|
|
<li>
|
|
<p>Restored the ability to construct a <code>constexpr uuid</code> that was inadvertently lost in 1.86.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="changes_changes_in_boost_1_86_0_major_update"><a class="link" href="#changes_changes_in_boost_1_86_0_major_update">Changes in Boost 1.86.0 (<strong>major update</strong>)</a></h3>
|
|
<div class="ulist">
|
|
<ul>
|
|
<li>
|
|
<p>C++03 is no longer supported, a C++11 compiler is required.
|
|
This includes GCC 4.8 or later, MSVC 14.0 or later, and MinGW-w64.</p>
|
|
</li>
|
|
<li>
|
|
<p>Removed direct dependencies on Core, Io, Move, NumericConversion, StaticAssert, TTI, Random, ContainerHash.
|
|
The library now only has five Boost dependencies in total (as opposed to 39 in Boost 1.85.)</p>
|
|
</li>
|
|
<li>
|
|
<p>Moved <code>std::hash</code> support from <code>uuid_hash.hpp</code> to <code>uuid.hpp</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Moved serialization support from <code>uuid_serialize.hpp</code> to <code>uuid.hpp</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Improved the quality and speed of <code>hash_value</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added <code>operator<=></code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>The generic (non-SIMD) implementations of <code>is_nil</code>, <code>operator==</code>, <code>operator<</code>, <code>swap</code>, and <code>operator<=></code> now use <code>__uint128_t</code> operations when that type is available, and <code>uint64_t</code> operations otherwise.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added convenience header <code><boost/uuid.hpp></code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Removed platform-specific entropy providers; the implementation now uses <code>std::random_device</code> as the source of entropy.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>basic_random_generator</code> has been moved to its own header, <code>boost/uuid/basic_random_generator.hpp</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>basic_random_generator</code> has been changed to hold the underlying generator by value, to avoid dynamic allocation and restore copyability.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>random_generator_pure</code> is now an alias for <code>basic_random_generator<std::random_device></code> and its use is discouraged.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>random_generator_mt19937</code> is now an alias for <code>basic_random_generator<std::mt19937></code> and its use is discouraged.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>random_generator</code> now uses a cryptographically strong pseudorandom number generator (ChaCha20/12), seeded with entropy from <code>std::random_device</code>.
|
|
It’s the recommended way to generate version 4 UUIDs.</p>
|
|
</li>
|
|
<li>
|
|
<p>Since <code>basic_name_generator</code> had only two valid instantiations, both of which are already provided (<code>name_generator_md5</code> and <code>name_generator_sha1</code>),
|
|
it was made a private implementation detail and is no longer part of the public interface.</p>
|
|
</li>
|
|
<li>
|
|
<p>While <code>name_generator</code> and <code>name_generator_latest</code> are still provided for compatibility, their use is no longer encouraged.</p>
|
|
</li>
|
|
<li>
|
|
<p>The name generators now accept Unicode strings; these are converted to UTF-8 before hashing.</p>
|
|
</li>
|
|
<li>
|
|
<p>The definitions of the well-known RFC 4122 namespaces have been moved to their own header, <code>boost/uuid/namespaces.hpp</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added <code>time_generator_v1</code>, a generator that produces version 1 time-based UUIDs.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added <code>time_generator_v6</code>, a generator that produces version 6 time-based UUIDs.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added <code>time_generator_v7</code>, a generator that produces version 7 time-based UUIDs.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added <code>uuid_clock</code>, a <code><chrono></code>-compatible clock with an epoch and a resolution as specified in RFC 4122.</p>
|
|
</li>
|
|
<li>
|
|
<p>Accessors for the timestamp, the time point, the clock sequence, and the node identifier have been added to <code>uuid</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Improved the <code>what()</code> strings of the <code>std::runtime_error</code> exceptions thrown by <code>string_generator</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Added overloads of <code>to_chars</code> taking <code>Ch* first, Ch* last</code> and <code>Ch(&)[N]</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>The default constructor of <code>uuid</code> now produces a nil UUID instead of an uninitialized one.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>u.data()</code>, where <code>u</code> is of type <code>uuid</code>, now returns a pointer to the first <code>uint8_t</code> of the representation (same as <code>u.begin()</code>.)
|
|
For backward compatibility, <code>data</code> is a function object with <code>operator()</code>, rather than a member function, which allows most existing uses of <code>data</code> as a public member to remain valid, if no longer encouraged.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>uuid</code> now has the same alignment as <code>std::uint64_t</code>. It was previously unaligned (had alignment of 1, same as <code>std::uint8_t</code>.) To restore the 1.85 behavior, define the macro <code>BOOST_UUID_DISABLE_ALIGNMENT</code>.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect1">
|
|
<h2 id="configuration"><a class="link" href="#configuration">Configuration</a></h2>
|
|
<div class="sectionbody">
|
|
<div class="paragraph">
|
|
<p>The library does not require building or any special configuration to be used.
|
|
However, there are a few options that can be enabled by defining macros prior to including library headers.</p>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="configuration_instruction_set"><a class="link" href="#configuration_instruction_set">Instruction Set</a></h3>
|
|
<table class="tableblock frame-all grid-all fit-content">
|
|
<colgroup>
|
|
<col>
|
|
<col>
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th class="tableblock halign-left valign-top">Macro</th>
|
|
<th class="tableblock halign-left valign-top">Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_NO_SIMD</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, disables any optimizations for <a href="https://en.wikipedia.org/wiki/SIMD">SIMD</a>-enabled processors.
|
|
Generic versions of algorithms will be used instead.
|
|
This may result in suboptimal performance.
|
|
By default, optimized algorithms are used, when the library is able to detect the availability of SIMD extensions at compile time.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSE2</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSE2">SSE2</a> extensions available in x86 processors.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSE3</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSE3">SSE3</a> extensions available in x86 processors.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSSE3</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSSE3">SSSE3</a> extensions available in x86 processors.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_SSE41</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/SSE4#SSE4.1">SSE4.1</a> extensions available in x86 processors.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions">AVX</a> extensions available in x86 processors.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX2</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2">AVX2</a> extensions available in x86 processors.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX512_V1</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/AVX-512">AVX-512</a> F, VL, CD, BW and DQ extensions available in x86 processors (e.g. in Intel Skylake-X).</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_USE_AVX10_1</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, enables optimizations for <a href="https://en.wikipedia.org/wiki/AVX-512">AVX-512</a> and <a href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#AVX10">AVX10.1</a> extensions available in x86 processors.
|
|
When defined by the user, this macro indicates support for the full set of instructions defined in AVX10.1.
|
|
When auto-detected by the library, this macro may be defined even when not all AVX10.1 subsets are enabled, but rather when the detected subset is sufficient for the library.</p></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="paragraph">
|
|
<p>By default the library attempts to detect the availability of SIMD extensions in the target CPU at compile time and automatically defines the appropriate macros if succeeded.
|
|
The <code>BOOST_UUID_USE_SSE*</code> and <code>BOOST_UUID_USE_AVX*</code> macros can be defined by users, if auto-detection fails and it is known that the target CPU will have the extension.
|
|
Do not enable these extensions unless you’re certain that they will always be available on any machine that will run your program.
|
|
The library performs no run time checks, so if an extension is missing, the program will likely crash.
|
|
Note that enabling more advanced extensions implies that more basic ones are also available.</p>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="configuration_alignment"><a class="link" href="#configuration_alignment">Alignment</a></h3>
|
|
<table class="tableblock frame-all grid-all fit-content">
|
|
<colgroup>
|
|
<col>
|
|
<col>
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th class="tableblock halign-left valign-top">Macro</th>
|
|
<th class="tableblock halign-left valign-top">Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>BOOST_UUID_DISABLE_ALIGNMENT</code></p></td>
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">If defined, leaves <code>uuid</code> unaligned (alignment of 1, same as <code>std::uint8_t</code>). This was the behavior before release 1.86.</p></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="paragraph">
|
|
<p>By default, <code>uuid</code> has the same alignment as <code>std::uint64_t</code>. Define <code>BOOST_UUID_DISABLE_ALIGNMENT</code> to leave it unaligned.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect1">
|
|
<h2 id="examples"><a class="link" href="#examples">Examples</a></h2>
|
|
<div class="sectionbody">
|
|
<div class="sect2">
|
|
<h3 id="examples_tagging"><a class="link" href="#examples_tagging">Tagging</a></h3>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// example of tagging an object with a uuid</span>
|
|
<span class="c1">// see boost/libs/uuid/test/test_tagging.cpp</span>
|
|
|
|
<span class="cp">#include</span> <span class="cpf"><boost/uuid/uuid.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/generators.hpp></span><span class="cp">
|
|
</span>
|
|
<span class="k">class</span> <span class="nc">object</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">public:</span>
|
|
<span class="n">object</span><span class="p">()</span>
|
|
<span class="o">:</span> <span class="n">tag</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">random_generator</span><span class="p">()())</span>
|
|
<span class="p">,</span> <span class="n">state</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="p">{}</span>
|
|
|
|
<span class="k">explicit</span> <span class="nf">object</span><span class="p">(</span><span class="kt">int</span> <span class="n">state</span><span class="p">)</span>
|
|
<span class="o">:</span> <span class="n">tag</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">random_generator</span><span class="p">()())</span>
|
|
<span class="p">,</span> <span class="n">state</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
|
|
<span class="p">{}</span>
|
|
|
|
<span class="n">object</span><span class="p">(</span><span class="n">object</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span><span class="p">)</span>
|
|
<span class="o">:</span> <span class="n">tag</span><span class="p">(</span><span class="n">rhs</span><span class="p">.</span><span class="n">tag</span><span class="p">)</span>
|
|
<span class="p">,</span> <span class="n">state</span><span class="p">(</span><span class="n">rhs</span><span class="p">.</span><span class="n">state</span><span class="p">)</span>
|
|
<span class="p">{}</span>
|
|
|
|
<span class="kt">bool</span> <span class="k">operator</span><span class="o">==</span><span class="p">(</span><span class="n">object</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span><span class="p">)</span> <span class="k">const</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="n">tag</span> <span class="o">==</span> <span class="n">rhs</span><span class="p">.</span><span class="n">tag</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="n">object</span><span class="o">&</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span><span class="n">object</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="n">tag</span> <span class="o">=</span> <span class="n">rhs</span><span class="p">.</span><span class="n">tag</span><span class="p">;</span>
|
|
<span class="n">state</span> <span class="o">=</span> <span class="n">rhs</span><span class="p">.</span><span class="n">state</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="kt">int</span> <span class="n">get_state</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">state</span><span class="p">;</span> <span class="p">}</span>
|
|
<span class="kt">void</span> <span class="nf">set_state</span><span class="p">(</span><span class="kt">int</span> <span class="n">new_state</span><span class="p">)</span> <span class="p">{</span> <span class="n">state</span> <span class="o">=</span> <span class="n">new_state</span><span class="p">;</span> <span class="p">}</span>
|
|
|
|
<span class="k">private</span><span class="o">:</span>
|
|
<span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="n">tag</span><span class="p">;</span>
|
|
|
|
<span class="kt">int</span> <span class="n">state</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="n">object</span> <span class="nf">o1</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
|
|
<span class="n">object</span> <span class="n">o2</span> <span class="o">=</span> <span class="n">o1</span><span class="p">;</span>
|
|
<span class="n">o2</span><span class="p">.</span><span class="n">set_state</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
|
|
<span class="n">assert</span><span class="p">(</span><span class="n">o1</span> <span class="o">==</span> <span class="n">o2</span><span class="p">);</span>
|
|
|
|
<span class="n">object</span> <span class="nf">o3</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
|
|
<span class="n">assert</span><span class="p">(</span><span class="n">o1</span> <span class="o">!=</span> <span class="n">o3</span><span class="p">);</span>
|
|
<span class="n">assert</span><span class="p">(</span><span class="n">o2</span> <span class="o">!=</span> <span class="n">o3</span><span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="examples_byte_extraction"><a class="link" href="#examples_byte_extraction">Byte Extraction</a></h3>
|
|
<div class="paragraph">
|
|
<p>It is sometimes useful to get at the 16 bytes of a <code>uuid</code> directly. Typical use is as follows:</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="n">u</span><span class="p">;</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">></span> <span class="n">v</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">copy</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">u</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">());</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Note: <code>boost::uuids::uuid::size()</code> always returns 16.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect1">
|
|
<h2 id="reference"><a class="link" href="#reference">Reference</a></h2>
|
|
<div class="sectionbody">
|
|
<div class="sect2">
|
|
<h3 id="uuid_all"><a class="link" href="#uuid_all"><boost/uuid.hpp></a></h3>
|
|
<div class="paragraph">
|
|
<p>This convenience header makes the entire library available.</p>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_all_synopsis"><a class="link" href="#uuid_all_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/uuid.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/uuid_io.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/generators.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/constants.hpp></span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="uuid"><a class="link" href="#uuid"><boost/uuid/uuid.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="uuid_synopsis"><a class="link" href="#uuid_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">uuid</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">private:</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="n">data_</span><span class="p">[</span> <span class="mi">16</span> <span class="p">]</span> <span class="o">=</span> <span class="p">{};</span> <span class="c1">// exposition only</span>
|
|
|
|
<span class="k">public</span><span class="o">:</span>
|
|
|
|
<span class="c1">// constructors</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">uuid</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="nf">uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span> <span class="p">(</span><span class="o">&</span><span class="n">r</span><span class="p">)[</span> <span class="mi">16</span> <span class="p">]</span> <span class="p">);</span>
|
|
|
|
<span class="c1">// iteration</span>
|
|
|
|
<span class="k">using</span> <span class="n">value_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="p">;</span>
|
|
|
|
<span class="k">using</span> <span class="n">reference</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">&</span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">const_reference</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">&</span><span class="p">;</span>
|
|
|
|
<span class="k">using</span> <span class="n">iterator</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">*</span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">const_iterator</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">*</span><span class="p">;</span>
|
|
|
|
<span class="k">using</span> <span class="n">size_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">difference_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// data</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// size</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">size</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">static</span> <span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">static_size</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// is_nil</span>
|
|
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">is_nil</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// variant</span>
|
|
|
|
<span class="k">enum</span> <span class="n">variant_type</span>
|
|
<span class="p">{</span>
|
|
<span class="n">variant_ncs</span><span class="p">,</span> <span class="c1">// NCS backward compatibility</span>
|
|
<span class="n">variant_rfc_4122</span><span class="p">,</span> <span class="c1">// defined in RFC 4122 document</span>
|
|
<span class="n">variant_microsoft</span><span class="p">,</span> <span class="c1">// Microsoft Corporation backward compatibility</span>
|
|
<span class="n">variant_future</span> <span class="c1">// future definition</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">variant_type</span> <span class="n">variant</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// version</span>
|
|
|
|
<span class="k">enum</span> <span class="n">version_type</span>
|
|
<span class="p">{</span>
|
|
<span class="n">version_unknown</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
|
|
<span class="n">version_time_based</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
|
|
<span class="n">version_dce_security</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
|
|
<span class="n">version_name_based_md5</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
|
|
<span class="n">version_random_number_based</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span>
|
|
<span class="n">version_name_based_sha1</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span>
|
|
<span class="n">version_time_based_v6</span> <span class="o">=</span> <span class="mi">6</span><span class="p">,</span>
|
|
<span class="n">version_time_based_v7</span> <span class="o">=</span> <span class="mi">7</span><span class="p">,</span>
|
|
<span class="n">version_custom_v8</span> <span class="o">=</span> <span class="mi">8</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">version_type</span> <span class="n">version</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// time-based fields</span>
|
|
|
|
<span class="k">using</span> <span class="n">timestamp_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">clock_seq_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint16_t</span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">node_type</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">array</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="p">,</span> <span class="mi">6</span><span class="o">></span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="o">></span>
|
|
<span class="n">time_point_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">clock_seq_type</span> <span class="n">clock_seq</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="n">node_type</span> <span class="n">node_identifier</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// swap</span>
|
|
|
|
<span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="c1">// operators</span>
|
|
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">==</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">!=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o"><</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">></span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o"><=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">>=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="n">strong_ordering</span> <span class="k">operator</span><span class="o"><=></span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// free swap</span>
|
|
|
|
<span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// hash_value</span>
|
|
|
|
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">hash_value</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span>
|
|
|
|
<span class="c1">// Boost.Serialization support</span>
|
|
|
|
<span class="n">BOOST_CLASS_IMPLEMENTATION</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="n">boost</span><span class="o">::</span><span class="n">serialization</span><span class="o">::</span><span class="n">primitive_type</span><span class="p">)</span>
|
|
|
|
<span class="c1">// std::hash support</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="p">></span> <span class="k">struct</span> <span class="nc">std</span><span class="o">::</span><span class="n">hash</span><span class="o"><</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="o">></span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_constructors"><a class="link" href="#uuid_constructors">Constructors</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">uuid</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Zero-initializes <code>data_</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Postconditions: </dt>
|
|
<dd>
|
|
<p><code>is_nil()</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="nf">uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span> <span class="p">(</span><span class="o">&</span><span class="n">r</span><span class="p">)[</span> <span class="mi">16</span> <span class="p">]</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Initializes the elements of <code>data_</code> from the corresponding elements of <code>r</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This constructor is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">dns</span> <span class="o">=</span> <span class="p">{{</span> <span class="mh">0x6b</span><span class="p">,</span> <span class="mh">0xa7</span><span class="p">,</span> <span class="mh">0xb8</span><span class="p">,</span> <span class="mh">0x10</span><span class="p">,</span> <span class="mh">0x9d</span><span class="p">,</span> <span class="mh">0xad</span><span class="p">,</span> <span class="mh">0x11</span><span class="p">,</span> <span class="mh">0xd1</span><span class="p">,</span> <span class="mh">0x80</span><span class="p">,</span> <span class="mh">0xb4</span><span class="p">,</span> <span class="mh">0x00</span><span class="p">,</span> <span class="mh">0xc0</span><span class="p">,</span> <span class="mh">0x4f</span><span class="p">,</span> <span class="mh">0xd4</span><span class="p">,</span> <span class="mh">0x30</span><span class="p">,</span> <span class="mh">0xc8</span> <span class="p">}};</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_iteration"><a class="link" href="#uuid_iteration">Iteration</a></h4>
|
|
<div class="paragraph">
|
|
<p>Both constant and mutable iterators are provided.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">begin</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>data()</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
The non-const overload is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">const_iterator</span> <span class="n">end</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>data() + size()</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
The non-const overload is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span><span class="p">;</span>
|
|
|
|
<span class="k">for</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">const_iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">u</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">it</span> <span class="o">!=</span> <span class="n">u</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">it</span> <span class="p">)</span>
|
|
<span class="p">{</span>
|
|
<span class="n">uuid</span><span class="o">::</span><span class="n">value_type</span> <span class="n">v</span> <span class="o">=</span> <span class="o">*</span><span class="n">it</span><span class="p">;</span>
|
|
<span class="c1">// do something with the octet v</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="k">for</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">u</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">it</span> <span class="o">!=</span> <span class="n">u</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">it</span> <span class="p">)</span>
|
|
<span class="p">{</span>
|
|
<span class="o">*</span><span class="n">it</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
|
|
<span class="p">}</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_data"><a class="link" href="#uuid_data">Data</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint8_t</span> <span class="k">const</span><span class="o">*</span> <span class="n">data</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>data_</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
The non-const overload is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_size"><a class="link" href="#uuid_size">Size</a></h4>
|
|
<div class="paragraph">
|
|
<p>The size of a <code>uuid</code> (in octets) is fixed at 16.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">size</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="k">constexpr</span> <span class="n">size_type</span> <span class="n">static_size</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>16</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span><span class="p">;</span>
|
|
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">16</span> <span class="p">);</span>
|
|
<span class="k">static_assert</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">static_size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">16</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_is_nil"><a class="link" href="#uuid_is_nil">is_nil</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">is_nil</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>true</code> when the <code>uuid</code> is equal to the nil UUID, <code>{00000000-0000-0000-0000-000000000000}</code>, otherwise <code>false</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_variant"><a class="link" href="#uuid_variant">Variant</a></h4>
|
|
<div class="paragraph">
|
|
<p>Three bits of a <code>uuid</code> determine the variant.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">variant_type</span> <span class="n">variant</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The UUID variant; usually <code>variant_rfc_4122</code> for non-nil UUIDs.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_version"><a class="link" href="#uuid_version">Version</a></h4>
|
|
<div class="paragraph">
|
|
<p>Four bits of a <code>uuid</code> determine the version, that is the mechanism used to generate the <code>uuid</code>.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">version_type</span> <span class="n">version</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The UUID version.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_time_based_fields"><a class="link" href="#uuid_time_based_fields">Time-based Fields</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The UUIDv1 timestamp (number of 100ns intervals since 00:00:00.00, 15 October 1582).
|
|
The value is only meaningful for version 1 UUIDs.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v1</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The timestamp of a version 1 UUID, expressed as a <code><chrono></code> <code>time_point</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The UUIDv6 timestamp (number of 100ns intervals since 00:00:00.00, 15 October 1582).
|
|
The value is only meaningful for version 6 UUIDs.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid_clock</span><span class="o">::</span><span class="n">time_point</span> <span class="n">time_point_v6</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The timestamp of a version 6 UUID, expressed as a <code><chrono></code> <code>time_point</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">timestamp_type</span> <span class="n">timestamp_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The UUIDv7 timestamp (number of milliseconds since the Unix epoch - midnight 1 Jan 1970 UTC).
|
|
The value is only meaningful for version 7 UUIDs.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">milliseconds</span><span class="o">></span>
|
|
<span class="n">time_point_v7</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The timestamp of a version 7 UUID, expressed as a <code><chrono></code> <code>time_point</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">clock_seq_type</span> <span class="n">clock_seq</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The clock sequence of a time-based UUID.
|
|
The value is only meaningful for time-based UUIDs (version 1 and version 6).</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">node_type</span> <span class="n">node_identifier</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The node identifier of a time-based UUID.
|
|
The value is only meaningful for time-based UUIDs (version 1 and version 6).</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_swap"><a class="link" href="#uuid_swap">Swap</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Exchanges the values of <code>*this</code> and <code>rhs</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_operators"><a class="link" href="#uuid_operators">Operators</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">==</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>As if <code>std::memcmp( lhs.data(), rhs.data(), 16 ) == 0</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">!=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>!(lhs == rhs)</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o"><</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>As if <code>std::memcmp( lhs.data(), rhs.data(), 16 ) < 0</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">></span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>rhs < lhs</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o"><=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>!(rhs < lhs)</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">bool</span> <span class="k">operator</span><span class="o">>=</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>!(lhs < rhs)</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="n">strong_ordering</span> <span class="k">operator</span><span class="o"><=></span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>As if <code>std::memcmp( lhs.data(), rhs.data(), 16 ) <=> 0</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_free_swap"><a class="link" href="#uuid_free_swap">Free Swap</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="kt">void</span> <span class="n">swap</span><span class="p">(</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p><code>lhs.swap( rhs );</code></p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_hash_value"><a class="link" href="#uuid_hash_value">hash_value</a></h4>
|
|
<div class="paragraph">
|
|
<p>This function allows instances of <code>uuid</code> to be used with <a href="https://www.boost.org/doc/libs/release/libs/container_hash/doc/html/hash.html#ref_boostcontainer_hashhash_hpp">boost::hash</a>.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">hash_value</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The hash value of the <code>uuid</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">boost</span><span class="o">::</span><span class="n">unordered_flat_map</span><span class="o"><</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">hash_map</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_serialization"><a class="link" href="#uuid_serialization">Serialization</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">BOOST_CLASS_IMPLEMENTATION</span><span class="p">(</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="n">boost</span><span class="o">::</span><span class="n">serialization</span><span class="o">::</span><span class="n">primitive_type</span><span class="p">)</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p><code>uuid</code> is serialized as a primitive type, that is, by its string representation.</p>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_stdhash"><a class="link" href="#uuid_stdhash">std::hash</a></h4>
|
|
<div class="paragraph">
|
|
<p>This specialization allows instances of <code>uuid</code> to be used with <code>std::hash</code>.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="p">></span> <span class="k">struct</span> <span class="nc">std</span><span class="o">::</span><span class="n">hash</span><span class="o"><</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="o">></span>
|
|
<span class="p">{</span>
|
|
<span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">v</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">}</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">v</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>boost::uuids::hash_value( v )</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">unordered_map</span><span class="o"><</span><span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="o">::</span><span class="n">uuid</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">hash_map</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="uuid_io"><a class="link" href="#uuid_io"><boost/uuid/uuid_io.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_synopsis"><a class="link" href="#uuid_io_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="c1">// stream insertion</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">></span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span>
|
|
<span class="k">operator</span><span class="o"><<</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span> <span class="n">os</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span>
|
|
|
|
<span class="c1">// stream extraction</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">></span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span>
|
|
<span class="k">operator</span><span class="o">>></span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span> <span class="n">is</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span>
|
|
|
|
<span class="c1">// to_chars</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">OutputIterator</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">OutputIterator</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">OutputIterator</span> <span class="n">out</span> <span class="p">);</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">last</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">N</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span> <span class="p">(</span><span class="o">&</span><span class="n">buffer</span><span class="p">)[</span> <span class="n">N</span> <span class="p">]</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// to_string</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">to_string</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="n">to_wstring</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span>
|
|
|
|
<span class="c1">// from_chars</span>
|
|
|
|
<span class="k">enum</span> <span class="k">class</span> <span class="nc">from_chars_error</span>
|
|
<span class="p">{</span>
|
|
<span class="n">none</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
|
|
|
|
<span class="n">unexpected_end_of_input</span><span class="p">,</span>
|
|
<span class="n">hex_digit_expected</span><span class="p">,</span>
|
|
<span class="n">dash_expected</span><span class="p">,</span>
|
|
<span class="n">closing_brace_expected</span><span class="p">,</span>
|
|
<span class="n">unexpected_extra_input</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span> <span class="k">struct</span> <span class="nc">from_chars_result</span>
|
|
<span class="p">{</span>
|
|
<span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">ptr</span><span class="p">;</span>
|
|
<span class="n">from_chars_error</span> <span class="n">ec</span><span class="p">;</span>
|
|
|
|
<span class="k">constexpr</span> <span class="k">explicit</span> <span class="k">operator</span> <span class="kt">bool</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">from_chars_result</span><span class="o"><</span><span class="n">Ch</span><span class="o">></span>
|
|
<span class="n">from_chars</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">last</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="c1">// uuid_from_string</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">str</span> <span class="p">);</span>
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Str</span><span class="p">></span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&</span> <span class="n">str</span> <span class="p">);</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_stream_insertion"><a class="link" href="#uuid_io_stream_insertion">Stream Insertion</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">></span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span>
|
|
<span class="k">operator</span><span class="o"><<</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_ostream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span> <span class="n">os</span><span class="p">,</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Inserts the string representation of <code>u</code> into the output stream <code>os</code>.</p>
|
|
<div class="paragraph">
|
|
<p>The string representation of a <code>uuid</code> is <code>hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh</code>, where <code>h</code> is a lowercase hexadecimal digit.</p>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This operator also enables the use of
|
|
<a href="https://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast/synopsis.html">boost::lexical_cast</a>
|
|
to convert a <code>uuid</code> to a string.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">u1</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">boost</span><span class="o">::</span><span class="n">lexical_cast</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span> <span class="n">u1</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">s1</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_stream_extraction"><a class="link" href="#uuid_io_stream_extraction">Stream Extraction</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">></span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span>
|
|
<span class="k">operator</span><span class="o">>></span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_istream</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="o">>&</span> <span class="n">is</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses a <code>uuid</code> string representation from <code>is</code> and stores the result into <code>u</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This operator also enables the use of
|
|
<a href="https://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast/synopsis.html">boost::lexical_cast</a>
|
|
to convert a string to a <code>uuid</code>.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">stringstream</span> <span class="n">ss</span><span class="p">;</span>
|
|
<span class="n">ss</span> <span class="o"><<</span> <span class="n">u1</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">boost</span><span class="o">::</span><span class="n">lexical_cast</span><span class="o"><</span><span class="n">uuid</span><span class="o">></span><span class="p">(</span> <span class="n">ss</span><span class="p">.</span><span class="n">str</span><span class="p">()</span> <span class="p">);</span>
|
|
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">u1</span> <span class="o">==</span> <span class="n">u2</span> <span class="p">);</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u3</span><span class="p">;</span>
|
|
<span class="n">ss</span> <span class="o">>></span> <span class="n">u3</span><span class="p">;</span>
|
|
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">u1</span> <span class="o">==</span> <span class="n">u3</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_to_chars"><a class="link" href="#uuid_io_to_chars">to_chars</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">OutputIterator</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">OutputIterator</span> <span class="nf">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">OutputIterator</span> <span class="n">out</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Outputs the string representation of <code>u</code> (exactly 36 characters of type <code>char</code>) to the output iterator <code>out</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="n">v</span><span class="p">;</span>
|
|
|
|
<span class="n">to_chars</span><span class="p">(</span> <span class="n">u</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">back_inserter</span><span class="p">(</span> <span class="n">v</span> <span class="p">)</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">last</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>If <code>last - first >= 36</code>, writes the string representation of <code>u</code> (exactly 36 characters, not null terminated) into the buffer starting at <code>first</code> and returns <code>true</code>. Otherwise, returns <code>false</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
|
|
|
|
<span class="kt">char</span> <span class="n">buf</span><span class="p">[</span> <span class="mi">36</span> <span class="p">];</span>
|
|
|
|
<span class="kt">bool</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">u</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">begin</span><span class="p">(</span> <span class="n">buf</span> <span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">end</span><span class="p">(</span> <span class="n">buf</span> <span class="p">)</span> <span class="p">);</span>
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">ret</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span> <span class="n">buf</span><span class="p">,</span> <span class="mi">36</span> <span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">N</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">Ch</span><span class="o">*</span> <span class="n">to_chars</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">Ch</span> <span class="p">(</span><span class="o">&</span><span class="n">buffer</span><span class="p">)[</span> <span class="n">N</span> <span class="p">]</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>); <code>N</code> must be at least 37.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Writes the string representation of <code>u</code> (exactly 37 characters, including the null terminator) into <code>buffer</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>buffer + 36</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
This function is only <code>constexpr</code> under C++14 or later, and under GCC 9 or later, Clang 9 or later, or MSVC 14.25 or later.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
|
|
|
|
<span class="kt">char</span> <span class="n">buf</span><span class="p">[</span> <span class="mi">37</span> <span class="p">];</span>
|
|
|
|
<span class="n">to_chars</span><span class="p">(</span> <span class="n">u</span><span class="p">,</span> <span class="n">buf</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">buf</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
As a special exception, <code>N</code> is allowed to be 36.
|
|
In this case, the function writes exactly 36 characters into <code>buffer</code> and does not write a null terminator.
|
|
This use is only supported for backward compatibility and is deprecated.
|
|
Use a buffer of 37 characters instead, to allow for the null terminator.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_to_string"><a class="link" href="#uuid_io_to_string">to_string</a></h4>
|
|
<div class="paragraph">
|
|
<p>The functions <code>to_string</code> and <code>to_wstring</code> are provided as a convenience to convert a <code>uuid</code> to a string.
|
|
They are likely to be more efficient than <a href="https://www.boost.org/doc/libs/release/doc/html/boost_lexical_cast/synopsis.html">boost::lexical_cast</a>.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="nf">to_string</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="nf">to_wstring</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">u</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>A string containing the string representation of <code>u</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">random_generator</span><span class="p">()();</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">to_string</span><span class="p">(</span> <span class="n">u</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="n">s2</span> <span class="o">=</span> <span class="n">to_wstring</span><span class="p">(</span> <span class="n">u</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_from_chars_result"><a class="link" href="#uuid_io_from_chars_result">from_chars_result</a></h4>
|
|
<div class="paragraph">
|
|
<p>The <code>from_chars_result</code> structure contains the result of a <code>from_chars</code> call, where the <code>ptr</code> member points to the first character that was
|
|
not consumed during parsing and <code>ec</code> is <code>from_chars_error::none</code>, if parsing succeeded, otherwise the error code returned by the parser.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">constexpr</span> <span class="k">explicit</span> <span class="k">operator</span> <span class="kt">bool</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>this->ec == from_chars_error::none</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_from_chars"><a class="link" href="#uuid_io_from_chars">from_chars</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">from_chars_result</span><span class="o"><</span><span class="n">Ch</span><span class="o">></span>
|
|
<span class="n">from_chars</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">last</span><span class="p">,</span> <span class="n">uuid</span><span class="o">&</span> <span class="n">u</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses a <code>uuid</code> string representation from the characters in the range <code>[first, last)</code> and stores the result in <code>u</code>.
|
|
On error, the returned <code>from_chars_result</code> struct contains the error code in <code>ec</code> and <code>ptr</code> points to the character at which parsing failed.
|
|
On success, <code>ec</code> contains <code>from_chars_error::none</code> and <code>ptr</code> points to the character immediately after the last <code>uuid</code> character.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
The values <code>from_chars_error::closing_brace_expected</code> and <code>from_chars_error::unexpected_extra_input</code> are never returned by <code>from_chars</code>.
|
|
They can be returned from the nonthrowing <code>string_generator::operator()</code> overload.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_io_uuid_from_string"><a class="link" href="#uuid_io_uuid_from_string">uuid_from_string</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">str</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses a <code>uuid</code> string representation from the characters in the range <code>[str, str + std::char_traits<Ch>::length(str))</code> and stores the result in <code>u</code>.
|
|
On error, throws <code>invalid_uuid</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
Unlike <code>from_chars</code>, this function does not allow extra input; if after a complete UUID is parsed, unconsumed characters remain, an exception is thrown.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Str</span><span class="p">></span> <span class="k">constexpr</span> <span class="n">uuid</span> <span class="nf">uuid_from_string</span><span class="p">(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&</span> <span class="n">str</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Str</code> must be a <em>string-like</em> type; that is, one with a nested <code>value_type</code> type (<code>Ch</code>) and with a nested <code>traits_type</code> type.
|
|
<code>str.data()</code> must return <code>Ch const*</code>. <code>str.data() + str.size()</code> must be of type <code>Ch const*</code>.
|
|
<code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses a <code>uuid</code> string representation from the characters in the range <code>[str.data(), str.data() + str.size())</code> and stores the result in <code>u</code>.
|
|
On error, throws <code>invalid_uuid</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
Unlike <code>from_chars</code>, this function does not allow extra input; if after a complete UUID is parsed, unconsumed characters remain, an exception is thrown.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="invalid_uuid"><a class="link" href="#invalid_uuid"><boost/uuid/invalid_uuid.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="invalid_uuid_synopsis"><a class="link" href="#invalid_uuid_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">invalid_uuid</span><span class="o">:</span> <span class="k">public</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="n">invalid_uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span> <span class="n">err</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">position</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">from_chars_error</span> <span class="n">error</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="invalid_uuid_invalid_uuid"><a class="link" href="#invalid_uuid_invalid_uuid">invalid_uuid</a></h4>
|
|
<div class="paragraph">
|
|
<p>Functions that parse a string UUID representation throw an exception of type <code>invalid_uuid</code> to indicate failure.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">invalid_uuid</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span> <span class="n">err</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Constructs an <code>invalid_uuid</code> object, initializing its internal members to <code>pos</code> and <code>err</code> and the <code>runtime_error</code> base class with an appropriate error message.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Postconditions: </dt>
|
|
<dd>
|
|
<p><code>this->position() == pos && this->error() == err</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span> <span class="n">position</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The zero-based position in the input string at which parsing failed.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">from_chars_error</span> <span class="n">error</span><span class="p">()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The error code describing the reason parsing failed.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="generators"><a class="link" href="#generators"><boost/uuid/generators.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="generators_synopsis"><a class="link" href="#generators_synopsis">Synopsis</a></h4>
|
|
<div class="paragraph">
|
|
<p>This convenience header includes all the UUID generators.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/nil_generator.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/string_generator.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/name_generator.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/random_generator.hpp></span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="nil_generator"><a class="link" href="#nil_generator"><boost/uuid/nil_generator.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="nil_generator_synopsis"><a class="link" href="#nil_generator_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">struct</span> <span class="nc">nil_generator</span>
|
|
<span class="p">{</span>
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="nil_generator_nil_generator"><a class="link" href="#nil_generator_nil_generator">nil_generator</a></h4>
|
|
<div class="paragraph">
|
|
<p>The <code>nil_generator</code> class always generates a nil <code>uuid</code>.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>A nil UUID.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="n">nil_generator</span> <span class="n">gen</span><span class="p">;</span>
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span>
|
|
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">is_nil</span><span class="p">()</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="nil_generator_nil_uuid"><a class="link" href="#nil_generator_nil_uuid">nil_uuid</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>A nil UUID.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">nil_uuid</span><span class="p">();</span>
|
|
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">is_nil</span><span class="p">()</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="string_generator"><a class="link" href="#string_generator"><boost/uuid/string_generator.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="string_generator_synopsis"><a class="link" href="#string_generator_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">struct</span> <span class="nc">string_generator</span>
|
|
<span class="p">{</span>
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Str</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span><span class="p">,</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span><span class="o">&</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span><span class="o">&</span> <span class="n">err</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="string_generator_string_generator"><a class="link" href="#string_generator_string_generator">string_generator</a></h4>
|
|
<div class="paragraph">
|
|
<p>The <code>string_generator</code> class generates a <code>uuid</code> from a string.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The standards-defined string format in <a href="https://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a> (p. 3) is supported, as well as a few variants.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Valid strings match the following PCRE regular expression:</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="txt">^({)?([0-9a-fA-F]{8})(?-)?([0-9a-fA-F]{4})(?(DASH)-)([0-9a-fA-F]{4})(?(DASH)-)([0-9a-fA-F]{4})(?(DASH)-)([0-9a-fA-F]{12})(?(1)})$</code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Or more generally, the following formats are accepted as valid string formats, where h is hexadecimal, without case sensitivity, and without any leading or trailing whitespace:</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="txt">hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
|
|
{hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh}
|
|
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
|
|
{hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh}</code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Invalid input will throw an <code>invalid_uuid</code> exception.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Str</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Str</span> <span class="k">const</span><span class="o">&</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Str</code> must be a <em>string-like</em> type; that is, one with a nested <code>value_type</code> type (<code>Ch</code>) and with a nested <code>traits_type</code> type.
|
|
<code>str.data()</code> must return <code>Ch const*</code>. <code>str.data() + str.size()</code> must be of type <code>Ch const*</code>.
|
|
<code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses the string <code>s</code> into a <code>uuid</code> and returns the result.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">string_generator</span> <span class="n">gen</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span> <span class="s">"0123456789abcdef0123456789abcdef"</span> <span class="p">)</span> <span class="p">);</span>
|
|
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="n">wstring</span><span class="p">(</span> <span class="s">L"01234567-89AB-CDEF-0123-456789ABCDEF"</span> <span class="p">)</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">s</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be a character type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses the string <code>s</code> into a <code>uuid</code> and returns the result.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">string_generator</span> <span class="n">gen</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">"{01234567-89ab-cdef-0123-456789abcdef}"</span> <span class="p">);</span>
|
|
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">L"01234567-89ab-cdef-0123-456789abcdef"</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>CharIterator</code> must be an input iterator with a character value type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses the character sequence <code>[first, last)</code> into a <code>uuid</code> and returns the result.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">string_generator</span> <span class="n">gen</span><span class="p">;</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="nf">s1</span><span class="p">(</span> <span class="s">"0123456789abcdef0123456789abcdef"</span> <span class="p">);</span>
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">s1</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">s1</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">wstring</span> <span class="nf">s2</span><span class="p">(</span> <span class="s">L"01234567-89AB-CDEF-0123-456789ABCDEF"</span> <span class="p">);</span>
|
|
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="n">s2</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">s2</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">CharIterator</span><span class="p">></span>
|
|
<span class="k">constexpr</span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">CharIterator</span> <span class="n">first</span><span class="p">,</span> <span class="n">CharIterator</span> <span class="n">last</span><span class="p">,</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span><span class="o">&</span> <span class="n">pos</span><span class="p">,</span> <span class="n">from_chars_error</span><span class="o">&</span> <span class="n">err</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>CharIterator</code> must be an input iterator with a character value type (one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, <code>char32_t</code>).</p>
|
|
</dd>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Parses the character sequence <code>[first, last)</code> into a <code>uuid</code> and returns the result.
|
|
On error, <code>pos</code> contains the position at which parsing failed, and <code>err</code> contains the error.
|
|
On success, <code>err</code> contains <code>from_chars_error::none</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
Unlike <code>from_chars</code>, this function does not allow extra input; if after a complete UUID is parsed, unconsumed characters remain, <code>err</code> is set to <code>from_chars_error::unexpected_extra_input</code>.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="namespaces"><a class="link" href="#namespaces"><boost/uuid/namespaces.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="namespaces_synopsis"><a class="link" href="#namespaces_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">ns</span> <span class="p">{</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">dns</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">uuid</span> <span class="n">url</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">uuid</span> <span class="n">oid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">uuid</span> <span class="n">x500dn</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="p">}}}</span> <span class="c1">// namespace boost::uuids::ns</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="namespaces_namespaces"><a class="link" href="#namespaces_namespaces">Namespaces</a></h4>
|
|
<div class="paragraph">
|
|
<p>This header provides definitions of the four namespaces defined in <a href="https://tools.ietf.org/html/rfc4122#appendix-C">RFC 4122, Appendix C</a>.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">dns</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The DNS namespace UUID from RFC 4122, <code>{6ba7b810-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">url</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The URL namespace UUID from RFC 4122, <code>{6ba7b811-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">oid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The OID namespace UUID from RFC 4122, <code>{6ba7b812-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">x500dn</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The X.500 DN namespace UUID from RFC 4122, <code>{6ba7b814-9dad-11d1-80b4-00c04fd430c8}</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="name_generator_sha1"><a class="link" href="#name_generator_sha1"><boost/uuid/​name_generator_sha1.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="name_generator_sha1_synopsis"><a class="link" href="#name_generator_sha1_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/namespaces.hpp></span><span class="cp">
|
|
</span>
|
|
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">name_generator_sha1</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="k">explicit</span> <span class="n">name_generator_sha1</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">namespace_uuid</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Alloc</span><span class="p">></span>
|
|
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_string</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="p">,</span> <span class="n">Alloc</span><span class="o">></span> <span class="k">const</span><span class="o">&</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="kt">void</span> <span class="k">const</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">byte_count</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="name_generator_sha1_name_generator_sha1"><a class="link" href="#name_generator_sha1_name_generator_sha1">name_generator_sha1</a></h4>
|
|
<div class="paragraph">
|
|
<p>The class <code>name_generator_sha1</code> generates name-based version 5 UUIDs, using SHA1 as the hashing algorithm.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">explicit</span> <span class="nf">name_generator_sha1</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">namespace_uuid</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Constructs a <code>name_generator_sha1</code> that uses <code>namespace_uuid</code> as the namespace.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>A name-based UUID version 5 produced from a digest of the namespace passed to the constructor and the characters of the string <code>name</code>, converted to octets.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Remarks: </dt>
|
|
<dd>
|
|
<p>The characters of <code>name</code> are converted to a sequence of octets in the following manner:</p>
|
|
<div class="ulist">
|
|
<ul>
|
|
<li>
|
|
<p>If <code>Ch</code> is <code>char</code> or <code>char8_t</code>, the characters are processed as octets directly.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>Ch</code> is <code>wchar_t</code>, the characters are converted to <code>uint32_t</code> and then serialized to four octets each using little-endian representation.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise, the character sequence is converted to UTF-8 and the result is processed as octets.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">name_generator_sha1</span> <span class="nf">gen</span><span class="p">(</span> <span class="n">ns</span><span class="o">::</span><span class="n">dns</span><span class="p">()</span> <span class="p">);</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">"boost.org"</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, SHA1 version: "</span> <span class="o"><<</span> <span class="n">u1</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="c1">// Output:</span>
|
|
<span class="c1">// "boost.org" UUID in DNS namespace, SHA1 version: 0043f363-bbb4-5369-840a-322df6ec1926</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">L"boost.org"</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"L</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, SHA1 version: "</span> <span class="o"><<</span> <span class="n">u2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="c1">// Output:</span>
|
|
<span class="c1">// L"boost.org" UUID in DNS namespace, SHA1 version: c31c5016-3493-5dc2-8484-5813d495cc18</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u3</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">u"boost.org"</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"u</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, SHA1 version: "</span> <span class="o"><<</span> <span class="n">u3</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="c1">// Output:</span>
|
|
<span class="c1">// u"boost.org" UUID in DNS namespace, SHA1 version: 0043f363-bbb4-5369-840a-322df6ec1926</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Alloc</span><span class="p">></span>
|
|
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_string</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="p">,</span> <span class="n">Alloc</span><span class="o">></span> <span class="k">const</span><span class="o">&</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Requires: </dt>
|
|
<dd>
|
|
<p><code>Ch</code> must be one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>As if <code>operator()( name.c_str() )</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="kt">void</span> <span class="k">const</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">byte_count</span> <span class="p">)</span> <span class="k">const</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>A name-based UUID version 5 produced from a digest of the namespace passed to the constructor and the <code>byte_count</code> octets starting from <code>buffer</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="name_generator_md5"><a class="link" href="#name_generator_md5"><boost/uuid/​name_generator_md5.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="name_generator_md5_synopsis"><a class="link" href="#name_generator_md5_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/namespaces.hpp></span><span class="cp">
|
|
</span>
|
|
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">name_generator_md5</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="k">explicit</span> <span class="n">name_generator_md5</span><span class="p">(</span> <span class="n">uuid</span> <span class="k">const</span><span class="o">&</span> <span class="n">namespace_uuid</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">></span> <span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">Ch</span> <span class="k">const</span><span class="o">*</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Ch</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Traits</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Alloc</span><span class="p">></span>
|
|
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="n">std</span><span class="o">::</span><span class="n">basic_string</span><span class="o"><</span><span class="n">Ch</span><span class="p">,</span> <span class="n">Traits</span><span class="p">,</span> <span class="n">Alloc</span><span class="o">></span> <span class="k">const</span><span class="o">&</span> <span class="n">name</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="k">operator</span><span class="p">()(</span> <span class="kt">void</span> <span class="k">const</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="kt">size_t</span> <span class="n">byte_count</span> <span class="p">)</span> <span class="k">const</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="name_generator_md5_name_generator_md5"><a class="link" href="#name_generator_md5_name_generator_md5">name_generator_md5</a></h4>
|
|
<div class="paragraph">
|
|
<p>The class <code>name_generator_md5</code> generates name-based version 3 UUIDs, using MD5 as the hashing algorithm.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Its interface and its operation are the same as those of <code>name_generator_sha1</code>, with the only difference being that it uses MD5 instead of SHA1.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>There is no reason to use <code>name_generator_md5</code> except for compatibility. <code>name_generator_sha1</code> should be preferred in almost all cases.</p>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">name_generator_md5</span> <span class="nf">gen</span><span class="p">(</span> <span class="n">ns</span><span class="o">::</span><span class="n">dns</span><span class="p">()</span> <span class="p">);</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">"boost.org"</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, MD5 version: "</span> <span class="o"><<</span> <span class="n">u1</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="c1">// Output:</span>
|
|
<span class="c1">// "boost.org" UUID in DNS namespace, MD5 version: 888eca9c-e655-31a2-a46b-a2a821f6b150</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">L"boost.org"</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"L</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, MD5 version: "</span> <span class="o"><<</span> <span class="n">u2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="c1">// Output:</span>
|
|
<span class="c1">// L"boost.org" UUID in DNS namespace, MD5 version: 48149232-8cda-361b-b355-0bdb71d2cab3</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u3</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span> <span class="s">u"boost.org"</span> <span class="p">);</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"u</span><span class="se">\"</span><span class="s">boost.org</span><span class="se">\"</span><span class="s"> UUID in DNS namespace, MD5 version: "</span> <span class="o"><<</span> <span class="n">u3</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="c1">// Output:</span>
|
|
<span class="c1">// u"boost.org" UUID in DNS namespace, MD5 version: 888eca9c-e655-31a2-a46b-a2a821f6b150</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="name_generator"><a class="link" href="#name_generator"><boost/uuid/name_generator.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="name_generator_synopsis"><a class="link" href="#name_generator_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/name_generator_sha1.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/name_generator_md5.hpp></span><span class="cp">
|
|
</span>
|
|
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="c1">// only provided for backward compatibility</span>
|
|
|
|
<span class="k">using</span> <span class="n">name_generator</span> <span class="o">=</span> <span class="n">name_generator_sha1</span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">name_generator_latest</span> <span class="o">=</span> <span class="n">name_generator_sha1</span><span class="p">;</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>This header makes <code>name_generator_sha1</code> and <code>name_generator_md5</code> available and declares the compatibility aliases <code>name_generator</code> and <code>name_generator_latest</code>.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="basic_random_generator"><a class="link" href="#basic_random_generator"><boost/uuid/​basic_random_generator.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="basic_random_generator_synopsis"><a class="link" href="#basic_random_generator_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">UniformRandomNumberGenerator</span><span class="p">></span>
|
|
<span class="k">class</span> <span class="nc">basic_random_generator</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">private:</span>
|
|
|
|
<span class="c1">// exposition only</span>
|
|
<span class="n">UniformRandomNumberGenerator</span><span class="o">*</span> <span class="n">p_</span><span class="p">;</span>
|
|
<span class="n">UniformRandomNumberGenerator</span> <span class="n">g_</span><span class="p">;</span>
|
|
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="n">basic_random_generator</span><span class="p">();</span>
|
|
|
|
<span class="k">explicit</span> <span class="n">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">&</span> <span class="n">gen</span> <span class="p">);</span>
|
|
<span class="k">explicit</span> <span class="n">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">*</span> <span class="n">pGen</span> <span class="p">);</span>
|
|
|
|
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()();</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="basic_random_generator_basic_random_generator"><a class="link" href="#basic_random_generator_basic_random_generator">basic_random_generator</a></h4>
|
|
<div class="paragraph">
|
|
<p>The class template <code>basic_random_generator</code> generates a version 4 random number-based UUID from a random number generator
|
|
(one that conforms to the standard concept <a href="https://en.cppreference.com/w/cpp/named_req/UniformRandomBitGenerator">UniformRandomBitGenerator</a>
|
|
or to the Boost.Random concept <a href="https://www.boost.org/doc/libs/1_85_0/doc/html/boost_random/reference.html#boost_random.reference.concepts.uniform_random_number_generator">UniformRandomNumberGenerator</a>).</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The default constructor will seed the random number generator with entropy obtained from <code>std::random_device</code>.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Additional constructors allow you to provide your own <code>UniformRandomNumberGenerator</code> and you are responsible for properly seeding it if necessary.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">basic_random_generator</span><span class="p">();</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Value-initializes <code>g_</code> and initializes <code>p_</code> to <code>nullptr</code>.
|
|
If <code>g_.seed()</code> is a valid expression, calls <code>g_.seed( seed_seq );</code>
|
|
to seed <code>g_</code>, where <code>seed_seq</code> is an object providing a
|
|
<code>generate( first, last )</code> member function that fills the range
|
|
<code>[first, last)</code> using entropy obtained from <code>std::random_device</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="admonitionblock note">
|
|
<table>
|
|
<tr>
|
|
<td class="icon">
|
|
<div class="title">Note</div>
|
|
</td>
|
|
<td class="content">
|
|
Random number generators conforming to the standard concept <a href="https://en.cppreference.com/w/cpp/named_req/RandomNumberEngine">RandomNumberEngine</a>
|
|
or the Boost.Random concept <a href="https://www.boost.org/doc/libs/1_85_0/doc/html/boost_random/reference.html#boost_random.reference.concepts.pseudo_random_number_generator">PseudoRandomNumberGenerator</a>
|
|
provide such <code>seed</code> member functions.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">explicit</span> <span class="nf">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">&</span> <span class="n">gen</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Value-initializes <code>g_</code> and initializes <code>p_</code> to <code>&gen</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">explicit</span> <span class="nf">basic_random_generator</span><span class="p">(</span> <span class="n">UniformRandomNumberGenerator</span><span class="o">*</span> <span class="n">pGen</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Value-initializes <code>g_</code> and initializes <code>p_</code> to <code>pGen</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="nf">operator</span><span class="p">()();</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Generates and returns a version 4 UUID using random numbers
|
|
obtained from <code>*p_</code>, if <code>p_ != nullptr</code>, or from <code>g_</code>, otherwise.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">basic_random_generator</span><span class="o"><</span><span class="n">boost</span><span class="o">::</span><span class="n">mt19937</span><span class="o">></span> <span class="n">bulkgen</span><span class="p">;</span>
|
|
|
|
<span class="k">for</span><span class="p">(</span> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="mi">1000</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span> <span class="p">)</span>
|
|
<span class="p">{</span>
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">bulkgen</span><span class="p">();</span>
|
|
<span class="c1">// do something with u</span>
|
|
<span class="p">}</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="random_generator"><a class="link" href="#random_generator"><boost/uuid/​random_generator.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="random_generator_synopsis"><a class="link" href="#random_generator_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/basic_random_generator.hpp></span><span class="cp">
|
|
</span>
|
|
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="c1">// recommended for all uses</span>
|
|
|
|
<span class="k">class</span> <span class="nc">random_generator</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">private:</span>
|
|
|
|
<span class="c1">// exposition only</span>
|
|
<span class="n"><em>unspecified</span><span class="o">-</span><span class="n">csprng</span><span class="o">-</span><span class="n">type</em></span> <span class="n">g_</span><span class="p">;</span>
|
|
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="n">random_generator</span><span class="p">();</span>
|
|
|
|
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()();</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="c1">// only provided for backward compatibility</span>
|
|
|
|
<span class="k">using</span> <span class="n">random_generator_mt19937</span> <span class="o">=</span> <span class="n">basic_random_generator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">mt19937</span><span class="o">></span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">random_generator_pure</span> <span class="o">=</span> <span class="n">basic_random_generator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">random_device</span><span class="o">></span><span class="p">;</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="random_generator_random_generator"><a class="link" href="#random_generator_random_generator">random_generator</a></h4>
|
|
<div class="paragraph">
|
|
<p>The class <code>random_generator</code> generates UUIDs using a cryptographically strong random number generator, seeded with entropy from <code>std::random_device</code>.
|
|
It’s the recommended way to generate version 4 random-based UUIDs.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">random_generator</span><span class="p">();</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Initializes <code>g_</code>, an instance of a cryptographically strong
|
|
random number generator, using entropy obtained from <code>std::random_device</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="nf">operator</span><span class="p">()();</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Generates and returns a version 4 UUID using random numbers
|
|
obtained from <code>g_</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">random_generator</span> <span class="n">gen</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u1</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">u1</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u2</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">u2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">u1</span> <span class="o">!=</span> <span class="n">u2</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="random_generator_random_generator_mt19937"><a class="link" href="#random_generator_random_generator_mt19937">random_generator_mt19937</a></h4>
|
|
<div class="paragraph">
|
|
<p><code>random_generator_mt19937</code> is an alias for <code>basic_random_generator<std::mt19937></code> and is only
|
|
provided for backward compatibility.</p>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="random_generator_random_generator_pure"><a class="link" href="#random_generator_random_generator_pure">random_generator_pure</a></h4>
|
|
<div class="paragraph">
|
|
<p><code>random_generator_pure</code> is an alias for <code>basic_random_generator<std::random_device></code> and is only
|
|
provided for backward compatibility.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="uuid_clock"><a class="link" href="#uuid_clock"><boost/uuid/uuid_clock.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="uuid_clock_synopsis"><a class="link" href="#uuid_clock_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">uuid_clock</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">using</span> <span class="n">rep</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="kt">int64_t</span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">period</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">ratio</span><span class="o"><</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10000000</span><span class="o">></span><span class="p">;</span> <span class="c1">// 100ns</span>
|
|
<span class="k">using</span> <span class="n">duration</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">duration</span><span class="o"><</span><span class="n">rep</span><span class="p">,</span> <span class="n">period</span><span class="o">></span><span class="p">;</span>
|
|
<span class="k">using</span> <span class="n">time_point</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o"><</span><span class="n">uuid_clock</span><span class="p">,</span> <span class="n">duration</span><span class="o">></span><span class="p">;</span>
|
|
|
|
<span class="k">static</span> <span class="k">constexpr</span> <span class="kt">bool</span> <span class="n">is_steady</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
|
|
|
|
<span class="k">static</span> <span class="n">time_point</span> <span class="n">now</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Duration</span><span class="p">></span>
|
|
<span class="k">static</span> <span class="n">time_point</span> <span class="n">from_sys</span><span class="p">(</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">Duration</span><span class="o">></span> <span class="k">const</span><span class="o">&</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">duration</span><span class="o">></span>
|
|
<span class="n">to_sys</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="k">static</span> <span class="n">time_point</span> <span class="n">from_timestamp</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">to_timestamp</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The class <code>uuid_clock</code> is a <code><chrono></code>-compatible clock with an epoch of 00:00:00.00, 15 October 1582, and a resolution of 100 ns.
|
|
These values are specified in <a href="https://www.rfc-editor.org/rfc/rfc4122.html#section-4.1.4">RFC 4122 Section 4.1.4</a>.</p>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_clock_now"><a class="link" href="#uuid_clock_now">now</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">time_point</span> <span class="n">now</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The current system time (<code>std::chrono::system_clock::now()</code>, converted to <code>uuid_clock::time_point</code>).</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_clock_from_sys"><a class="link" href="#uuid_clock_from_sys">from_sys</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">Duration</span><span class="p">></span>
|
|
<span class="k">static</span> <span class="n">time_point</span> <span class="n">from_sys</span><span class="p">(</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">Duration</span><span class="o">></span> <span class="k">const</span><span class="o">&</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The <code>uuid_clock::time_point</code> corresponding to <code>tp</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_clock_to_sys"><a class="link" href="#uuid_clock_to_sys">to_sys</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">time_point</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">chrono</span><span class="o">::</span><span class="n">system_clock</span><span class="p">,</span> <span class="n">duration</span><span class="o">></span>
|
|
<span class="n">to_sys</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The <code>std::chrono::system_clock::time_point</code> corresponding to <code>tp</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/time_generator_v1.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/uuid.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/uuid_clock.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><chrono></span><span class="cp">
|
|
</span>
|
|
<span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
|
|
<span class="p">{</span>
|
|
<span class="n">time_generator_v1</span> <span class="n">gen</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">gen</span><span class="p">();</span> <span class="c1">// generates a version 1 time-based UUID</span>
|
|
|
|
<span class="c1">// note that stream output of std::chrono::system_clock::time_point requires C++20</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">uuid_clock</span><span class="o">::</span><span class="n">to_sys</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">time_point_v1</span><span class="p">()</span> <span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
|
|
<span class="p">}</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_clock_from_timestamp"><a class="link" href="#uuid_clock_from_timestamp">from_timestamp</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">time_point</span> <span class="n">from_timestamp</span><span class="p">(</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The <code>uuid_clock::time_point</code> corresponding to <code>timestamp</code> 100 nanosecond intervals since the <code>uuid_clock</code> epoch.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="uuid_clock_to_timestamp"><a class="link" href="#uuid_clock_to_timestamp">to_timestamp</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">to_timestamp</span><span class="p">(</span> <span class="n">time_point</span> <span class="k">const</span><span class="o">&</span> <span class="n">tp</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The number of 100 nanosecond intervals since the <code>uuid_clock</code> epoch corresponding to <code>tp</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Example: </dt>
|
|
<dd>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">using</span> <span class="k">namespace</span> <span class="n">boost</span><span class="o">::</span><span class="n">uuids</span><span class="p">;</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">u</span> <span class="o">=</span> <span class="n">time_generator_v1</span><span class="p">()();</span>
|
|
|
|
<span class="n">assert</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">timestamp_v1</span><span class="p">()</span> <span class="o">==</span> <span class="n">uuid_clock</span><span class="o">::</span><span class="n">to_timestamp</span><span class="p">(</span> <span class="n">u</span><span class="p">.</span><span class="n">time_point_v1</span><span class="p">()</span> <span class="p">)</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="time_generator_v1"><a class="link" href="#time_generator_v1"><boost/uuid/​time_generator_v1.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v1_synopsis"><a class="link" href="#time_generator_v1_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">time_generator_v1</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">struct</span> <span class="nc">state_type</span>
|
|
<span class="p">{</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span><span class="p">;</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">uint16_t</span> <span class="n">clock_seq</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="k">private</span><span class="o">:</span> <span class="c1">// exposition only</span>
|
|
|
|
<span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="n">node_</span> <span class="o">=</span> <span class="p">{};</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o"><</span><span class="n">state_type</span><span class="o">>*</span> <span class="n">ps_</span> <span class="o">=</span> <span class="nb">nullptr</span><span class="p">;</span>
|
|
<span class="n">state_type</span> <span class="n">state_</span> <span class="o">=</span> <span class="p">{};</span>
|
|
|
|
<span class="k">public</span><span class="o">:</span>
|
|
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="n">time_generator_v1</span><span class="p">();</span>
|
|
<span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">node</span><span class="p">,</span> <span class="n">state_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">node</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o"><</span><span class="n">state_type</span><span class="o">>&</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The class <code>time_generator_v1</code> generates time-based version 1 UUIDs.
|
|
It supports three modes of operation.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The default and recommended one is by using its default constructor.
|
|
This instructs the generator to use a pseudorandom node identifier and initial clock sequence.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>If more control over the node identifier (or the clock sequence) is desired,
|
|
for example,
|
|
if the generated UUIDs must use a specific node identifier that persists for the lifetime of the program or even across different program runs,
|
|
a constructor that takes a node identifier and a <code>state_type</code> is provided.
|
|
(The <code>timestamp</code> field of the provided <code>state_type</code> should generally be zero.)</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Finally, if the program has several <code>time_generator_v1</code> instances (for example, one per thread) that need to use the same node identifier,
|
|
the third constructor takes a node identifier and a reference to <code>std::atomic<state_type></code>.
|
|
The atomic state is used by the generators to ensure that no duplicate UUIDs are produced.</p>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v1_constructors"><a class="link" href="#time_generator_v1_constructors">Constructors</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v1</span><span class="p">();</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Using entropy from <code>std::random_device</code>, generates a pseudorandom 48 bit node identifier in <code>node_</code> and a pseudorandom 14 bit clock sequence in <code>state_.clock_seq</code>. Initializes <code>state_.timestamp</code> to zero.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Remarks: </dt>
|
|
<dd>
|
|
<p>The multicast bit of <code>node_</code> is set to denote a local node identifier, as recommended in <a href="https://www.rfc-editor.org/rfc/rfc4122.html#section-4.5">RFC 4122 Section 4.5</a>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">node</span><span class="p">,</span> <span class="n">state_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Initializes <code>node_</code> to <code>node</code> and <code>state_</code> to <code>state</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v1</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">node</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o"><</span><span class="n">state_type</span><span class="o">>&</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Initializes <code>node_</code> to <code>node</code> and <code>ps_</code> to <code>&state</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v1_operator"><a class="link" href="#time_generator_v1_operator">operator()</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<div class="paragraph">
|
|
<p>Using the state in <code>state_</code>, if <code>ps_</code> is <code>nullptr</code>, or the state in <code>*ps_</code>, if <code>ps_</code> is not <code>nullptr</code>,
|
|
atomically computes and sets a new state by retrieving the system time as if by <code>uuid_clock::now()</code>,
|
|
converting it to a timestamp as if by <code>uuid_clock::to_timestamp</code>,
|
|
storing the result in <code>state.timestamp</code>,
|
|
and incrementing <code>state.clock_seq</code> modulo 0x4000 if the new timestamp is lower than or equal to the previous timestamp.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Creates a version 1 UUID using the node identifier from <code>node_</code> and the new timestamp and clock sequence and returns it.</p>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="time_generator_v6"><a class="link" href="#time_generator_v6"><boost/uuid/​time_generator_v6.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v6_synopsis"><a class="link" href="#time_generator_v6_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">time_generator_v6</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">struct</span> <span class="nc">state_type</span>
|
|
<span class="p">{</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">uint64_t</span> <span class="n">timestamp</span><span class="p">;</span>
|
|
<span class="n">std</span><span class="o">::</span><span class="kt">uint16_t</span> <span class="n">clock_seq</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="k">private</span><span class="o">:</span> <span class="c1">// exposition only</span>
|
|
|
|
<span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="n">node_</span> <span class="o">=</span> <span class="p">{};</span>
|
|
|
|
<span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o"><</span><span class="n">state_type</span><span class="o">>*</span> <span class="n">ps_</span> <span class="o">=</span> <span class="nb">nullptr</span><span class="p">;</span>
|
|
<span class="n">state_type</span> <span class="n">state_</span> <span class="o">=</span> <span class="p">{};</span>
|
|
|
|
<span class="k">public</span><span class="o">:</span>
|
|
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="n">time_generator_v6</span><span class="p">();</span>
|
|
<span class="n">time_generator_v6</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">node</span><span class="p">,</span> <span class="n">state_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">time_generator_v6</span><span class="p">(</span> <span class="n">uuid</span><span class="o">::</span><span class="n">node_type</span> <span class="k">const</span><span class="o">&</span> <span class="n">node</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o"><</span><span class="n">state_type</span><span class="o">>&</span> <span class="n">state</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The class <code>time_generator_v6</code> generates time-based version 6 UUIDs, as described in <a href="https://datatracker.ietf.org/doc/rfc9562/">RFC 9562</a> section 5.6.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>It operates in the exact same manner as <code>time_generator_v1</code>, with the only difference being that it produces version 6 UUIDs rather than version 1 ones.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="time_generator_v7"><a class="link" href="#time_generator_v7"><boost/uuid/​time_generator_v7.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v7_synopsis"><a class="link" href="#time_generator_v7_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="k">class</span> <span class="nc">time_generator_v7</span>
|
|
<span class="p">{</span>
|
|
<span class="nl">private:</span>
|
|
|
|
<span class="c1">// exposition only</span>
|
|
<span class="n"><em>unspecified</span><span class="o">-</span><span class="n">csprng</span><span class="o">-</span><span class="n">type</em></span> <span class="n">rng_</span><span class="p">;</span>
|
|
|
|
<span class="nl">public:</span>
|
|
|
|
<span class="k">using</span> <span class="n">result_type</span> <span class="o">=</span> <span class="n">uuid</span><span class="p">;</span>
|
|
|
|
<span class="n">time_generator_v7</span><span class="p">();</span>
|
|
|
|
<span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">);</span>
|
|
<span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="n">time_generator_v7</span><span class="o">&</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="n">time_generator_v7</span><span class="o">&</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The class <code>time_generator_v7</code> generates time-based version 7 UUIDs, as described in <a href="https://datatracker.ietf.org/doc/rfc9562/">RFC 9562</a> section 5.7.</p>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v7_constructors"><a class="link" href="#time_generator_v7_constructors">Constructors</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="p">();</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Initializes the internal cryptographically strong pseudorandom number generator (CSPRNG) <code>rng_</code> using entropy from <code>std::random_device</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">);</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Copies the state of <code>rhs</code> into <code>*this</code>, then reseeds <code>this->rng_</code> using entropy from <code>std::random_device</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Remarks: </dt>
|
|
<dd>
|
|
<p>Reseeding ensures that the two generators don’t produce the same random number sequence after the copy.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Copies the state of <code>rhs</code> into <code>*this</code>, then perturbs the state of <code>rhs.rng_</code> such that it no longer produces the same random number sequence.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v7_assignment"><a class="link" href="#time_generator_v7_assignment">Assignment</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="o">&</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span> <span class="k">const</span><span class="o">&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Copies the state of <code>rhs</code> into <code>*this</code>, except for <code>this->rng_</code>, which is left unmodified.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>*this</code>.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Remarks: </dt>
|
|
<dd>
|
|
<p>Not modifying <code>this->rng_</code> ensures that the two generators continue to produce different random numbers.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">time_generator_v7</span><span class="o">&</span> <span class="k">operator</span><span class="o">=</span><span class="p">(</span> <span class="n">time_generator_v7</span><span class="o">&&</span> <span class="n">rhs</span> <span class="p">)</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<p>Copies the state of <code>rhs</code> into <code>*this</code>, then perturbs the state of <code>rhs.rng_</code> such that it no longer produces the same random number sequence.</p>
|
|
</dd>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p><code>*this</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_v7_operator"><a class="link" href="#time_generator_v7_operator">operator()</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">result_type</span> <span class="k">operator</span><span class="p">()()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Effects: </dt>
|
|
<dd>
|
|
<div class="olist arabic">
|
|
<ol class="arabic">
|
|
<li>
|
|
<p>Obtains a new timestamp as if by getting the system time from <code>std::chrono::system_clock::now()</code> and converting it to a number of microseconds from the Unix epoch.</p>
|
|
</li>
|
|
<li>
|
|
<p>Creates a new version 7 UUID and initializes its <code>unix_ts_ms</code> field with the number of milliseconds in the timestamp.</p>
|
|
</li>
|
|
<li>
|
|
<p>Initializes the <code>rand_a</code> field with the residual number of microseconds from the timestamp.</p>
|
|
</li>
|
|
<li>
|
|
<p>Initializes the 6 bits of the <code>rand_b</code> field following the variant to a conflict resolution counter, such that if more than one UUID is generated using the same timestamp, monotonicity is still ensured.</p>
|
|
</li>
|
|
<li>
|
|
<p>Initializes the rest of the <code>rand_b</code> field to random values obtained from the internal CSPRNG <code>rng_</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Returns the UUID.</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</dd>
|
|
<dt class="hdlist1">Remarks: </dt>
|
|
<dd>
|
|
<p><code>operator()</code> generates a monotonically increasing sequence of UUIDs, if the following requirements are met:</p>
|
|
<div class="ulist">
|
|
<ul>
|
|
<li>
|
|
<p>The system clock never goes backwards.</p>
|
|
</li>
|
|
<li>
|
|
<p>The system clock has at least millisecond resolution.</p>
|
|
</li>
|
|
<li>
|
|
<p>No more than 64 UUIDs are generated per microsecond (no more than one every 16 nanoseconds).</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="time_generator"><a class="link" href="#time_generator"><boost/uuid/time_generator.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="time_generator_synopsis"><a class="link" href="#time_generator_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/time_generator_v1.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/time_generator_v6.hpp></span><span class="cp">
|
|
#include</span> <span class="cpf"><boost/uuid/time_generator_v7.hpp></span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>This convenience header makes the three time-based generators <code>time_generator_v1</code>, <code>time_generator_v6</code>, and <code>time_generator_v7</code>, available.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="constants"><a class="link" href="#constants"><boost/uuid/constants.hpp></a></h3>
|
|
<div class="sect3">
|
|
<h4 id="constants_synopsis"><a class="link" href="#constants_synopsis">Synopsis</a></h4>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="cp">#include</span> <span class="cpf"><boost/uuid/namespaces.hpp></span><span class="cp">
|
|
</span>
|
|
<span class="k">namespace</span> <span class="n">boost</span> <span class="p">{</span>
|
|
<span class="k">namespace</span> <span class="n">uuids</span> <span class="p">{</span>
|
|
|
|
<span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span>
|
|
|
|
<span class="p">}}</span> <span class="c1">// namespace boost::uuids</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect3">
|
|
<h4 id="constants_constants"><a class="link" href="#constants_constants">Constants</a></h4>
|
|
<div class="paragraph">
|
|
<p>This header provides definitions of some well known UUID constants.</p>
|
|
</div>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="n">uuid</span> <span class="n">nil_uuid</span><span class="p">()</span> <span class="k">noexcept</span><span class="p">;</span></code></pre>
|
|
</div>
|
|
</div>
|
|
<div class="dlist">
|
|
<dl>
|
|
<dt class="hdlist1">Returns: </dt>
|
|
<dd>
|
|
<p>The nil UUID, <code>{00000000-0000-0000-0000-000000000000}</code>.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="design_notes"><a class="link" href="#design_notes">Design Notes</a></h3>
|
|
<div class="paragraph">
|
|
<p>The document <a href="http://www.itu.int/ITU-T/studygroups/com17/oid/X.667-E.pdf" class="bare">http://www.itu.int/ITU-T/studygroups/com17/oid/X.667-E.pdf</a> was used to design and implement the <code>uuid</code> struct.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>All functions are re-entrant. Classes are as thread-safe as an int. That is an instance cannot be shared between threads without proper synchronization.</p>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="acknowledgements"><a class="link" href="#acknowledgements">Acknowledgements</a></h3>
|
|
<div class="paragraph">
|
|
<p>A number of people on the <a href="https://www.boost.org/">boost.org</a> mailing list provided useful comments and greatly helped to shape the library.</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>The documentation was converted to Asciidoc format by Christian Mazakas.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect1">
|
|
<h2 id="copyright"><a class="link" href="#copyright">Copyright and License</a></h2>
|
|
<div class="sectionbody">
|
|
<div class="paragraph">
|
|
<p>Copyright 2006 Andy Tompkins</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Copyright 2017 James E. King III</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Copyright 2024 Christian Mazakas</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Copyright 2024-2026 Peter Dimov</p>
|
|
</div>
|
|
<div class="paragraph">
|
|
<p>Distributed under the <a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License, Version 1.0</a>.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect1">
|
|
<h2 id="history"><a class="link" href="#history">Old Revision History</a></h2>
|
|
<div class="sectionbody">
|
|
<div class="paragraph">
|
|
<p>This section contains the old revision history that used to
|
|
be maintained as comments in the library header files.</p>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="history_boostuuiduuid_hpp"><a class="link" href="#history_boostuuiduuid_hpp">boost/uuid/uuid.hpp</a></h3>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Revision History</span>
|
|
<span class="c1">// 06 Feb 2006 - Initial Revision</span>
|
|
<span class="c1">// 09 Nov 2006 - fixed variant and version bits for v4 guids</span>
|
|
<span class="c1">// 13 Nov 2006 - added serialization</span>
|
|
<span class="c1">// 17 Nov 2006 - added name-based guid creation</span>
|
|
<span class="c1">// 20 Nov 2006 - add fixes for gcc (from Tim Blechmann)</span>
|
|
<span class="c1">// 07 Mar 2007 - converted to header only</span>
|
|
<span class="c1">// 10 May 2007 - removed need for Boost.Thread</span>
|
|
<span class="c1">// - added better seed - thanks Peter Dimov</span>
|
|
<span class="c1">// - removed null()</span>
|
|
<span class="c1">// - replaced byte_count() and output_bytes() with size() and begin() and end()</span>
|
|
<span class="c1">// 11 May 2007 - fixed guid(ByteInputIterator first, ByteInputIterator last)</span>
|
|
<span class="c1">// - optimized operator>></span>
|
|
<span class="c1">// 14 May 2007 - converted from guid to uuid</span>
|
|
<span class="c1">// 29 May 2007 - uses new implementation of sha1</span>
|
|
<span class="c1">// 01 Jun 2007 - removed using namespace directives</span>
|
|
<span class="c1">// 09 Nov 2007 - moved implementation to uuid.ipp file</span>
|
|
<span class="c1">// 12 Nov 2007 - moved serialize code to uuid_serialize.hpp file</span>
|
|
<span class="c1">// 25 Feb 2008 - moved to namespace boost::uuids</span>
|
|
<span class="c1">// 19 Mar 2009 - changed to a POD, reorganized files</span>
|
|
<span class="c1">// 28 Nov 2009 - disabled deprecated warnings for MSVC</span>
|
|
<span class="c1">// 30 Nov 2009 - used BOOST_STATIC_CONSTANT</span>
|
|
<span class="c1">// 02 Dec 2009 - removed BOOST_STATIC_CONSTANT - not all compilers like it</span>
|
|
<span class="c1">// 29 Apr 2013 - added support for noexcept and constexpr, added optimizations for SSE/AVX</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="history_boostuuiduuid_io_hpp"><a class="link" href="#history_boostuuiduuid_io_hpp">boost/uuid/uuid_io.hpp</a></h3>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Revision History</span>
|
|
<span class="c1">// 20 Mar 2009 - Initial Revision</span>
|
|
<span class="c1">// 28 Nov 2009 - disabled deprecated warnings for MSVC</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sect2">
|
|
<h3 id="history_boostuuiddetailsha1_hpp"><a class="link" href="#history_boostuuiddetailsha1_hpp">boost/uuid/detail/sha1.hpp</a></h3>
|
|
<div class="listingblock">
|
|
<div class="content">
|
|
<pre class="rouge highlight"><code data-lang="c++"><span class="c1">// Revision History</span>
|
|
<span class="c1">// 29 May 2007 - Initial Revision</span>
|
|
<span class="c1">// 25 Feb 2008 - moved to namespace boost::uuids::detail</span>
|
|
<span class="c1">// 10 Jan 2012 - can now handle the full size of messages (2^64 - 1 bits)</span></code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html> |