Commit 91c9544a authored by Davis King's avatar Davis King
Browse files

set the subversion eol-style to native for these files

--HG--
extra : convert_revision : svn%3Afdd8eb12-d10e-0410-9acb-85c331704f74/trunk%402354
parent 8fa33842
<text> <text>
The Canterbury Corpus The Canterbury Corpus
file size packed size bpb corruption file size packed size bpb corruption
text: 152089 47843 2.51658 no text: 152089 47843 2.51658 no
play: 125179 45069 2.88029 no play: 125179 45069 2.88029 no
html: 24603 7914 2.57334 no html: 24603 7914 2.57334 no
Csrc: 11150 3279 2.35265 no Csrc: 11150 3279 2.35265 no
list: 3721 1281 2.7541 no list: 3721 1281 2.7541 no
Excl: 1029744 210286 1.6337 no Excl: 1029744 210286 1.6337 no
tech: 426754 115826 2.17129 no tech: 426754 115826 2.17129 no
poem: 481861 157348 2.61234 no poem: 481861 157348 2.61234 no
fax: 513216 56477 0.880362 no fax: 513216 56477 0.880362 no
SPRC: 38240 14466 3.02636 no SPRC: 38240 14466 3.02636 no
man: 4227 1780 3.36882 no man: 4227 1780 3.36882 no
average: 2.43362 average: 2.43362
time: 2.296sec time: 2.296sec
The Calgary Corpus The Calgary Corpus
file size packed size bpb corruption file size packed size bpb corruption
bib: 111261 29758 2.13969 no bib: 111261 29758 2.13969 no
book1: 768771 247700 2.57762 no book1: 768771 247700 2.57762 no
book2: 610856 168694 2.20928 no book2: 610856 168694 2.20928 no
geo: 102400 67817 5.2982 no geo: 102400 67817 5.2982 no
news: 377109 126675 2.68729 no news: 377109 126675 2.68729 no
obj1: 21504 10871 4.04427 no obj1: 21504 10871 4.04427 no
obj2: 246814 82948 2.6886 no obj2: 246814 82948 2.6886 no
paper1: 53161 18113 2.72576 no paper1: 53161 18113 2.72576 no
paper2: 82199 27700 2.6959 no paper2: 82199 27700 2.6959 no
pic: 513216 56477 0.880362 no pic: 513216 56477 0.880362 no
progc: 39611 13622 2.75115 no progc: 39611 13622 2.75115 no
progl: 71646 17263 1.92759 no progl: 71646 17263 1.92759 no
progp: 49379 12032 1.94933 no progp: 49379 12032 1.94933 no
trans: 93695 19505 1.6654 no trans: 93695 19505 1.6654 no
average: 2.5886 average: 2.5886
time: 2.86sec time: 2.86sec
The Artificial Corpus The Artificial Corpus
file size packed size bpb corruption file size packed size bpb corruption
a: 1 6 48 no a: 1 6 48 no
aaa: 100000 20 0.0016 no aaa: 100000 20 0.0016 no
alphabet: 100000 66 0.00528 no alphabet: 100000 66 0.00528 no
random: 100000 88475 7.078 no random: 100000 88475 7.078 no
average: 13.7712 average: 13.7712
time: 531ms time: 531ms
The Large Corpus The Large Corpus
file size packed size bpb corruption file size packed size bpb corruption
E.coli: 4638690 1130433 1.94957 no E.coli: 4638690 1130433 1.94957 no
bible: 4047392 844807 1.66983 no bible: 4047392 844807 1.66983 no
word: 2473400 504129 1.63056 no word: 2473400 504129 1.63056 no
average: 1.74999 average: 1.74999
time: 5.266sec time: 5.266sec
</text> </text>
\ No newline at end of file
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>kernel_1db</title> <title>kernel_1db</title>
<body from_file="kernel_1db.txt"/> <body from_file="kernel_1db.txt"/>
<menu from_file="compression.xml"/> <menu from_file="compression.xml"/>
</doc> </doc>
<text> <text>
The Canterbury Corpus The Canterbury Corpus
file size packed size bpb corruption file size packed size bpb corruption
text: 152089 40695 2.14059 no text: 152089 40695 2.14059 no
play: 125179 37421 2.39152 no play: 125179 37421 2.39152 no
html: 24603 6859 2.2303 no html: 24603 6859 2.2303 no
Csrc: 11150 2792 2.00323 no Csrc: 11150 2792 2.00323 no
list: 3721 1084 2.33056 no list: 3721 1084 2.33056 no
Excl: 1029744 156897 1.21892 no Excl: 1029744 156897 1.21892 no
tech: 426754 102805 1.9272 no tech: 426754 102805 1.9272 no
poem: 481861 136664 2.26894 no poem: 481861 136664 2.26894 no
fax: 513216 51109 0.796686 no fax: 513216 51109 0.796686 no
SPRC: 38240 12590 2.63389 no SPRC: 38240 12590 2.63389 no
man: 4227 1530 2.89567 no man: 4227 1530 2.89567 no
average: 2.07614 average: 2.07614
time: 3.062sec time: 3.062sec
The Calgary Corpus The Calgary Corpus
file size packed size bpb corruption file size packed size bpb corruption
bib: 111261 26039 1.87228 no bib: 111261 26039 1.87228 no
book1: 768771 218772 2.27659 no book1: 768771 218772 2.27659 no
book2: 610856 151985 1.99045 no book2: 610856 151985 1.99045 no
geo: 102400 59371 4.63836 no geo: 102400 59371 4.63836 no
news: 377109 115334 2.4467 no news: 377109 115334 2.4467 no
obj1: 21504 9832 3.65774 no obj1: 21504 9832 3.65774 no
obj2: 246814 75065 2.43309 no obj2: 246814 75065 2.43309 no
paper1: 53161 15263 2.29687 no paper1: 53161 15263 2.29687 no
paper2: 82199 23368 2.27429 no paper2: 82199 23368 2.27429 no
pic: 513216 51109 0.796686 no pic: 513216 51109 0.796686 no
progc: 39611 11549 2.33248 no progc: 39611 11549 2.33248 no
progl: 71646 15297 1.70806 no progl: 71646 15297 1.70806 no
progp: 49379 10447 1.69254 no progp: 49379 10447 1.69254 no
trans: 93695 17677 1.50932 no trans: 93695 17677 1.50932 no
average: 2.28039 average: 2.28039
time: 4.172sec time: 4.172sec
The Artificial Corpus The Artificial Corpus
file size packed size bpb corruption file size packed size bpb corruption
a: 1 7 56 no a: 1 7 56 no
aaa: 100000 17 0.00136 no aaa: 100000 17 0.00136 no
alphabet: 100000 65 0.0052 no alphabet: 100000 65 0.0052 no
random: 100000 82599 6.60792 no random: 100000 82599 6.60792 no
average: 15.6536 average: 15.6536
time: 672ms time: 672ms
The Large Corpus The Large Corpus
file size packed size bpb corruption file size packed size bpb corruption
E.coli: 4638690 1130095 1.94899 no E.coli: 4638690 1130095 1.94899 no
bible: 4047392 848956 1.67803 no bible: 4047392 848956 1.67803 no
word: 2473400 542983 1.75623 no word: 2473400 542983 1.75623 no
average: 1.79442 average: 1.79442
time: 6.516sec time: 6.516sec
</text> </text>
\ No newline at end of file
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>kernel_1ea</title> <title>kernel_1ea</title>
<body from_file="kernel_1ea.txt"/> <body from_file="kernel_1ea.txt"/>
<menu from_file="compression.xml"/> <menu from_file="compression.xml"/>
</doc> </doc>
<text> <text>
The Canterbury Corpus The Canterbury Corpus
file size packed size bpb corruption file size packed size bpb corruption
text: 152089 40220 2.1156 no text: 152089 40220 2.1156 no
play: 125179 37451 2.39344 no play: 125179 37451 2.39344 no
html: 24603 6819 2.21729 no html: 24603 6819 2.21729 no
Csrc: 11150 2770 1.98744 no Csrc: 11150 2770 1.98744 no
list: 3721 1085 2.33271 no list: 3721 1085 2.33271 no
Excl: 1029744 158436 1.23088 no Excl: 1029744 158436 1.23088 no
tech: 426754 100243 1.87917 no tech: 426754 100243 1.87917 no
poem: 481861 136151 2.26042 no poem: 481861 136151 2.26042 no
fax: 513216 50374 0.785229 no fax: 513216 50374 0.785229 no
SPRC: 38240 12387 2.59142 no SPRC: 38240 12387 2.59142 no
man: 4227 1528 2.89189 no man: 4227 1528 2.89189 no
average: 2.06232 average: 2.06232
time: 4.875sec time: 4.875sec
The Calgary Corpus The Calgary Corpus
file size packed size bpb corruption file size packed size bpb corruption
bib: 111261 25279 1.81764 no bib: 111261 25279 1.81764 no
book1: 768771 216389 2.25179 no book1: 768771 216389 2.25179 no
book2: 610856 146986 1.92498 no book2: 610856 146986 1.92498 no
geo: 102400 58768 4.59125 no geo: 102400 58768 4.59125 no
news: 377109 109292 2.31852 no news: 377109 109292 2.31852 no
obj1: 21504 9819 3.6529 no obj1: 21504 9819 3.6529 no
obj2: 246814 72662 2.3552 no obj2: 246814 72662 2.3552 no
paper1: 53161 15128 2.27656 no paper1: 53161 15128 2.27656 no
paper2: 82199 23186 2.25657 no paper2: 82199 23186 2.25657 no
pic: 513216 50374 0.785229 no pic: 513216 50374 0.785229 no
progc: 39611 11434 2.30926 no progc: 39611 11434 2.30926 no
progl: 71646 14712 1.64274 no progl: 71646 14712 1.64274 no
progp: 49379 10210 1.65414 no progp: 49379 10210 1.65414 no
trans: 93695 16885 1.4417 no trans: 93695 16885 1.4417 no
average: 2.23418 average: 2.23418
time: 5.421sec time: 5.421sec
The Artificial Corpus The Artificial Corpus
file size packed size bpb corruption file size packed size bpb corruption
a: 1 7 56 no a: 1 7 56 no
aaa: 100000 17 0.00136 no aaa: 100000 17 0.00136 no
alphabet: 100000 64 0.00512 no alphabet: 100000 64 0.00512 no
random: 100000 81881 6.55048 no random: 100000 81881 6.55048 no
average: 15.6392 average: 15.6392
time: 907ms time: 907ms
The Large Corpus The Large Corpus
file size packed size bpb corruption file size packed size bpb corruption
E.coli: 4638690 1129161 1.94738 no E.coli: 4638690 1129161 1.94738 no
bible: 4047392 794809 1.571 no bible: 4047392 794809 1.571 no
word: 2473400 454450 1.46988 no word: 2473400 454450 1.46988 no
average: 1.66275 average: 1.66275
time: 7.39sec time: 7.39sec
</text> </text>
\ No newline at end of file
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>kernel_1eb</title> <title>kernel_1eb</title>
<body from_file="kernel_1eb.txt"/> <body from_file="kernel_1eb.txt"/>
<menu from_file="compression.xml"/> <menu from_file="compression.xml"/>
</doc> </doc>
<text> <text>
The Canterbury Corpus The Canterbury Corpus
file size packed size bpb corruption file size packed size bpb corruption
text: 152089 40367 2.12334 no text: 152089 40367 2.12334 no
play: 125179 37785 2.41478 no play: 125179 37785 2.41478 no
html: 24603 6828 2.22022 no html: 24603 6828 2.22022 no
Csrc: 11150 2710 1.94439 no Csrc: 11150 2710 1.94439 no
list: 3721 1084 2.33056 no list: 3721 1084 2.33056 no
Excl: 1029744 162760 1.26447 no Excl: 1029744 162760 1.26447 no
tech: 426754 100488 1.88376 no tech: 426754 100488 1.88376 no
poem: 481861 139110 2.30955 no poem: 481861 139110 2.30955 no
fax: 513216 50276 0.783701 no fax: 513216 50276 0.783701 no
SPRC: 38240 12219 2.55628 no SPRC: 38240 12219 2.55628 no
man: 4227 1533 2.90135 no man: 4227 1533 2.90135 no
average: 2.06658 average: 2.06658
time: 5.484sec time: 5.484sec
The Calgary Corpus The Calgary Corpus
file size packed size bpb corruption file size packed size bpb corruption
bib: 111261 25153 1.80858 no bib: 111261 25153 1.80858 no
book1: 768771 220128 2.2907 no book1: 768771 220128 2.2907 no
book2: 610856 146040 1.91259 no book2: 610856 146040 1.91259 no
geo: 102400 58737 4.58883 no geo: 102400 58737 4.58883 no
news: 377109 108774 2.30753 no news: 377109 108774 2.30753 no
obj1: 21504 9823 3.65439 no obj1: 21504 9823 3.65439 no
obj2: 246814 71148 2.30613 no obj2: 246814 71148 2.30613 no
paper1: 53161 15116 2.27475 no paper1: 53161 15116 2.27475 no
paper2: 82199 23346 2.27214 no paper2: 82199 23346 2.27214 no
pic: 513216 50276 0.783701 no pic: 513216 50276 0.783701 no
progc: 39611 11351 2.29249 no progc: 39611 11351 2.29249 no
progl: 71646 14125 1.5772 no progl: 71646 14125 1.5772 no
progp: 49379 9966 1.61461 no progp: 49379 9966 1.61461 no
trans: 93695 16068 1.37194 no trans: 93695 16068 1.37194 no
average: 2.21826 average: 2.21826
time: 6.188sec time: 6.188sec
The Artificial Corpus The Artificial Corpus
file size packed size bpb corruption file size packed size bpb corruption
a: 1 7 56 no a: 1 7 56 no
aaa: 100000 17 0.00136 no aaa: 100000 17 0.00136 no
alphabet: 100000 65 0.0052 no alphabet: 100000 65 0.0052 no
random: 100000 81869 6.54952 no random: 100000 81869 6.54952 no
average: 15.639 average: 15.639
time: 1.109sec time: 1.109sec
The Large Corpus The Large Corpus
file size packed size bpb corruption file size packed size bpb corruption
E.coli: 4638690 1160064 2.00068 no E.coli: 4638690 1160064 2.00068 no
bible: 4047392 760498 1.50319 no bible: 4047392 760498 1.50319 no
word: 2473400 422419 1.36628 no word: 2473400 422419 1.36628 no
average: 1.62338 average: 1.62338
time: 11.203sec time: 11.203sec
</text> </text>
\ No newline at end of file
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>kernel_1ec</title> <title>kernel_1ec</title>
<body from_file="kernel_1ec.txt"/> <body from_file="kernel_1ec.txt"/>
<menu from_file="compression.xml"/> <menu from_file="compression.xml"/>
</doc> </doc>
<text> <text>
The Canterbury Corpus The Canterbury Corpus
file size packed size bpb corruption file size packed size bpb corruption
text: 152089 55655 2.9275 no text: 152089 55655 2.9275 no
play: 125179 49648 3.17293 no play: 125179 49648 3.17293 no
html: 24603 8345 2.71349 no html: 24603 8345 2.71349 no
Csrc: 11150 3514 2.52126 no Csrc: 11150 3514 2.52126 no
list: 3721 1379 2.96479 no list: 3721 1379 2.96479 no
Excl: 1029744 72617 0.564156 no Excl: 1029744 72617 0.564156 no
tech: 426754 145403 2.72575 no tech: 426754 145403 2.72575 no
poem: 481861 196109 3.25586 no poem: 481861 196109 3.25586 no
fax: 513216 49740 0.775346 no fax: 513216 49740 0.775346 no
SPRC: 38240 13253 2.77259 no SPRC: 38240 13253 2.77259 no
man: 4227 1857 3.51455 no man: 4227 1857 3.51455 no
average: 2.53711 average: 2.53711
time: 4.641sec time: 4.641sec
The Calgary Corpus The Calgary Corpus
file size packed size bpb corruption file size packed size bpb corruption
bib: 111261 35687 2.566 no bib: 111261 35687 2.566 no
book1: 768771 313140 3.2586 no book1: 768771 313140 3.2586 no
book2: 610856 210661 2.7589 no book2: 610856 210661 2.7589 no
geo: 102400 61070 4.77109 no geo: 102400 61070 4.77109 no
news: 377109 143307 3.04012 no news: 377109 143307 3.04012 no
obj1: 21504 11004 4.09375 no obj1: 21504 11004 4.09375 no
obj2: 246814 83289 2.69965 no obj2: 246814 83289 2.69965 no
paper1: 53161 19433 2.9244 no paper1: 53161 19433 2.9244 no
paper2: 82199 30671 2.98505 no paper2: 82199 30671 2.98505 no
pic: 513216 49740 0.775346 no pic: 513216 49740 0.775346 no
progc: 39611 14142 2.85618 no progc: 39611 14142 2.85618 no
progl: 71646 17196 1.92011 no progl: 71646 17196 1.92011 no
progp: 49379 12045 1.95144 no progp: 49379 12045 1.95144 no
trans: 93695 19849 1.69478 no trans: 93695 19849 1.69478 no
average: 2.73539 average: 2.73539
time: 4.89sec time: 4.89sec
The Artificial Corpus The Artificial Corpus
file size packed size bpb corruption file size packed size bpb corruption
a: 1 6 48 no a: 1 6 48 no
aaa: 100000 58 0.00464 no aaa: 100000 58 0.00464 no
alphabet: 100000 87 0.00696 no alphabet: 100000 87 0.00696 no
random: 100000 77815 6.2252 no random: 100000 77815 6.2252 no
average: 13.5592 average: 13.5592
time: 235ms time: 235ms
The Large Corpus The Large Corpus
file size packed size bpb corruption file size packed size bpb corruption
E.coli: 4638690 1349400 2.32721 no E.coli: 4638690 1349400 2.32721 no
bible: 4047392 1206327 2.3844 no bible: 4047392 1206327 2.3844 no
word: 2473400 703195 2.27442 no word: 2473400 703195 2.27442 no
average: 2.32868 average: 2.32868
time: 8.75sec time: 8.75sec
</text> </text>
\ No newline at end of file
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>kernel_2a</title> <title>kernel_2a</title>
<body from_file="kernel_2a.txt"/> <body from_file="kernel_2a.txt"/>
<menu from_file="compression.xml"/> <menu from_file="compression.xml"/>
</doc> </doc>
<text> <text>
The Canterbury Corpus The Canterbury Corpus
file size packed size bpb corruption file size packed size bpb corruption
text: 152089 118620 6.2395 no text: 152089 118620 6.2395 no
play: 125179 103761 6.63121 no play: 125179 103761 6.63121 no
html: 24603 14067 4.57408 no html: 24603 14067 4.57408 no
Csrc: 11150 5805 4.16502 no Csrc: 11150 5805 4.16502 no
list: 3721 2142 4.60521 no list: 3721 2142 4.60521 no
Excl: 1029744 390978 3.03748 no Excl: 1029744 390978 3.03748 no
tech: 426754 310347 5.81782 no tech: 426754 310347 5.81782 no
poem: 481861 435150 7.22449 no poem: 481861 435150 7.22449 no
fax: 513216 116298 1.81285 no fax: 513216 116298 1.81285 no
SPRC: 38240 23076 4.82762 no SPRC: 38240 23076 4.82762 no
man: 4227 3177 6.01278 no man: 4227 3177 6.01278 no
average: 4.99528 average: 4.99528
time: 547ms time: 547ms
The Calgary Corpus The Calgary Corpus
file size packed size bpb corruption file size packed size bpb corruption
bib: 111261 68949 4.95764 no bib: 111261 68949 4.95764 no
book1: 768771 683415 7.11177 no book1: 768771 683415 7.11177 no
book2: 610856 435186 5.69936 no book2: 610856 435186 5.69936 no
geo: 102400 105111 8.2118 no geo: 102400 105111 8.2118 no
news: 377109 266382 5.65103 no news: 377109 266382 5.65103 no
obj1: 21504 15714 5.84598 no obj1: 21504 15714 5.84598 no
obj2: 246814 139671 4.52717 no obj2: 246814 139671 4.52717 no
paper1: 53161 37476 5.63962 no paper1: 53161 37476 5.63962 no
paper2: 82199 63198 6.15073 no paper2: 82199 63198 6.15073 no
pic: 513216 116298 1.81285 no pic: 513216 116298 1.81285 no
progc: 39611 25398 5.12948 no progc: 39611 25398 5.12948 no
progl: 71646 31905 3.56252 no progl: 71646 31905 3.56252 no
progp: 49379 20943 3.39302 no progp: 49379 20943 3.39302 no
trans: 93695 34056 2.90782 no trans: 93695 34056 2.90782 no
average: 5.04291 average: 5.04291
time: 610ms time: 610ms
The Artificial Corpus The Artificial Corpus
file size packed size bpb corruption file size packed size bpb corruption
a: 1 9 72 no a: 1 9 72 no
aaa: 100000 3771 0.30168 no aaa: 100000 3771 0.30168 no
alphabet: 100000 486 0.03888 no alphabet: 100000 486 0.03888 no
random: 100000 112491 8.99928 no random: 100000 112491 8.99928 no
average: 20.335 average: 20.335
time: 47ms time: 47ms
The Large Corpus The Large Corpus
file size packed size bpb corruption file size packed size bpb corruption
E.coli: 4638690 4752396 8.1961 no E.coli: 4638690 4752396 8.1961 no
bible: 4047392 2649303 5.23656 no bible: 4047392 2649303 5.23656 no
word: 2473400 1452177 4.69694 no word: 2473400 1452177 4.69694 no
average: 6.0432 average: 6.0432
time: 2.5sec time: 2.5sec
</text> </text>
\ No newline at end of file
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>kernel_3a</title> <title>kernel_3a</title>
<body from_file="kernel_3a.txt"/> <body from_file="kernel_3a.txt"/>
<menu from_file="compression.xml"/> <menu from_file="compression.xml"/>
</doc> </doc>
<text> <text>
The Canterbury Corpus The Canterbury Corpus
file size packed size bpb corruption file size packed size bpb corruption
text: 152089 111537 5.86693 no text: 152089 111537 5.86693 no
play: 125179 101457 6.48396 no play: 125179 101457 6.48396 no
html: 24603 13914 4.52433 no html: 24603 13914 4.52433 no
Csrc: 11150 5760 4.13274 no Csrc: 11150 5760 4.13274 no
list: 3721 2160 4.64391 no list: 3721 2160 4.64391 no
Excl: 1029744 407466 3.16557 no Excl: 1029744 407466 3.16557 no
tech: 426754 291483 5.46419 no tech: 426754 291483 5.46419 no
poem: 481861 417897 6.93805 no poem: 481861 417897 6.93805 no
fax: 513216 114138 1.77918 no fax: 513216 114138 1.77918 no
SPRC: 38240 23184 4.85021 no SPRC: 38240 23184 4.85021 no
man: 4227 3159 5.97871 no man: 4227 3159 5.97871 no
average: 4.89343 average: 4.89343
time: 734ms time: 734ms
The Calgary Corpus The Calgary Corpus
file size packed size bpb corruption file size packed size bpb corruption
bib: 111261 63729 4.58231 no bib: 111261 63729 4.58231 no
book1: 768771 655227 6.81844 no book1: 768771 655227 6.81844 no
book2: 610856 409392 5.36155 no book2: 610856 409392 5.36155 no
geo: 102400 108099 8.44523 no geo: 102400 108099 8.44523 no
news: 377109 259065 5.49581 no news: 377109 259065 5.49581 no
obj1: 21504 15768 5.86607 no obj1: 21504 15768 5.86607 no
obj2: 246814 138564 4.49128 no obj2: 246814 138564 4.49128 no
paper1: 53161 35901 5.40261 no paper1: 53161 35901 5.40261 no
paper2: 82199 60291 5.86781 no paper2: 82199 60291 5.86781 no
pic: 513216 114138 1.77918 no pic: 513216 114138 1.77918 no
progc: 39611 24984 5.04587 no progc: 39611 24984 5.04587 no
progl: 71646 31113 3.47408 no progl: 71646 31113 3.47408 no
progp: 49379 20772 3.36532 no progp: 49379 20772 3.36532 no
trans: 93695 33093 2.82559 no trans: 93695 33093 2.82559 no
average: 4.9158 average: 4.9158
time: 907ms time: 907ms
The Artificial Corpus The Artificial Corpus
file size packed size bpb corruption file size packed size bpb corruption
a: 1 9 72 no a: 1 9 72 no
aaa: 100000 3771 0.30168 no aaa: 100000 3771 0.30168 no
alphabet: 100000 486 0.03888 no alphabet: 100000 486 0.03888 no
random: 100000 112509 9.00072 no random: 100000 112509 9.00072 no
average: 20.3353 average: 20.3353
time: 78ms time: 78ms
The Large Corpus The Large Corpus
file size packed size bpb corruption file size packed size bpb corruption
E.coli: 4638690 4747257 8.18724 no E.coli: 4638690 4747257 8.18724 no
bible: 4047392 2466675 4.87558 no bible: 4047392 2466675 4.87558 no
word: 2473400 1301805 4.21058 no word: 2473400 1301805 4.21058 no
average: 5.7578 average: 5.7578
time: 3.25sec time: 3.25sec
</text> </text>
\ No newline at end of file
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>kernel_3b</title> <title>kernel_3b</title>
<body from_file="kernel_3b.txt"/> <body from_file="kernel_3b.txt"/>
<menu from_file="compression.xml"/> <menu from_file="compression.xml"/>
</doc> </doc>
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>License</title> <title>License</title>
<body><pre> <body><pre>
Boost Software License - Version 1.0 - August 17th, 2003 Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute, this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following: do so, all subject to the following:
The copyright notices in the Software and this entire statement, including The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer, the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by works are solely in the form of machine-executable object code generated by
a source language processor. a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.
</pre></body> </pre></body>
</doc> </doc>
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>Networking</title> <title>Networking</title>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<body> <body>
<br/><br/> <br/><br/>
<p> <p>
To use any of these objects all you need to do is #include the file indicated in the To use any of these objects all you need to do is #include the file indicated in the
short section about the component you would like to use. Pick which implementation you short section about the component you would like to use. Pick which implementation you
would like and typedef it to something nice. Here is an example of creating a typedef for would like and typedef it to something nice. Here is an example of creating a typedef for
a linker using the first kernel implementation. <br/> a linker using the first kernel implementation. <br/>
<tt>typedef dlib::linker::kernel_1a linker1;</tt> <tt>typedef dlib::linker::kernel_1a linker1;</tt>
</p> </p>
</body> </body>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<menu width="150"> <menu width="150">
<top> <top>
<section> <section>
<name>Objects</name> <name>Objects</name>
<item>linker</item> <item>linker</item>
<item>server</item> <item>server</item>
<item>sockstreambuf</item> <item>sockstreambuf</item>
</section> </section>
</top> </top>
</menu> </menu>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<components> <components>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>linker</name> <name>linker</name>
<file>dlib/linker.h</file> <file>dlib/linker.h</file>
<spec_file>dlib/linker/linker_kernel_abstract.h</spec_file> <spec_file>dlib/linker/linker_kernel_abstract.h</spec_file>
<description> <description>
This object represents something that takes two connections and lets This object represents something that takes two connections and lets
them talk to each other. ie. any incoming data from one connection is them talk to each other. ie. any incoming data from one connection is
passed unaltered to the other and vice versa. passed unaltered to the other and vice versa.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>linker_kernel_1</name> <name>linker_kernel_1</name>
<file>dlib/linker/linker_kernel_1.h</file> <file>dlib/linker/linker_kernel_1.h</file>
<description> <description>
This implementation is done just using the objects defined in the This implementation is done just using the objects defined in the
<a href="api.html#sockets">sockets</a> and <a href="api.html#threads">threads</a> packages. <a href="api.html#sockets">sockets</a> and <a href="api.html#threads">threads</a> packages.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for linker_kernel_1</description> <description>is a typedef for linker_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>server</name> <name>server</name>
<file>dlib/server.h</file> <file>dlib/server.h</file>
<spec_file>dlib/server/server_kernel_abstract.h</spec_file> <spec_file>dlib/server/server_kernel_abstract.h</spec_file>
<description> <description>
This object represents a server that listens on a port and spawns new This object represents a server that listens on a port and spawns new
threads to handle each new connection. It also manages the connections threads to handle each new connection. It also manages the connections
and threads for you. and threads for you.
</description> </description>
<examples> <examples>
<example>sockets_ex.cpp.html</example> <example>sockets_ex.cpp.html</example>
<example>sockstreambuf_ex.cpp.html</example> <example>sockstreambuf_ex.cpp.html</example>
<example>server_http_ex.cpp.html</example> <example>server_http_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>server_kernel_1</name> <name>server_kernel_1</name>
<file>dlib/server/server_kernel_1.h</file> <file>dlib/server/server_kernel_1.h</file>
<description> <description>
This implementation is done using the objects defined in the This implementation is done using the objects defined in the
<a href="api.html#sockets">sockets</a> and <a href="api.html#threads">threads</a> packages. <a href="api.html#sockets">sockets</a> and <a href="api.html#threads">threads</a> packages.
It also uses a <a href="containers.html#set">set</a> to keep track of the connections. It also uses a <a href="containers.html#set">set</a> to keep track of the connections.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for server_kernel_1 that uses set_kernel_1a</description> <description>is a typedef for server_kernel_1 that uses set_kernel_1a</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
<extensions> <extensions>
<extension> <extension>
<name>iostream</name> <name>iostream</name>
<spec_file>dlib/server/server_iostream_abstract.h</spec_file> <spec_file>dlib/server/server_iostream_abstract.h</spec_file>
<description> <description>
This extension redefines the on_connect() function so that This extension redefines the on_connect() function so that
instead of giving you a connection object you get an istream instead of giving you a connection object you get an istream
and ostream object. and ostream object.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>server_iostream_1</name> <name>server_iostream_1</name>
<file>dlib/server/server_iostream_1.h</file> <file>dlib/server/server_iostream_1.h</file>
<description> <description>
This is implemented in the obvious way using the <a href="#sockstreambuf">sockstreambuf</a> object. This is implemented in the obvious way using the <a href="#sockstreambuf">sockstreambuf</a> object.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>iostream_1a</name> <name>iostream_1a</name>
<description>is a typedef for server_kernel_1a extended by server_iostream_1 that uses <description>is a typedef for server_kernel_1a extended by server_iostream_1 that uses
sockstreambuf_kernel_2a</description> sockstreambuf_kernel_2a</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</extension> </extension>
<extension> <extension>
<name>http</name> <name>http</name>
<spec_file>dlib/server/server_http_abstract.h</spec_file> <spec_file>dlib/server/server_http_abstract.h</spec_file>
<description> <description>
This extension turns the server object into a simple HTTP server. This extension turns the server object into a simple HTTP server.
</description> </description>
<examples> <examples>
<example>server_http_ex.cpp.html</example> <example>server_http_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>server_http_1</name> <name>server_http_1</name>
<file>dlib/server/server_http_1.h</file> <file>dlib/server/server_http_1.h</file>
<description> <description>
This is implemented in the obvious way. This is implemented in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>http_1a</name> <name>http_1a</name>
<description>is a typedef for server_iostream_1a extended by server_http_1 </description> <description>is a typedef for server_iostream_1a extended by server_http_1 </description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</extension> </extension>
</extensions> </extensions>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>sockstreambuf</name> <name>sockstreambuf</name>
<file>dlib/sockstreambuf.h</file> <file>dlib/sockstreambuf.h</file>
<spec_file>dlib/sockstreambuf/sockstreambuf_kernel_abstract.h</spec_file> <spec_file>dlib/sockstreambuf/sockstreambuf_kernel_abstract.h</spec_file>
<description> <description>
This object represents a stream buffer for connection objects. This object represents a stream buffer for connection objects.
</description> </description>
<examples> <examples>
<example>sockstreambuf_ex.cpp.html</example> <example>sockstreambuf_ex.cpp.html</example>
<example>sockets_ex_2.cpp.html</example> <example>sockets_ex_2.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>sockstreambuf_kernel_1</name> <name>sockstreambuf_kernel_1</name>
<file>dlib/sockstreambuf/sockstreambuf_kernel_1.h</file> <file>dlib/sockstreambuf/sockstreambuf_kernel_1.h</file>
<description> <description>
This implementation is done in the obvious way without any sort of buffering. This implementation is done in the obvious way without any sort of buffering.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for sockstreambuf_kernel_1</description> <description>is a typedef for sockstreambuf_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
<implementation> <implementation>
<name>sockstreambuf_kernel_2</name> <name>sockstreambuf_kernel_2</name>
<file>dlib/sockstreambuf/sockstreambuf_kernel_2.h</file> <file>dlib/sockstreambuf/sockstreambuf_kernel_2.h</file>
<description> <description>
This implementation is done in the obvious way but <i>with</i> buffering. Thus, it is This implementation is done in the obvious way but <i>with</i> buffering. Thus, it is
considerably faster than the unbuffered version of this object. considerably faster than the unbuffered version of this object.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_2a</name> <name>kernel_2a</name>
<description>is a typedef for sockstreambuf_kernel_2</description> <description>is a typedef for sockstreambuf_kernel_2</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
</components> </components>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
</doc> </doc>
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>Old Change Logs</title> <title>Old Change Logs</title>
<body from_file="old_svnlog.txt"/> <body from_file="old_svnlog.txt"/>
</doc> </doc>
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>Miscellaneous</title> <title>Miscellaneous</title>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<body> <body>
<br/><br/> <br/><br/>
<p> <p>
This page documents library components that don't really fit in anywhere else. This page documents library components that don't really fit in anywhere else.
They all basically follow the same conventions as They all basically follow the same conventions as
the rest of the library. So to get a pipe for example you would need to write something the rest of the library. So to get a pipe for example you would need to write something
like <tt>typedef dlib::pipe::kernel_1a pipe_type;</tt> and from then on make your pipes like like <tt>typedef dlib::pipe::kernel_1a pipe_type;</tt> and from then on make your pipes like
<tt>pipe_type my_pipe(pipe_size);</tt>. <tt>pipe_type my_pipe(pipe_size);</tt>.
</p> </p>
</body> </body>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<menu width="200"> <menu width="200">
<top> <top>
<section> <section>
<name>Objects</name> <name>Objects</name>
<item>bit_stream</item> <item>bit_stream</item>
<item>byte_orderer</item> <item>byte_orderer</item>
<item>std_allocator</item> <item>std_allocator</item>
<item>memory_manager</item> <item>memory_manager</item>
<item>memory_manager_global</item> <item>memory_manager_global</item>
<item>memory_manager_stateless</item> <item>memory_manager_stateless</item>
<item>sync_extension</item> <item>sync_extension</item>
<item>timer</item> <item>timer</item>
<item>timeout</item> <item>timeout</item>
<item>member_function_pointer</item> <item>member_function_pointer</item>
<item>error</item> <item>error</item>
<item>pipe</item> <item>pipe</item>
<item>copy_functor</item> <item>copy_functor</item>
<item>logger</item> <item>logger</item>
<item>uint64</item> <item>uint64</item>
<item>uint32</item> <item>uint32</item>
<item>uint16</item> <item>uint16</item>
<item>uint8</item> <item>uint8</item>
</section> </section>
<section> <section>
<name>Global Functions</name> <name>Global Functions</name>
<item>deserialize</item> <item>deserialize</item>
<item>serialize</item> <item>serialize</item>
<item>zero_extend_cast</item> <item>zero_extend_cast</item>
</section> </section>
<section> <section>
<name>Testing</name> <name>Testing</name>
<item>dlib_testing_suite</item> <item>dlib_testing_suite</item>
</section> </section>
</top> </top>
</menu> </menu>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<components> <components>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>zero_extend_cast</name> <name>zero_extend_cast</name>
<file>dlib/uintn.h</file> <file>dlib/uintn.h</file>
<spec_file link="true">dlib/uintn.h</spec_file> <spec_file link="true">dlib/uintn.h</spec_file>
<description> <description>
This is a global function that performs a zero extending cast This is a global function that performs a zero extending cast
from one integral type to another integral type. from one integral type to another integral type.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>uint32</name> <name>uint32</name>
<file>dlib/uintn.h</file> <file>dlib/uintn.h</file>
<spec_file link="true">dlib/uintn.h</spec_file> <spec_file link="true">dlib/uintn.h</spec_file>
<description> <description>
This is just a typedef for a 32 bit unsigned integer. This is just a typedef for a 32 bit unsigned integer.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>uint8</name> <name>uint8</name>
<file>dlib/uintn.h</file> <file>dlib/uintn.h</file>
<spec_file link="true">dlib/uintn.h</spec_file> <spec_file link="true">dlib/uintn.h</spec_file>
<description> <description>
This is just a typedef for an 8 bit unsigned integer. This is just a typedef for an 8 bit unsigned integer.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>uint16</name> <name>uint16</name>
<file>dlib/uintn.h</file> <file>dlib/uintn.h</file>
<spec_file link="true">dlib/uintn.h</spec_file> <spec_file link="true">dlib/uintn.h</spec_file>
<description> <description>
This is just a typedef for a 16 bit unsigned integer. This is just a typedef for a 16 bit unsigned integer.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>std_allocator</name> <name>std_allocator</name>
<file>dlib/std_allocator.h</file> <file>dlib/std_allocator.h</file>
<spec_file>dlib/std_allocator.h</spec_file> <spec_file>dlib/std_allocator.h</spec_file>
<description> <description>
This object is an implementation of an allocator that conforms to the C++ standard This object is an implementation of an allocator that conforms to the C++ standard
requirements for allocator objects. The M template argument is one of the dlib requirements for allocator objects. The M template argument is one of the dlib
memory manager objects and this allocator implementation will do all of its memory allocations memory manager objects and this allocator implementation will do all of its memory allocations
using whatever dlib memory manager you supply. using whatever dlib memory manager you supply.
<p> <p>
Thus, using this allocator object you can use any of the dlib memory manager objects with Thus, using this allocator object you can use any of the dlib memory manager objects with
the containers in the STL or with any other object that requires an STL style allocator object. the containers in the STL or with any other object that requires an STL style allocator object.
</p> </p>
</description> </description>
<examples> <examples>
<example>std_allocator_ex.cpp.html</example> <example>std_allocator_ex.cpp.html</example>
</examples> </examples>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>uint64</name> <name>uint64</name>
<file>dlib/uintn.h</file> <file>dlib/uintn.h</file>
<spec_file link="true">dlib/uintn.h</spec_file> <spec_file link="true">dlib/uintn.h</spec_file>
<description> <description>
This is just a typedef for a 64 bit unsigned integer. This is just a typedef for a 64 bit unsigned integer.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>copy_functor</name> <name>copy_functor</name>
<file>dlib/algs.h</file> <file>dlib/algs.h</file>
<spec_file link="true">dlib/algs.h</spec_file> <spec_file link="true">dlib/algs.h</spec_file>
<description> <description>
This is a templated function object that makes coppies of something. This is a templated function object that makes coppies of something.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>logger</name> <name>logger</name>
<file>dlib/logger.h</file> <file>dlib/logger.h</file>
<spec_file>dlib/logger/logger_kernel_abstract.h</spec_file> <spec_file>dlib/logger/logger_kernel_abstract.h</spec_file>
<description> <description>
This component is a logging output stream in the style of the log4j This component is a logging output stream in the style of the log4j
logger available for Java. logger available for Java.
Note that unlike most other objects in this library there is only Note that unlike most other objects in this library there is only
one implementation. Thus, to create instances one implementation. Thus, to create instances
of the logger you would simply write logger my_logger("some_name");. of the logger you would simply write logger my_logger("some_name");.
</description> </description>
<examples> <examples>
<example>logger_ex.cpp.html</example> <example>logger_ex.cpp.html</example>
<example>logger_ex_2.cpp.html</example> <example>logger_ex_2.cpp.html</example>
<example>pipe_ex.cpp.html</example> <example>pipe_ex.cpp.html</example>
</examples> </examples>
<extensions> <extensions>
<extension> <extension>
<name>extra_logger_headers</name> <name>extra_logger_headers</name>
<spec_file>dlib/logger/extra_logger_headers.h</spec_file> <spec_file>dlib/logger/extra_logger_headers.h</spec_file>
<description>This extension contains additional logger headers you may chose to use instead of the <description>This extension contains additional logger headers you may chose to use instead of the
default one. </description> default one. </description>
</extension> </extension>
<extension> <extension>
<name>config_file</name> <name>config_file</name>
<spec_file>dlib/logger/logger_config_file.h</spec_file> <spec_file>dlib/logger/logger_config_file.h</spec_file>
<description>This extension provides the configure_loggers_from_file() function <description>This extension provides the configure_loggers_from_file() function
which reads a configuration file from disk that sets up all your loggers.</description> which reads a configuration file from disk that sets up all your loggers.</description>
</extension> </extension>
</extensions> </extensions>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>error</name> <name>error</name>
<file>dlib/error.h</file> <file>dlib/error.h</file>
<spec_file link="true">dlib/error.h</spec_file> <spec_file link="true">dlib/error.h</spec_file>
<description> <description>
This is the base exception class from which all exceptions in this This is the base exception class from which all exceptions in this
library inherit. library inherit.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>pipe</name> <name>pipe</name>
<file>dlib/pipe.h</file> <file>dlib/pipe.h</file>
<spec_file>dlib/pipe/pipe_kernel_abstract.h</spec_file> <spec_file>dlib/pipe/pipe_kernel_abstract.h</spec_file>
<description> <description>
This is a first in first out queue with a fixed maximum size containing items This is a first in first out queue with a fixed maximum size containing items
of type T. It is suitable for passing objects between threads. of type T. It is suitable for passing objects between threads.
</description> </description>
<examples> <examples>
<example>pipe_ex.cpp.html</example> <example>pipe_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>pipe_kernel_1</name> <name>pipe_kernel_1</name>
<file>dlib/pipe/pipe_kernel_1.h</file> <file>dlib/pipe/pipe_kernel_1.h</file>
<description> <description>
This implementation is done using a circular buffer in the obvious way. See the source for details. This implementation is done using a circular buffer in the obvious way. See the source for details.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for pipe_kernel_1</description> <description>is a typedef for pipe_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>member_function_pointer</name> <name>member_function_pointer</name>
<file>dlib/member_function_pointer.h</file> <file>dlib/member_function_pointer.h</file>
<spec_file>dlib/member_function_pointer/member_function_pointer_kernel_abstract.h</spec_file> <spec_file>dlib/member_function_pointer/member_function_pointer_kernel_abstract.h</spec_file>
<description> <description>
This object represents a member function pointer. It is useful because This object represents a member function pointer. It is useful because
instances of this object can be created without needing to know the type instances of this object can be created without needing to know the type
of object whose member function we will be calling. of object whose member function we will be calling.
</description> </description>
<examples> <examples>
<example>member_function_pointer_ex.cpp.html</example> <example>member_function_pointer_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>member_function_pointer_kernel_1</name> <name>member_function_pointer_kernel_1</name>
<file>dlib/member_function_pointer/member_function_pointer_kernel_1.h</file> <file>dlib/member_function_pointer/member_function_pointer_kernel_1.h</file>
<description> <description>
This implementation is done using virtual functions in the obvious way (sorta). This implementation is done using virtual functions in the obvious way (sorta).
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for member_function_pointer_kernel_1</description> <description>is a typedef for member_function_pointer_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>bit_stream</name> <name>bit_stream</name>
<file>dlib/bit_stream.h</file> <file>dlib/bit_stream.h</file>
<spec_file>dlib/bit_stream/bit_stream_kernel_abstract.h</spec_file> <spec_file>dlib/bit_stream/bit_stream_kernel_abstract.h</spec_file>
<description> <description>
This object represents a middle man between a user and the iostream classes that allows single This object represents a middle man between a user and the iostream classes that allows single
bits to be read/written easily from/to the iostream classes bits to be read/written easily from/to the iostream classes
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>bit_stream_kernel_1</name> <name>bit_stream_kernel_1</name>
<file>dlib/bit_stream/bit_stream_kernel_1.h</file> <file>dlib/bit_stream/bit_stream_kernel_1.h</file>
<description> <description>
This implementation is done by buffering single bits in the obvious way. This implementation is done by buffering single bits in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for bit_stream_kernel_1</description> <description>is a typedef for bit_stream_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
<extensions> <extensions>
<extension> <extension>
<name>bit_stream_multi</name> <name>bit_stream_multi</name>
<spec_file>dlib/bit_stream/bit_stream_multi_abstract.h</spec_file> <spec_file>dlib/bit_stream/bit_stream_multi_abstract.h</spec_file>
<description>This extension gives a bit_stream object the ability to read/write multible bits at a time.</description> <description>This extension gives a bit_stream object the ability to read/write multible bits at a time.</description>
<implementations> <implementations>
<implementation> <implementation>
<name>bit_stream_multi_1</name> <name>bit_stream_multi_1</name>
<file>dlib/bit_stream/bit_stream_multi_1.h</file> <file>dlib/bit_stream/bit_stream_multi_1.h</file>
<description>This implementation is done by calling the read/write functions in the bit_stream kernel.</description> <description>This implementation is done by calling the read/write functions in the bit_stream kernel.</description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>multi_1a</name> <name>multi_1a</name>
<description>is a typedef for bit_stream_kernel_1 extended by bit_stream_multi_1</description> <description>is a typedef for bit_stream_kernel_1 extended by bit_stream_multi_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</extension> </extension>
</extensions> </extensions>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>byte_orderer</name> <name>byte_orderer</name>
<file>dlib/byte_orderer.h</file> <file>dlib/byte_orderer.h</file>
<spec_file>dlib/byte_orderer/byte_orderer_kernel_abstract.h</spec_file> <spec_file>dlib/byte_orderer/byte_orderer_kernel_abstract.h</spec_file>
<description> <description>
This object provides a simple type safe mechanism to convert data This object provides a simple type safe mechanism to convert data
to and from network and host byte orders. I.e. to convert things to and from network and host byte orders. I.e. to convert things
between big and little endian byte ordering. between big and little endian byte ordering.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>byte_orderer_kernel_1</name> <name>byte_orderer_kernel_1</name>
<file>dlib/byte_orderer/byte_orderer_kernel_1.h</file> <file>dlib/byte_orderer/byte_orderer_kernel_1.h</file>
<description> <description>
This implementation is done in the obvious way. This implementation is done in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for byte_orderer_kernel_1</description> <description>is a typedef for byte_orderer_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>memory_manager_stateless</name> <name>memory_manager_stateless</name>
<file>dlib/memory_manager_stateless.h</file> <file>dlib/memory_manager_stateless.h</file>
<spec_file>dlib/memory_manager_stateless/memory_manager_stateless_kernel_abstract.h</spec_file> <spec_file>dlib/memory_manager_stateless/memory_manager_stateless_kernel_abstract.h</spec_file>
<description> <description>
This object represents some kind of stateless memory manager or memory pool. This object represents some kind of stateless memory manager or memory pool.
Stateless means that all instances (instances of the same type that is) Stateless means that all instances (instances of the same type that is)
of this object are identical and can be used interchangably. Note that of this object are identical and can be used interchangably. Note that
implementations are allowed to have some shared global state such as a implementations are allowed to have some shared global state such as a
global memory pool. This object is also thread safe. global memory pool. This object is also thread safe.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>memory_manager_stateless_kernel_1</name> <name>memory_manager_stateless_kernel_1</name>
<file>dlib/memory_manager_stateless/memory_manager_stateless_kernel_1.h</file> <file>dlib/memory_manager_stateless/memory_manager_stateless_kernel_1.h</file>
<description> <description>
This implementation just calls new and delete. So it doesn't do anything special. This implementation just calls new and delete. So it doesn't do anything special.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for memory_manager_stateless_kernel_1</description> <description>is a typedef for memory_manager_stateless_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
<implementation> <implementation>
<name>memory_manager_stateless_kernel_2</name> <name>memory_manager_stateless_kernel_2</name>
<file>dlib/memory_manager_stateless/memory_manager_stateless_kernel_2.h</file> <file>dlib/memory_manager_stateless/memory_manager_stateless_kernel_2.h</file>
<description> <description>
This implementation uses a global instance of a <a href="#memory_manager">memory_manager</a> object This implementation uses a global instance of a <a href="#memory_manager">memory_manager</a> object
guarded by a mutex as its implementation. guarded by a mutex as its implementation.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_2_1a</name> <name>kernel_2_1a</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1a</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1a</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_1b</name> <name>kernel_2_1b</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1b</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1b</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_1c</name> <name>kernel_2_1c</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1c</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1c</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_1d</name> <name>kernel_2_1d</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1d</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1d</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_1e</name> <name>kernel_2_1e</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1e</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1e</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_1f</name> <name>kernel_2_1f</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1f</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_1f</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_2a</name> <name>kernel_2_2a</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2a</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2a</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_2b</name> <name>kernel_2_2b</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2b</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2b</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_2c</name> <name>kernel_2_2c</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2c</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2c</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_2d</name> <name>kernel_2_2d</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2d</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2d</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_2e</name> <name>kernel_2_2e</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2e</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_2e</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_3a</name> <name>kernel_2_3a</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3a</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3a</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_3b</name> <name>kernel_2_3b</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3b</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3b</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_3c</name> <name>kernel_2_3c</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3c</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3c</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_3d</name> <name>kernel_2_3d</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3d</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3d</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2_3e</name> <name>kernel_2_3e</name>
<description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3e</description> <description>is a typedef for memory_manager_stateless_kernel_2 that uses memory_manager_3e</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>memory_manager_global</name> <name>memory_manager_global</name>
<file>dlib/memory_manager_global.h</file> <file>dlib/memory_manager_global.h</file>
<spec_file>dlib/memory_manager_global/memory_manager_global_kernel_abstract.h</spec_file> <spec_file>dlib/memory_manager_global/memory_manager_global_kernel_abstract.h</spec_file>
<description> <description>
This object represents some kind of global memory manager or memory pool. This object represents some kind of global memory manager or memory pool.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>memory_manager_global_kernel_1</name> <name>memory_manager_global_kernel_1</name>
<file>dlib/memory_manager_global/memory_manager_global_kernel_1.h</file> <file>dlib/memory_manager_global/memory_manager_global_kernel_1.h</file>
<description> <description>
This is implemented in the obvious way. See the code for details. This is implemented in the obvious way. See the code for details.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for memory_manager_global_kernel_1</description> <description>is a typedef for memory_manager_global_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>memory_manager</name> <name>memory_manager</name>
<file>dlib/memory_manager.h</file> <file>dlib/memory_manager.h</file>
<spec_file>dlib/memory_manager/memory_manager_kernel_abstract.h</spec_file> <spec_file>dlib/memory_manager/memory_manager_kernel_abstract.h</spec_file>
<description> <description>
This object represents a memory pool. This object represents a memory pool.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>memory_manager_kernel_1</name> <name>memory_manager_kernel_1</name>
<file>dlib/memory_manager/memory_manager_kernel_1.h</file> <file>dlib/memory_manager/memory_manager_kernel_1.h</file>
<description> <description>
This memory manager implementation allocates objects one at a time when there are This memory manager implementation allocates objects one at a time when there are
allocation requests. Then when there is a deallocate request the returning object allocation requests. Then when there is a deallocate request the returning object
is placed into a list of free blocks if that list has less than max_pool_size is placed into a list of free blocks if that list has less than max_pool_size
blocks in it. Subsequent allocation requests will be serviced by drawing from the blocks in it. Subsequent allocation requests will be serviced by drawing from the
free list whenever it isn't empty. Array allocations, on the other hand, are not free list whenever it isn't empty. Array allocations, on the other hand, are not
managed at all but are passed directly on to new and delete. managed at all but are passed directly on to new and delete.
<p> <p>
When this object's max_pool_size template parameter is set to 0 it simply calls When this object's max_pool_size template parameter is set to 0 it simply calls
new and delete directly and doesn't function as a memory pool. new and delete directly and doesn't function as a memory pool.
</p> </p>
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 0</description> <description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 0</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_1b</name> <name>kernel_1b</name>
<description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 10</description> <description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 10</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_1c</name> <name>kernel_1c</name>
<description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 100</description> <description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 100</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_1d</name> <name>kernel_1d</name>
<description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 1000</description> <description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 1000</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_1e</name> <name>kernel_1e</name>
<description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 10000</description> <description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 10000</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_1f</name> <name>kernel_1f</name>
<description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 100000</description> <description>is a typedef for memory_manager_kernel_1 with a max_pool_size of 100000</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
<implementation> <implementation>
<name>memory_manager_kernel_2</name> <name>memory_manager_kernel_2</name>
<file>dlib/memory_manager/memory_manager_kernel_2.h</file> <file>dlib/memory_manager/memory_manager_kernel_2.h</file>
<description> <description>
This memory manager implementation allocates memory in blocks of chunk_size*sizeof(T) This memory manager implementation allocates memory in blocks of chunk_size*sizeof(T)
bytes. All the sizeof(T) subblocks are kept in a linked list of free memory blocks bytes. All the sizeof(T) subblocks are kept in a linked list of free memory blocks
and are given out whenever an allocation request occurs. Also, memory is not freed and are given out whenever an allocation request occurs. Also, memory is not freed
until this object is destructed. until this object is destructed.
Also note that array allocations are not managed at all but are passed directly Also note that array allocations are not managed at all but are passed directly
on to new and delete. on to new and delete.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_2a</name> <name>kernel_2a</name>
<description>is a typedef for memory_manager_kernel_2 with a chunk_size of 10</description> <description>is a typedef for memory_manager_kernel_2 with a chunk_size of 10</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2b</name> <name>kernel_2b</name>
<description>is a typedef for memory_manager_kernel_2 with a chunk_size of 100</description> <description>is a typedef for memory_manager_kernel_2 with a chunk_size of 100</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2c</name> <name>kernel_2c</name>
<description>is a typedef for memory_manager_kernel_2 with a chunk_size of 1000</description> <description>is a typedef for memory_manager_kernel_2 with a chunk_size of 1000</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2d</name> <name>kernel_2d</name>
<description>is a typedef for memory_manager_kernel_2 with a chunk_size of 10000</description> <description>is a typedef for memory_manager_kernel_2 with a chunk_size of 10000</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_2e</name> <name>kernel_2e</name>
<description>is a typedef for memory_manager_kernel_2 with a chunk_size of 100000</description> <description>is a typedef for memory_manager_kernel_2 with a chunk_size of 100000</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
<implementation> <implementation>
<name>memory_manager_kernel_3</name> <name>memory_manager_kernel_3</name>
<file>dlib/memory_manager/memory_manager_kernel_3.h</file> <file>dlib/memory_manager/memory_manager_kernel_3.h</file>
<description> <description>
This memory manager implementation allocates memory in blocks of chunk_size*sizeof(T) This memory manager implementation allocates memory in blocks of chunk_size*sizeof(T)
bytes. All the sizeof(T) subblocks are kept in a linked list of free memory blocks bytes. All the sizeof(T) subblocks are kept in a linked list of free memory blocks
and are given out whenever an allocation request occurs. Note that array allocations and are given out whenever an allocation request occurs. Note that array allocations
are managed. So this object is just like kernel_2 but it also pools memory from are managed. So this object is just like kernel_2 but it also pools memory from
array allocations (chunk_size has no effect with respect to array allocations, each array array allocations (chunk_size has no effect with respect to array allocations, each array
is allocated one at a time). is allocated one at a time).
Also, memory is not freed until this object is destructed. Also, memory is not freed until this object is destructed.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_3a</name> <name>kernel_3a</name>
<description>is a typedef for memory_manager_kernel_3 with a chunk_size of 10</description> <description>is a typedef for memory_manager_kernel_3 with a chunk_size of 10</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_3b</name> <name>kernel_3b</name>
<description>is a typedef for memory_manager_kernel_3 with a chunk_size of 100</description> <description>is a typedef for memory_manager_kernel_3 with a chunk_size of 100</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_3c</name> <name>kernel_3c</name>
<description>is a typedef for memory_manager_kernel_3 with a chunk_size of 1000</description> <description>is a typedef for memory_manager_kernel_3 with a chunk_size of 1000</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_3d</name> <name>kernel_3d</name>
<description>is a typedef for memory_manager_kernel_3 with a chunk_size of 10000</description> <description>is a typedef for memory_manager_kernel_3 with a chunk_size of 10000</description>
</typedef> </typedef>
<typedef> <typedef>
<name>kernel_3e</name> <name>kernel_3e</name>
<description>is a typedef for memory_manager_kernel_3 with a chunk_size of 100000</description> <description>is a typedef for memory_manager_kernel_3 with a chunk_size of 100000</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>sync_extension</name> <name>sync_extension</name>
<file>dlib/sync_extension.h</file> <file>dlib/sync_extension.h</file>
<spec_file>dlib/sync_extension/sync_extension_kernel_abstract.h</spec_file> <spec_file>dlib/sync_extension/sync_extension_kernel_abstract.h</spec_file>
<description> <description>
This object represents a general extension to any object. This object gives any object which it extends This object represents a general extension to any object. This object gives any object which it extends
an integrated rmutex and rsignaler object. The extended object will an integrated rmutex and rsignaler object. The extended object will
then be able to be treated as if it was also a <a href="dlib/threads/rmutex_extension_abstract.h.html#rmutex">rmutex</a> and then be able to be treated as if it was also a <a href="dlib/threads/rmutex_extension_abstract.h.html#rmutex">rmutex</a> and
<a href="dlib/threads/rsignaler_extension_abstract.h.html#rsignaler">rsignaler</a>. <a href="dlib/threads/rsignaler_extension_abstract.h.html#rsignaler">rsignaler</a>.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>sync_extension_kernel_1</name> <name>sync_extension_kernel_1</name>
<file>dlib/sync_extension/sync_extension_kernel_1.h</file> <file>dlib/sync_extension/sync_extension_kernel_1.h</file>
<description> <description>
This is implemented using a <a href="dlib/threads/rmutex_extension_abstract.h.html#rmutex">rmutex</a> This is implemented using a <a href="dlib/threads/rmutex_extension_abstract.h.html#rmutex">rmutex</a>
and <a href="dlib/threads/rsignaler_extension_abstract.h.html#rsignaler">rsignaler</a> in the obvious way. and <a href="dlib/threads/rsignaler_extension_abstract.h.html#rsignaler">rsignaler</a> in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for sync_extension_kernel_1</description> <description>is a typedef for sync_extension_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>timeout</name> <name>timeout</name>
<file>dlib/timeout.h</file> <file>dlib/timeout.h</file>
<spec_file>dlib/timeout/timeout_kernel_abstract.h</spec_file> <spec_file>dlib/timeout/timeout_kernel_abstract.h</spec_file>
<description> <description>
This object provides a simple way to implement a timeout. This object provides a simple way to implement a timeout.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>timeout_kernel_1</name> <name>timeout_kernel_1</name>
<file>dlib/timeout/timeout_kernel_1.h</file> <file>dlib/timeout/timeout_kernel_1.h</file>
<description> <description>
This is implemented in the obvious way using virtual functions and templates. This is implemented in the obvious way using virtual functions and templates.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for timeout_kernel_1</description> <description>is a typedef for timeout_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>timer</name> <name>timer</name>
<file>dlib/timer.h</file> <file>dlib/timer.h</file>
<spec_file>dlib/timer/timer_kernel_abstract.h</spec_file> <spec_file>dlib/timer/timer_kernel_abstract.h</spec_file>
<description> <description>
This object represents a timer that will call a given member function This object represents a timer that will call a given member function
repeatedly at regular intervals. repeatedly at regular intervals.
</description> </description>
<examples> <examples>
<example>timer_ex.cpp.html</example> <example>timer_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>timer_kernel_1</name> <name>timer_kernel_1</name>
<file>dlib/timer/timer_kernel_1.h</file> <file>dlib/timer/timer_kernel_1.h</file>
<description> <description>
This is implemented in the obvious way. This is implemented in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for timer_kernel_1</description> <description>is a typedef for timer_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
<implementation> <implementation>
<name>timer_kernel_2</name> <name>timer_kernel_2</name>
<file>dlib/timer/timer_kernel_2.h</file> <file>dlib/timer/timer_kernel_2.h</file>
<description> <description>
This implemenation has a single master thread that does all the waiting. This implemenation has a single master thread that does all the waiting.
This master thread creates and dispatches threads to specific timer objects This master thread creates and dispatches threads to specific timer objects
when they need to run their action functions. When a timer object isn't executing when they need to run their action functions. When a timer object isn't executing
its action function then it doesn't have any thread allocated to it at all. So its action function then it doesn't have any thread allocated to it at all. So
it is much more efficient than timer_kernel_1. it is much more efficient than timer_kernel_1.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_2a</name> <name>kernel_2a</name>
<description>is a typedef for timer_kernel_2</description> <description>is a typedef for timer_kernel_2</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>deserialize</name> <name>deserialize</name>
<file>dlib/serialize.h</file> <file>dlib/serialize.h</file>
<spec_file>dlib/serialize.h</spec_file> <spec_file>dlib/serialize.h</spec_file>
<description> <description>
This is actually a set of overloaded functions which provide the ability to restore an object's state This is actually a set of overloaded functions which provide the ability to restore an object's state
from an input stream. Currently all dlib container classes, non pointer C++ intrinsics, std::string, from an input stream. Currently all dlib container classes, non pointer C++ intrinsics, std::string,
std::vector, std::map, std::complex, dlib::bigint, dlib::uint64, C style arrays, and dlib::vector objects are serializable. std::vector, std::map, std::complex, dlib::bigint, dlib::uint64, C style arrays, and dlib::vector objects are serializable.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>serialize</name> <name>serialize</name>
<file>dlib/serialize.h</file> <file>dlib/serialize.h</file>
<spec_file>dlib/serialize.h</spec_file> <spec_file>dlib/serialize.h</spec_file>
<description> <description>
This is actually a set of overloaded functions which provide the ability to save an object's state This is actually a set of overloaded functions which provide the ability to save an object's state
to an output stream. Currently all dlib container classes, non pointer C++ intrinsics, std::string, to an output stream. Currently all dlib container classes, non pointer C++ intrinsics, std::string,
std::vector, std::map, std::complex, dlib::bigint, dlib::uint64, C style arrays, and dlib::vector objects are serializable. std::vector, std::map, std::complex, dlib::bigint, dlib::uint64, C style arrays, and dlib::vector objects are serializable.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>dlib_testing_suite</name> <name>dlib_testing_suite</name>
<description> <description>
<p> <p>
This library comes with a command line driven regression test suite. All the testing code This library comes with a command line driven regression test suite. All the testing code
is located in the <chm>dlib/test</chm><web><a href="dlib/test">dlib/test</a></web> folder. If you want to build it and test the library on your is located in the <chm>dlib/test</chm><web><a href="dlib/test">dlib/test</a></web> folder. If you want to build it and test the library on your
system you can use the makefile at <a href="dlib/test/makefile">dlib/test/makefile</a> (you may system you can use the makefile at <a href="dlib/test/makefile">dlib/test/makefile</a> (you may
have to edit it to make it work on your system) or use the CMake CMakeLists.txt file at have to edit it to make it work on your system) or use the CMake CMakeLists.txt file at
<a href="dlib/test/CMakeLists.txt.html">dlib/test/CMakeLists.txt</a> to build it. <a href="dlib/test/CMakeLists.txt.html">dlib/test/CMakeLists.txt</a> to build it.
</p> </p>
<p> <p>
What you may find more useful however is the testing framework itself. It uses a faily simple What you may find more useful however is the testing framework itself. It uses a faily simple
and modular design. Each test is contained in its own cpp file and when compiled into the and modular design. Each test is contained in its own cpp file and when compiled into the
program it automatically shows up in the list of tests to run. If you want to use the program it automatically shows up in the list of tests to run. If you want to use the
testing framework all you need to do is add the files <a href="dlib/test/tester.h.html">dlib/test/tester.h</a>, testing framework all you need to do is add the files <a href="dlib/test/tester.h.html">dlib/test/tester.h</a>,
<a href="dlib/test/tester.cpp.html">dlib/test/tester.cpp</a>, and <a href="dlib/test/main.cpp.html">dlib/test/main.cpp</a> <a href="dlib/test/tester.cpp.html">dlib/test/tester.cpp</a>, and <a href="dlib/test/main.cpp.html">dlib/test/main.cpp</a>
to your project and then add cpp files that contain your tests (see to your project and then add cpp files that contain your tests (see
<a href="dlib/test/example.cpp.html">dlib/test/example.cpp</a> and <a href="dlib/test/example.cpp.html">dlib/test/example.cpp</a> and
<a href="dlib/test/example_args.cpp.html">dlib/test/example_args.cpp</a> <a href="dlib/test/example_args.cpp.html">dlib/test/example_args.cpp</a>
for some examples). for some examples).
</p> </p>
<p> <p>
From the command line you can choose to run all the installed tests, enable or disable the loggers, From the command line you can choose to run all the installed tests, enable or disable the loggers,
set various logging levels, specify how many times to run the tests, or pick just one or two tests set various logging levels, specify how many times to run the tests, or pick just one or two tests
to run at a time rather than the entire suite. to run at a time rather than the entire suite.
</p> </p>
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
</components> </components>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
</doc> </doc>
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>Parsing</title> <title>Parsing</title>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<body> <body>
<br/><br/> <br/><br/>
<p> <p>
This page documents the objects and functions that in some way deal with parsing or otherwise This page documents the objects and functions that in some way deal with parsing or otherwise
manipulating text. manipulating text.
Everything here follows the same conventions as the rest of the library. Everything here follows the same conventions as the rest of the library.
</p> </p>
</body> </body>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<menu width="150"> <menu width="150">
<top> <top>
<section> <section>
<name>Objects</name> <name>Objects</name>
<item>cmd_line_parser</item> <item>cmd_line_parser</item>
<item>config_reader</item> <item>config_reader</item>
<item>cpp_pretty_printer</item> <item>cpp_pretty_printer</item>
<item>cpp_tokenizer</item> <item>cpp_tokenizer</item>
<item>tokenizer</item> <item>tokenizer</item>
<item>xml_parser</item> <item>xml_parser</item>
<item>base64</item> <item>base64</item>
<item>unichar</item> <item>unichar</item>
<item>ustring</item> <item>ustring</item>
<item>basic_utf8_ifstream</item> <item>basic_utf8_ifstream</item>
</section> </section>
<section> <section>
<name>Global Functions</name> <name>Global Functions</name>
<item>string_cast</item> <item>string_cast</item>
<item>cast_to_string</item> <item>cast_to_string</item>
<item>cast_to_wstring</item> <item>cast_to_wstring</item>
<item>wrap_string</item> <item>wrap_string</item>
<item>narrow</item> <item>narrow</item>
<item>trim</item> <item>trim</item>
<item>ltrim</item> <item>ltrim</item>
<item>rtrim</item> <item>rtrim</item>
<item>pad</item> <item>pad</item>
<item>lpad</item> <item>lpad</item>
<item>rpad</item> <item>rpad</item>
<item>left_substr</item> <item>left_substr</item>
<item>right_substr</item> <item>right_substr</item>
<item>tolower</item> <item>tolower</item>
<item>toupper</item> <item>toupper</item>
<item>convert_utf8_to_utf32</item> <item>convert_utf8_to_utf32</item>
<item>is_combining_char</item> <item>is_combining_char</item>
</section> </section>
</top> </top>
</menu> </menu>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<components> <components>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>toupper</name> <name>toupper</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to convert a string to all uppercase. This is a function to convert a string to all uppercase.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>tolower</name> <name>tolower</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to convert a string to all lowercase. This is a function to convert a string to all lowercase.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>right_substr</name> <name>right_substr</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to return the part of a string to the right of a user supplied delimiter. This is a function to return the part of a string to the right of a user supplied delimiter.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>left_substr</name> <name>left_substr</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to return the part of a string to the left of a user supplied delimiter. This is a function to return the part of a string to the left of a user supplied delimiter.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>rpad</name> <name>rpad</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to pad whitespace (or user specfied characters) onto the right most end of a string. This is a function to pad whitespace (or user specfied characters) onto the right most end of a string.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>lpad</name> <name>lpad</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to pad whitespace (or user specfied characters) onto the left most end of a string. This is a function to pad whitespace (or user specfied characters) onto the left most end of a string.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>pad</name> <name>pad</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to pad whitespace (or user specfied characters) onto the ends of a string. This is a function to pad whitespace (or user specfied characters) onto the ends of a string.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>rtrim</name> <name>rtrim</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to remove the whitespace (or user specfied characters) from the right most end of a string. This is a function to remove the whitespace (or user specfied characters) from the right most end of a string.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>ltrim</name> <name>ltrim</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to remove the whitespace (or user specfied characters) from the left most end of a string. This is a function to remove the whitespace (or user specfied characters) from the left most end of a string.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>trim</name> <name>trim</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function to remove the whitespace (or user specfied characters) from the ends of a string. This is a function to remove the whitespace (or user specfied characters) from the ends of a string.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>narrow</name> <name>narrow</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
This is a function for converting a string of type std::string or std::wstring This is a function for converting a string of type std::string or std::wstring
to a plain std::string. to a plain std::string.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>wrap_string</name> <name>wrap_string</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
wrap_string is a function that takes a string and breaks it into a number of wrap_string is a function that takes a string and breaks it into a number of
lines of a given length. You can use this to make a string lines of a given length. You can use this to make a string
fit nicely into a command prompt window for example. fit nicely into a command prompt window for example.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>cast_to_wstring</name> <name>cast_to_wstring</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
cast_to_string is a templated function which makes it easy to convert arbitrary objects to cast_to_string is a templated function which makes it easy to convert arbitrary objects to
std::wstring strings. The types supported are any types that can be written to std::wostream via std::wstring strings. The types supported are any types that can be written to std::wostream via
operator&lt;&lt;. operator&lt;&lt;.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>cast_to_string</name> <name>cast_to_string</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
cast_to_string is a templated function which makes it easy to convert arbitrary objects to cast_to_string is a templated function which makes it easy to convert arbitrary objects to
std::string strings. The types supported are any types that can be written to std::ostream via std::string strings. The types supported are any types that can be written to std::ostream via
operator&lt;&lt;. operator&lt;&lt;.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>string_cast</name> <name>string_cast</name>
<file>dlib/string.h</file> <file>dlib/string.h</file>
<spec_file link="true">dlib/string/string_abstract.h</spec_file> <spec_file link="true">dlib/string/string_abstract.h</spec_file>
<description> <description>
string_cast is a templated function which make it easy to convert strings to string_cast is a templated function which make it easy to convert strings to
other types. The types supported are any types that can be read by the basic_istream operator>>. It other types. The types supported are any types that can be read by the basic_istream operator>>. It
also supports casting between wstring, string, and ustring objects. also supports casting between wstring, string, and ustring objects.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>unichar</name> <name>unichar</name>
<file>dlib/unicode.h</file> <file>dlib/unicode.h</file>
<spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file> <spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file>
<description> <description>
This is a typedef for an unsigned 32bit integer which we use to store This is a typedef for an unsigned 32bit integer which we use to store
Unicode values. Unicode values.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>basic_utf8_ifstream</name> <name>basic_utf8_ifstream</name>
<file>dlib/unicode.h</file> <file>dlib/unicode.h</file>
<spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file> <spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file>
<description> <description>
This object represents an input file stream much like the This object represents an input file stream much like the
normal std::ifstream except that it knows how to read UTF-8 normal std::ifstream except that it knows how to read UTF-8
data. So when you read characters out of this stream it will data. So when you read characters out of this stream it will
automatically convert them from the UTF-8 multibyte encoding automatically convert them from the UTF-8 multibyte encoding
into a fixed width wide character encoding. into a fixed width wide character encoding.
<p> <p>
There are also two typedefs of this object. The first is utf8_wifstream which is a There are also two typedefs of this object. The first is utf8_wifstream which is a
typedef for wchar_t as the wide character to read into. The second is utf8_uifstream typedef for wchar_t as the wide character to read into. The second is utf8_uifstream
which uses unichar instead of wchar_t. which uses unichar instead of wchar_t.
</p> </p>
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>ustring</name> <name>ustring</name>
<file>dlib/unicode.h</file> <file>dlib/unicode.h</file>
<spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file> <spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file>
<description> <description>
This is a typedef for a std::basic_string&lt;unichar&gt;. That is, it is a typedef This is a typedef for a std::basic_string&lt;unichar&gt;. That is, it is a typedef
for a string object that stores unichar Unicode characters. for a string object that stores unichar Unicode characters.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>is_combining_char</name> <name>is_combining_char</name>
<file>dlib/unicode.h</file> <file>dlib/unicode.h</file>
<spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file> <spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file>
<description> <description>
This is a global function that can tell you if a character is a Unicode This is a global function that can tell you if a character is a Unicode
combining character or not. combining character or not.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>convert_utf8_to_utf32</name> <name>convert_utf8_to_utf32</name>
<file>dlib/unicode.h</file> <file>dlib/unicode.h</file>
<spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file> <spec_file link="true">dlib/unicode/unicode_abstract.h</spec_file>
<description> <description>
This is a global function that can convert UTF-8 strings into strings This is a global function that can convert UTF-8 strings into strings
of 32bit unichar characters. of 32bit unichar characters.
</description> </description>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>base64</name> <name>base64</name>
<file>dlib/base64.h</file> <file>dlib/base64.h</file>
<spec_file>dlib/base64/base64_kernel_abstract.h</spec_file> <spec_file>dlib/base64/base64_kernel_abstract.h</spec_file>
<description> <description>
This object allows you to encode and decode data to and from This object allows you to encode and decode data to and from
the Base64 Content-Transfer-Encoding defined in section 6.8 of the Base64 Content-Transfer-Encoding defined in section 6.8 of
rfc2045. rfc2045.
</description> </description>
<examples> <examples>
<example>file_to_code_ex.cpp.html</example> <example>file_to_code_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>base64_kernel_1</name> <name>base64_kernel_1</name>
<file>dlib/base64/base64_kernel_1.h</file> <file>dlib/base64/base64_kernel_1.h</file>
<description> <description>
This implementation is done using a lookup table in the obvious way. This implementation is done using a lookup table in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for base64_kernel_1</description> <description>is a typedef for base64_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>cmd_line_parser</name> <name>cmd_line_parser</name>
<file>dlib/cmd_line_parser.h</file> <file>dlib/cmd_line_parser.h</file>
<spec_file>dlib/cmd_line_parser/cmd_line_parser_kernel_abstract.h</spec_file> <spec_file>dlib/cmd_line_parser/cmd_line_parser_kernel_abstract.h</spec_file>
<description> <description>
This object allows you to easily parse a command line. This object allows you to easily parse a command line.
</description> </description>
<examples> <examples>
<example>compress_stream_ex.cpp.html</example> <example>compress_stream_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>cmd_line_parser_kernel_1</name> <name>cmd_line_parser_kernel_1</name>
<file>dlib/cmd_line_parser/cmd_line_parser_kernel_1.h</file> <file>dlib/cmd_line_parser/cmd_line_parser_kernel_1.h</file>
<description> <description>
This implementation uses the <a href="containers.html#map">map</a> and <a href="containers.html#sequence">sequence</a> This implementation uses the <a href="containers.html#map">map</a> and <a href="containers.html#sequence">sequence</a>
containers to keep track of the command line options and arguments. For further details see the above link. containers to keep track of the command line options and arguments. For further details see the above link.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for cmd_line_parser_kernel_1 that uses map_kernel_1a and sequence_kernel_2a</description> <description>is a typedef for cmd_line_parser_kernel_1 that uses map_kernel_1a and sequence_kernel_2a</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
<extensions> <extensions>
<extension> <extension>
<name>cmd_line_parser_check</name> <name>cmd_line_parser_check</name>
<spec_file>dlib/cmd_line_parser/cmd_line_parser_check_abstract.h</spec_file> <spec_file>dlib/cmd_line_parser/cmd_line_parser_check_abstract.h</spec_file>
<description> <description>
This gives a cmd_line_parser object the ability to easily perform various This gives a cmd_line_parser object the ability to easily perform various
kinds of validation on the command line input. kinds of validation on the command line input.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>cmd_line_parser_check_1</name> <name>cmd_line_parser_check_1</name>
<file>dlib/cmd_line_parser/cmd_line_parser_check_1.h</file> <file>dlib/cmd_line_parser/cmd_line_parser_check_1.h</file>
<description>This implementation is done in the obvious way. See the source for details</description> <description>This implementation is done in the obvious way. See the source for details</description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>check_1a</name> <name>check_1a</name>
<description>is a typedef for cmd_line_parser_print_1 extended by cmd_line_parser_check_1</description> <description>is a typedef for cmd_line_parser_print_1 extended by cmd_line_parser_check_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</extension> </extension>
<extension> <extension>
<name>cmd_line_parser_print</name> <name>cmd_line_parser_print</name>
<spec_file>dlib/cmd_line_parser/cmd_line_parser_print_abstract.h</spec_file> <spec_file>dlib/cmd_line_parser/cmd_line_parser_print_abstract.h</spec_file>
<description>This extension gives a cmd_line_parser object the ability to print its command line options <description>This extension gives a cmd_line_parser object the ability to print its command line options
in a nice format.</description> in a nice format.</description>
<implementations> <implementations>
<implementation> <implementation>
<name>cmd_line_parser_print_1</name> <name>cmd_line_parser_print_1</name>
<file>dlib/cmd_line_parser/cmd_line_parser_print_1.h</file> <file>dlib/cmd_line_parser/cmd_line_parser_print_1.h</file>
<description>This implementation is done by enumerating the options of the parser and printing them.</description> <description>This implementation is done by enumerating the options of the parser and printing them.</description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>print_1a</name> <name>print_1a</name>
<description>is a typedef for cmd_line_parser_kernel_1 extended by cmd_line_parser_print_1</description> <description>is a typedef for cmd_line_parser_kernel_1 extended by cmd_line_parser_print_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</extension> </extension>
</extensions> </extensions>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>config_reader</name> <name>config_reader</name>
<file>dlib/config_reader.h</file> <file>dlib/config_reader.h</file>
<spec_file>dlib/config_reader/config_reader_kernel_abstract.h</spec_file> <spec_file>dlib/config_reader/config_reader_kernel_abstract.h</spec_file>
<description> <description>
This object represents something which is intended to be used to read This object represents something which is intended to be used to read
text configuration files. text configuration files.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>config_reader_kernel_1</name> <name>config_reader_kernel_1</name>
<file>dlib/config_reader/config_reader_kernel_1.h</file> <file>dlib/config_reader/config_reader_kernel_1.h</file>
<description> <description>
This implementation is done using the <a href="containers.html#map">map</a> object in the obvious way. This implementation is done using the <a href="containers.html#map">map</a> object in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for config_reader_kernel_1 that uses map_kernel_1b</description> <description>is a typedef for config_reader_kernel_1 that uses map_kernel_1b</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
<extensions> <extensions>
<extension> <extension>
<name>config_reader_thread_safe</name> <name>config_reader_thread_safe</name>
<spec_file>dlib/config_reader/config_reader_thread_safe_abstract.h</spec_file> <spec_file>dlib/config_reader/config_reader_thread_safe_abstract.h</spec_file>
<description> <description>
This object extends a normal config_reader by simply wrapping all This object extends a normal config_reader by simply wrapping all
its member functions inside mutex locks to make it safe to use its member functions inside mutex locks to make it safe to use
in a threaded program. in a threaded program.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>config_reader_thread_safe_1</name> <name>config_reader_thread_safe_1</name>
<file>dlib/config_reader/config_reader_thread_safe_1.h</file> <file>dlib/config_reader/config_reader_thread_safe_1.h</file>
<description>This implementation is done in the obvious way. See the source for details</description> <description>This implementation is done in the obvious way. See the source for details</description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>thread_safe_1a</name> <name>thread_safe_1a</name>
<description>is a typedef for config_reader_kernel_1 extended by config_reader_thread_safe_1</description> <description>is a typedef for config_reader_kernel_1 extended by config_reader_thread_safe_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</extension> </extension>
</extensions> </extensions>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component> <component>
<name>cpp_pretty_printer</name> <name>cpp_pretty_printer</name>
<file>dlib/cpp_pretty_printer.h</file> <file>dlib/cpp_pretty_printer.h</file>
<spec_file>dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_abstract.h</spec_file> <spec_file>dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_abstract.h</spec_file>
<description> <description>
This object represents an HTML pretty printer for C++ source code. This object represents an HTML pretty printer for C++ source code.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>cpp_pretty_printer_kernel_1</name> <name>cpp_pretty_printer_kernel_1</name>
<file>dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_1.h</file> <file>dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_1.h</file>
<description> <description>
This is implemented by using the <a href="#cpp_tokenizer">cpp_tokenizer</a> object. This is implemented by using the <a href="#cpp_tokenizer">cpp_tokenizer</a> object.
This is the pretty printer I use on all the source in this library. It applies a color scheme, turns This is the pretty printer I use on all the source in this library. It applies a color scheme, turns
include directives such as #include "file.h" into links to file.h.html and puts HTML anchor points include directives such as #include "file.h" into links to file.h.html and puts HTML anchor points
on function and class declarations. It also looks for comments starting with /*!A and puts an anchor on function and class declarations. It also looks for comments starting with /*!A and puts an anchor
before the comment using the word following the A as the name of the anchor. before the comment using the word following the A as the name of the anchor.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for cpp_pretty_printer_kernel_1</description> <description>is a typedef for cpp_pretty_printer_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
<implementation> <implementation>
<name>cpp_pretty_printer_kernel_2</name> <name>cpp_pretty_printer_kernel_2</name>
<file>dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_2.h</file> <file>dlib/cpp_pretty_printer/cpp_pretty_printer_kernel_2.h</file>
<description> <description>
This is implemented by using the <a href="#cpp_tokenizer">cpp_tokenizer</a> object. This is implemented by using the <a href="#cpp_tokenizer">cpp_tokenizer</a> object.
It applies a black and white color scheme suitable It applies a black and white color scheme suitable
for printing on a black and white printer. It also places the document title for printing on a black and white printer. It also places the document title
prominently at the top of the pretty printed source file. prominently at the top of the pretty printed source file.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_2a</name> <name>kernel_2a</name>
<description>is a typedef for cpp_pretty_printer_kernel_2</description> <description>is a typedef for cpp_pretty_printer_kernel_2</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>cpp_tokenizer</name> <name>cpp_tokenizer</name>
<file>dlib/cpp_tokenizer.h</file> <file>dlib/cpp_tokenizer.h</file>
<spec_file>dlib/cpp_tokenizer/cpp_tokenizer_kernel_abstract.h</spec_file> <spec_file>dlib/cpp_tokenizer/cpp_tokenizer_kernel_abstract.h</spec_file>
<description> <description>
This object represents a simple tokenizer for C++ source code. This object represents a simple tokenizer for C++ source code.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>cpp_tokenizer_kernel_1</name> <name>cpp_tokenizer_kernel_1</name>
<file>dlib/cpp_tokenizer/cpp_tokenizer_kernel_1.h</file> <file>dlib/cpp_tokenizer/cpp_tokenizer_kernel_1.h</file>
<description> <description>
This is implemented by using the <a href="#tokenizer">tokenizer</a> object in the obvious way. This is implemented by using the <a href="#tokenizer">tokenizer</a> object in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for cpp_tokenizer_kernel_1</description> <description>is a typedef for cpp_tokenizer_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>tokenizer</name> <name>tokenizer</name>
<file>dlib/tokenizer.h</file> <file>dlib/tokenizer.h</file>
<spec_file>dlib/tokenizer/tokenizer_kernel_abstract.h</spec_file> <spec_file>dlib/tokenizer/tokenizer_kernel_abstract.h</spec_file>
<description> <description>
This object represents a simple tokenizer for textual data. This object represents a simple tokenizer for textual data.
</description> </description>
<implementations> <implementations>
<implementation> <implementation>
<name>tokenizer_kernel_1</name> <name>tokenizer_kernel_1</name>
<file>dlib/tokenizer/tokenizer_kernel_1.h</file> <file>dlib/tokenizer/tokenizer_kernel_1.h</file>
<description> <description>
This is implemented in the obvious way. This is implemented in the obvious way.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for tokenizer_kernel_1</description> <description>is a typedef for tokenizer_kernel_1</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
<component checked="true"> <component checked="true">
<name>xml_parser</name> <name>xml_parser</name>
<file>dlib/xml_parser.h</file> <file>dlib/xml_parser.h</file>
<spec_file>dlib/xml_parser/xml_parser_kernel_abstract.h</spec_file> <spec_file>dlib/xml_parser/xml_parser_kernel_abstract.h</spec_file>
<description> <description>
This object represents a simple SAX style event driven XML parser. This object represents a simple SAX style event driven XML parser.
It takes its input from an input stream object and sends events to all It takes its input from an input stream object and sends events to all
registered document_handler and error_handler objects. registered document_handler and error_handler objects.
<br/><br/> <br/><br/>
The xml_parser object also uses the interface classes The xml_parser object also uses the interface classes
<a href="dlib/xml_parser/xml_parser_kernel_interfaces.h.html#document_handler">document_handler</a> <a href="dlib/xml_parser/xml_parser_kernel_interfaces.h.html#document_handler">document_handler</a>
and and
<a href="dlib/xml_parser/xml_parser_kernel_interfaces.h.html#error_handler">error_handler</a>. <a href="dlib/xml_parser/xml_parser_kernel_interfaces.h.html#error_handler">error_handler</a>.
Subclasses of these classes are passed to the xml_parser which generates events while it's Subclasses of these classes are passed to the xml_parser which generates events while it's
parsing and sends them to the appropriate handler. parsing and sends them to the appropriate handler.
</description> </description>
<examples> <examples>
<example>xml_parser_ex.cpp.html</example> <example>xml_parser_ex.cpp.html</example>
</examples> </examples>
<implementations> <implementations>
<implementation> <implementation>
<name>xml_parser_kernel_1</name> <name>xml_parser_kernel_1</name>
<file>dlib/xml_parser/xml_parser_kernel_1.h</file> <file>dlib/xml_parser/xml_parser_kernel_1.h</file>
<description> <description>
This implementation is done using a <a href="containers.html#stack">stack</a> (as opposed to recursive descent) to parse This implementation is done using a <a href="containers.html#stack">stack</a> (as opposed to recursive descent) to parse
xml documents. It also uses a <a href="containers.html#map">map</a> to implement the attribute_list interface and xml documents. It also uses a <a href="containers.html#map">map</a> to implement the attribute_list interface and
internally uses the <a href="containers.html#sequence">sequence</a> object to keep track of all registered document and error internally uses the <a href="containers.html#sequence">sequence</a> object to keep track of all registered document and error
handlers. handlers.
</description> </description>
<typedefs> <typedefs>
<typedef> <typedef>
<name>kernel_1a</name> <name>kernel_1a</name>
<description>is a typedef for xml_parser_kernel_1 that uses map_kernel_1a, stack_kernel_1a, and sequence_kernel_2a</description> <description>is a typedef for xml_parser_kernel_1 that uses map_kernel_1a, stack_kernel_1a, and sequence_kernel_2a</description>
</typedef> </typedef>
</typedefs> </typedefs>
</implementation> </implementation>
</implementations> </implementations>
</component> </component>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
</components> </components>
<!-- ************************************************************************* --> <!-- ************************************************************************* -->
</doc> </doc>
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<doc> <doc>
<title>Release notes</title> <title>Release notes</title>
<body> <body>
<release_notes> <release_notes>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<current> <current>
New Stuff: New Stuff:
- Added the remove_row and remove_col matrix functions. Also made all - Added the remove_row and remove_col matrix functions. Also made all
three of the above functions capable of taking arguments at run time three of the above functions capable of taking arguments at run time
as well as compile time. as well as compile time.
- Added the ability to cap the number of dictionary vectors used by the krls - Added the ability to cap the number of dictionary vectors used by the krls
and kcentroid object at a user specified number. This changes the and kcentroid object at a user specified number. This changes the
serialization format of the objects. serialization format of the objects.
- Added the pick_initial_centers() function - Added the pick_initial_centers() function
- Merged in Keita Mochizuki's unicode patches to the GUI components - Merged in Keita Mochizuki's unicode patches to the GUI components
- Added the running_stats object - Added the running_stats object
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the interface to the krls and kcentroid objects somewhat. - Changed the interface to the krls and kcentroid objects somewhat.
- All of the style objects in the GUI part of the library now use - All of the style objects in the GUI part of the library now use
dlib::ustring instead of std::string. This only matters to you if dlib::ustring instead of std::string. This only matters to you if
you have made your own style objects. you have made your own style objects.
Bug fixes: Bug fixes:
- Fixed an aliasing bug in the set_subm(), set_rowm(), and set_colm() - Fixed an aliasing bug in the set_subm(), set_rowm(), and set_colm()
functions. It was possible that you could get incorrect results functions. It was possible that you could get incorrect results
if you used these functions to copy one part of a matrix to another if you used these functions to copy one part of a matrix to another
part of the same matrix if the two areas overlapped. part of the same matrix if the two areas overlapped.
- Fixed a minor numerical error in the krls code so now it gets slightly - Fixed a minor numerical error in the krls code so now it gets slightly
better results. better results.
Other: Other:
- Made the types generated by the matrix operations a lot shorter. This - Made the types generated by the matrix operations a lot shorter. This
avoids some compiler warnings from visual studio and even some potential avoids some compiler warnings from visual studio and even some potential
internal compiler errors in some instances. internal compiler errors in some instances.
</current> </current>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="17.5" date="Jun 2, 2008"> <old name="17.5" date="Jun 2, 2008">
New Stuff: New Stuff:
- Added some macros that allow dlib to create a stack trace - Added some macros that allow dlib to create a stack trace
- Added the wrap_function and is_function templates. - Added the wrap_function and is_function templates.
- Added two new events to the text_field object. One for detecting when the - Added two new events to the text_field object. One for detecting when the
user hits enter and another for detecting when input focus is lost. user hits enter and another for detecting when input focus is lost.
- Machine Learning - Machine Learning
- Added a kernel based centroid estimator/novelty detector - Added a kernel based centroid estimator/novelty detector
- Added a kernel based k-means clustering algorithm - Added a kernel based k-means clustering algorithm
- Numerical - Numerical
- Added an identity_matrix() function that can take a runtime defined size. - Added an identity_matrix() function that can take a runtime defined size.
- Added a bunch of unconstrained optimization stuff to the library. - Added a bunch of unconstrained optimization stuff to the library.
It now has a conjugate gradient optimization algorithm as well as It now has a conjugate gradient optimization algorithm as well as
a quasi-newton algorithm. a quasi-newton algorithm.
- Added the set_subm, set_rowm, and set_colm functions. - Added the set_subm, set_rowm, and set_colm functions.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- In the krls object: Added a requires clause to the set_tolerance() member - In the krls object: Added a requires clause to the set_tolerance() member
function and renamed clear() to clear_dictionary(). function and renamed clear() to clear_dictionary().
Bug fixes: Bug fixes:
- Fixed a bug in the requires clause of the subm() function. It was - Fixed a bug in the requires clause of the subm() function. It was
more restrictive than it should have been. more restrictive than it should have been.
Other: Other:
- Added example programs for the krls object as well as the new - Added example programs for the krls object as well as the new
kcentroid and kkmeans objects. kcentroid and kkmeans objects.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="17.4" date="May 12, 2008"> <old name="17.4" date="May 12, 2008">
New Stuff: New Stuff:
- Added an implementation of the kernel recursive least squares algorithm - Added an implementation of the kernel recursive least squares algorithm
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Broke backwards compatability in the directed_graph_drawer's serialization - Broke backwards compatability in the directed_graph_drawer's serialization
format when I fixed the bug below. format when I fixed the bug below.
Bug fixes: Bug fixes:
- Fixed two bugs in the directed_graph_drawer widget. First, it sometimes - Fixed two bugs in the directed_graph_drawer widget. First, it sometimes
threw a dlib::fatal_error due to a race condition. Second, the color of threw a dlib::fatal_error due to a race condition. Second, the color of
the nodes wasn't being serialized when save_graph() was called. the nodes wasn't being serialized when save_graph() was called.
- Made vector_to_matrix() work for std::vector objects that have non-default - Made vector_to_matrix() work for std::vector objects that have non-default
allocators. allocators.
Other: Other:
- Added some stuff to make people get a really obvious error message - Added some stuff to make people get a really obvious error message
when they set up the include path incorrectly. when they set up the include path incorrectly.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="17.3" date="Apr 28, 2008"> <old name="17.3" date="Apr 28, 2008">
New Stuff: New Stuff:
- Added the vector_to_matrix() function. - Added the vector_to_matrix() function.
- Added a cholesky_decomposition() function. - Added a cholesky_decomposition() function.
- Added the toggle_button GUI widget - Added the toggle_button GUI widget
- Added a default toggle button style as well as check box and - Added a default toggle button style as well as check box and
radio button styles. radio button styles.
- Added a single click event to list_box - Added a single click event to list_box
- Added a save_file_box() and open_existing_file_box() function. - Added a save_file_box() and open_existing_file_box() function.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the check_box and radio_button widgets to be specializations of - Changed the check_box and radio_button widgets to be specializations of
the new toggle_button object. This is a nearly backwards compatible the new toggle_button object. This is a nearly backwards compatible
change except that the events registered to check_box and radio_button change except that the events registered to check_box and radio_button
clicks must now take the form void event(toggle_button&amp;) or clicks must now take the form void event(toggle_button&amp;) or
void event(void) instead of the previous void event(check_box&amp;) and void event(void) instead of the previous void event(check_box&amp;) and
void event(radio_button&amp;). void event(radio_button&amp;).
- Removed the is_mouse_over bool from the button_style::draw_button() - Removed the is_mouse_over bool from the button_style::draw_button()
function. function.
Bug fixes: Bug fixes:
- Fixed a compiler error in mingw. - Fixed a compiler error in mingw.
- Changed the preprocessor checks for the wchar_t overload of - Changed the preprocessor checks for the wchar_t overload of
is_built_in_scalar_type so that it works properly with visual studio. is_built_in_scalar_type so that it works properly with visual studio.
Other: Other:
- Added a Bayesian Network GUI that allows you to create a network - Added a Bayesian Network GUI that allows you to create a network
and serialize it to disk. and serialize it to disk.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="17.2" date="Apr 21, 2008"> <old name="17.2" date="Apr 21, 2008">
New Stuff: New Stuff:
- GUI Related - GUI Related
- Added the scrollable_region widget - Added the scrollable_region widget
- Added the text_grid widget - Added the text_grid widget
- Added an event to the text_field so you can tell when the - Added an event to the text_field so you can tell when the
user modifies it. user modifies it.
- Added the fit_to_contents() function to the tabbed_display - Added the fit_to_contents() function to the tabbed_display
widget. widget.
- Bayesian Network Related - Bayesian Network Related
- Added the node_first_parent_assignment(), node_next_parent_assignment(), - Added the node_first_parent_assignment(), node_next_parent_assignment(),
and node_cpt_filled_out() functions. and node_cpt_filled_out() functions.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Reverted the change in 17.0 where I made drawable::lastx and - Reverted the change in 17.0 where I made drawable::lastx and
drawable::lasty not match the current location of the mouse inside drawable::lasty not match the current location of the mouse inside
the on_mouse_move() event. I changed this back to how it was before, the on_mouse_move() event. I changed this back to how it was before,
so now lastx and lasty represent the most current record of where so now lastx and lasty represent the most current record of where
the mouse is in *all* events. the mouse is in *all* events.
- Changed the functions that control text color in the label and text_field - Changed the functions that control text color in the label and text_field
widgets to use rgb_pixel objects. Also added a function to set the widgets to use rgb_pixel objects. Also added a function to set the
background color of a text_field. background color of a text_field.
Bug fixes: Bug fixes:
- Fixed a bug in the bayesian_network_join_tree object that caused it to - Fixed a bug in the bayesian_network_join_tree object that caused it to
compute incorrect results for some networks. compute incorrect results for some networks.
- GUI Related - GUI Related
- Fixed a minor bug in the cursor drawing of the text_field - Fixed a minor bug in the cursor drawing of the text_field
gui widget. gui widget.
- Fixed a bug in the compute_cursor_rect() function. It would return an - Fixed a bug in the compute_cursor_rect() function. It would return an
incorrectly positioned rectangle for 0 length strings. incorrectly positioned rectangle for 0 length strings.
- Changed the way wchar_t is handled in the serialize.h file. Now - Changed the way wchar_t is handled in the serialize.h file. Now
everything should compile correctly in visual studio regardless of how everything should compile correctly in visual studio regardless of how
you set the /Zc:wchar_t compiler option. you set the /Zc:wchar_t compiler option.
- Fixed a bug in the menu_bar widget. One of the members wasn't being - Fixed a bug in the menu_bar widget. One of the members wasn't being
initialized when it needed to be. initialized when it needed to be.
- Fixed a bug in the tabbed_display where it didn't redraw itself - Fixed a bug in the tabbed_display where it didn't redraw itself
correctly after it was moved by set_pos() correctly after it was moved by set_pos()
Other: Other:
- Changed the xml parser so that it counts line numbers - Changed the xml parser so that it counts line numbers
from the start of the input stream instead of from the from the start of the input stream instead of from the
root tag. root tag.
- Changed the xml parser so that you will only get the fatal_error - Changed the xml parser so that you will only get the fatal_error
event once if it occurs. event once if it occurs.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="17.1" date="Apr 13, 2008"> <old name="17.1" date="Apr 13, 2008">
New Stuff: New Stuff:
- Added a zoomable_region widget - Added a zoomable_region widget
- Added a directed_graph_drawer widget - Added a directed_graph_drawer widget
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the first_pixel argument of the draw_string() function - Changed the first_pixel argument of the draw_string() function
to be a rectangle like all the other draw functions now use. to be a rectangle like all the other draw functions now use.
Bug fixes: Bug fixes:
- Fixed a bug in the tooltip widget that was triggered when calling - Fixed a bug in the tooltip widget that was triggered when calling
its member functions without calling set_tooltip_text(). This also its member functions without calling set_tooltip_text(). This also
fixed a bug in the button object that triggered when calling some button fixed a bug in the button object that triggered when calling some button
functions that referenced the tooltip widget. functions that referenced the tooltip widget.
- Fixed a problem in the draw_circle and draw_solid_circle functions. - Fixed a problem in the draw_circle and draw_solid_circle functions.
They didn't draw themselves quite correctly in all cases. They didn't draw themselves quite correctly in all cases.
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="17.0" date="Apr 07, 2008"> <old name="17.0" date="Apr 07, 2008">
New Stuff: New Stuff:
- Added a png_loader object - Added a png_loader object
- GUI related - GUI related
- Added a popup_menu widget - Added a popup_menu widget
- Added a menu_bar widget - Added a menu_bar widget
- Added a tooltip widget - Added a tooltip widget
- Added a user selectable style to the gui button. - Added a user selectable style to the gui button.
- Added the draw_rounded_rectangle() and fill_gradient_rounded() functions - Added the draw_rounded_rectangle() and fill_gradient_rounded() functions
- Added the mouse_over_event object to the base_widgets and made the - Added the mouse_over_event object to the base_widgets and made the
button_action inherit from it. button_action inherit from it.
- Added the drawable::next_free_user_event_number() function - Added the drawable::next_free_user_event_number() function
- matrix and geometry: - matrix and geometry:
- Added a size() function to matrix_exp and matrix_ref objects. - Added a size() function to matrix_exp and matrix_ref objects.
- Added a class that represents 2D points - Added a class that represents 2D points
- Added the following matrix functions: - Added the following matrix functions:
- squared(), cubed(), get_rect(), a subm() function that takes - squared(), cubed(), get_rect(), a subm() function that takes
rectangles, and normlize() rectangles, and normlize()
- Added the following rectangle functions: - Added the following rectangle functions:
- area(), centered_rect(), translate_rect(), move_rect(), resize_rect(), - area(), centered_rect(), translate_rect(), move_rect(), resize_rect(),
resize_rect_height(), resize_rect_width(), and nearest_point() resize_rect_height(), resize_rect_width(), and nearest_point()
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Renamed atom() to array_to_matrix() - Renamed atom() to array_to_matrix()
- Moved the rectangle object from the gui_core into a new geometry folder - Moved the rectangle object from the gui_core into a new geometry folder
(only matters if you were directly including the rectangle file) (only matters if you were directly including the rectangle file)
- Moved the vector object into the geometry folder. Also removed the kernel_1a - Moved the vector object into the geometry folder. Also removed the kernel_1a
stuff. So there is now only one possible vector implementation. stuff. So there is now only one possible vector implementation.
- Changed the default position for a rectangle to (0,0) instead of (1,1) - Changed the default position for a rectangle to (0,0) instead of (1,1)
- Added edge data to the directed_graph. This breaks backwards compatibility - Added edge data to the directed_graph. This breaks backwards compatibility
with the previous serialization format for directed_graphs. with the previous serialization format for directed_graphs.
- GUI related: - GUI related:
- Changed the base_window::on_keydown event signature so that it now - Changed the base_window::on_keydown event signature so that it now
reports more keyboard modifier keys (e.g. alt) reports more keyboard modifier keys (e.g. alt)
- Made the functions for drawing on canvas objects take points and pixels - Made the functions for drawing on canvas objects take points and pixels
instead of just a bunch of integers. Also changed the order of the instead of just a bunch of integers. Also changed the order of the
arguments so that the canvas comes first, followed by the location arguments so that the canvas comes first, followed by the location
to draw on, then what to draw. to draw on, then what to draw.
- Moved the canvas drawing functions into the gui_widgets/canvas_drawing.h - Moved the canvas drawing functions into the gui_widgets/canvas_drawing.h
file. file.
- Modified the drawable_window so that the drawable::lastx and drawable::lasty - Modified the drawable_window so that the drawable::lastx and drawable::lasty
fields are updated after calls to on_mouse_move. This way the x and y that fields are updated after calls to on_mouse_move. This way the x and y that
go into the on_mouse_move actually tell you something. go into the on_mouse_move actually tell you something.
Bug fixes: Bug fixes:
- Fixed a bug in the floating point serialization code. It - Fixed a bug in the floating point serialization code. It
didn't handle NaN or infinities correctly. didn't handle NaN or infinities correctly.
- Fixed a bug in the win32 version of the gui_core component. It was - Fixed a bug in the win32 version of the gui_core component. It was
possible that calling set_size(), set_pos(), or set_title() could cause possible that calling set_size(), set_pos(), or set_title() could cause
the program to deadlock. the program to deadlock.
- Made the load_bmp() function more robust in the face of weirdly - Made the load_bmp() function more robust in the face of weirdly
written BMP files. written BMP files.
- Modified the draw_circle() and draw_solid_circle() functions so that they - Modified the draw_circle() and draw_solid_circle() functions so that they
only touch each canvas pixel once. This avoids messing up alpha blending only touch each canvas pixel once. This avoids messing up alpha blending
if an rgb_alpha_pixel is used. if an rgb_alpha_pixel is used.
Other: Other:
- Removed the old win32 only gui code in the dlib/gui folder. - Removed the old win32 only gui code in the dlib/gui folder.
- Changed the default GUI font to a nicer Sans Serif font - Changed the default GUI font to a nicer Sans Serif font
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="16.5" date="Mar 04, 2008"> <old name="16.5" date="Mar 04, 2008">
New Stuff: New Stuff:
- Added another constructor to the thread_function object. - Added another constructor to the thread_function object.
Now it can take proper function objects as well as normal function Now it can take proper function objects as well as normal function
pointers. pointers.
- Added the probabilistic_decision_function object and svm_nu_train_prob() - Added the probabilistic_decision_function object and svm_nu_train_prob()
function. function.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the svm train functions so that the cache_size argument - Changed the svm train functions so that the cache_size argument
now measures the max number of megabytes of memory to use rather now measures the max number of megabytes of memory to use rather
than number of kernel matrix rows to cache. It's default than number of kernel matrix rows to cache. It's default
value is now 200MB. value is now 200MB.
- changed the type typedef in the SVM kernel function objects to - changed the type typedef in the SVM kernel function objects to
be named sample_type instead of type. be named sample_type instead of type.
Bug fixes: Bug fixes:
- Fixed a bug in the trim, rtrim, and ltrim functions. They - Fixed a bug in the trim, rtrim, and ltrim functions. They
didn't return empty strings when the input string contained all didn't return empty strings when the input string contained all
trim characters. trim characters.
- Fixed a bug in the decision_function's copy constructor - Fixed a bug in the decision_function's copy constructor
Other: Other:
- Added an optimization to the working set selection for the svm training code. - Added an optimization to the working set selection for the svm training code.
Now the algorithm will prefer to select indices that are in the kernel Now the algorithm will prefer to select indices that are in the kernel
matrix cache when possible. matrix cache when possible.
- Fixed a problem with the chm documentation file where many of the links - Fixed a problem with the chm documentation file where many of the links
didn't work. didn't work.
- Made the support vector functions capable of operating with floats, doubles, - Made the support vector functions capable of operating with floats, doubles,
and long doubles instead of just the double type. and long doubles instead of just the double type.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="16.4" date="Feb 22, 2008"> <old name="16.4" date="Feb 22, 2008">
New Stuff: New Stuff:
- Added aversion of the draw_line() function for images. - Added aversion of the draw_line() function for images.
- Added the atom(), rowm(), colm(), and subm() matrix functions. - Added the atom(), rowm(), colm(), and subm() matrix functions.
- Added some push/pop_back() functions to the array object that are similar - Added some push/pop_back() functions to the array object that are similar
to the ones in the std::vector. to the ones in the std::vector.
- Added the std_vector_c class that wraps std::vector and checks its - Added the std_vector_c class that wraps std::vector and checks its
function's preconditions. function's preconditions.
- Added the polynomial_kernel object for use with the svm algorithm. - Added the polynomial_kernel object for use with the svm algorithm.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the svm_nu_cross_validate() function to return a vector - Changed the svm_nu_cross_validate() function to return a vector
of both the +1 and -1 cross validation accuracies. of both the +1 and -1 cross validation accuracies.
Bug fixes: Bug fixes:
- Fixed a bug in the list_box that caused it to not hide itself properly - Fixed a bug in the list_box that caused it to not hide itself properly
when told to do so. when told to do so.
- Fixed canvas::fill() gui function so that it should work right - Fixed canvas::fill() gui function so that it should work right
on 64 bit platforms. on 64 bit platforms.
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="16.3" date="Feb 12, 2008"> <old name="16.3" date="Feb 12, 2008">
New Stuff: New Stuff:
- Added memory manager support to the matrix object. - Added memory manager support to the matrix object.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Made the assign_pixel() function saturate grayscale values bigger - Made the assign_pixel() function saturate grayscale values bigger
than the target pixel type can handle. Previously it would just than the target pixel type can handle. Previously it would just
truncate the numbers. truncate the numbers.
- Removed rand_kernel_1 and rand_kernel_2 because they gave very - Removed rand_kernel_1 and rand_kernel_2 because they gave very
inferior results compared to rand_kernel_3. I then renamed inferior results compared to rand_kernel_3. I then renamed
rand_kernel_3 to rand_kernel_1. rand_kernel_3 to rand_kernel_1.
- Renamed rand::get_random_number() to get_random_8bit_number() and also - Renamed rand::get_random_number() to get_random_8bit_number() and also
added a get_random_16bit_number() and get_random_32bit_number() added a get_random_16bit_number() and get_random_32bit_number()
- Added a checksum to compress_stream_kernel_1 and kernel_2. This - Added a checksum to compress_stream_kernel_1 and kernel_2. This
breaks backwards compatibility with the previous versions. That is, breaks backwards compatibility with the previous versions. That is,
the new implementations will complain that decompression fails if the new implementations will complain that decompression fails if
you give them data compressed with the old non-checksum version of you give them data compressed with the old non-checksum version of
the compression routines. the compression routines.
- Removed the width() and height() functions from the array2d object. - Removed the width() and height() functions from the array2d object.
Now only the equivalent nc() and nr() member functions remain. Now only the equivalent nc() and nr() member functions remain.
- Changed array2d::set_size(width,height) to set_size(num_rows, num_cols). - Changed array2d::set_size(width,height) to set_size(num_rows, num_cols).
That is, I switched the order of the two arguments to this function. That is, I switched the order of the two arguments to this function.
The reason for doing this is to make it have the same form as the The reason for doing this is to make it have the same form as the
set_size() member of the matrix object. This way the usage of the set_size() member of the matrix object. This way the usage of the
set_size() member for these two very similar data structures is set_size() member for these two very similar data structures is
the same. Hopefully this will reduce confusion rather than the same. Hopefully this will reduce confusion rather than
make things worse. make things worse.
Bug fixes: Bug fixes:
- Fixed a bug in the image_widget. It didn't repaint the screen - Fixed a bug in the image_widget. It didn't repaint the screen
all the way if you gave it a smaller image to display. all the way if you gave it a smaller image to display.
- Fixed a bug in the cat() function that caused the state of the queue - Fixed a bug in the cat() function that caused the state of the queue
to be broken if you called cat with an empty queue. to be broken if you called cat with an empty queue.
- Made the queue_sort_1 use a better sorting algorithm. In particular, it - Made the queue_sort_1 use a better sorting algorithm. In particular, it
will not sort slowly for nearly sorted data. will not sort slowly for nearly sorted data.
- Fixed a bug in the queue_kernel_2 object that caused it to not work - Fixed a bug in the queue_kernel_2 object that caused it to not work
correctly with the non-default memory managers. correctly with the non-default memory managers.
Other: Other:
- Added example code for the member_function_pointer as well as the matrix - Added example code for the member_function_pointer as well as the matrix
object. object.
- Added some more regression tests and made some of the longer running - Added some more regression tests and made some of the longer running
ones execute a lot quicker. ones execute a lot quicker.
- Made the unit test suite easier to use. Now tests just throw an exception - Made the unit test suite easier to use. Now tests just throw an exception
to indicate an error rather than returning an error code. to indicate an error rather than returning an error code.
- Added an example program for the multi-layer perceptron neural network. - Added an example program for the multi-layer perceptron neural network.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="16.2" date="Jan 25, 2008"> <old name="16.2" date="Jan 25, 2008">
New Stuff: New Stuff:
- Added the is_signed_type and is_unsigned_type templates - Added the is_signed_type and is_unsigned_type templates
- Image Processing stuff - Image Processing stuff
- Added the assign_all_pixels() function - Added the assign_all_pixels() function
- Added the assign_border_pixels() function - Added the assign_border_pixels() function
- Added the assign_pixel_intensity() function - Added the assign_pixel_intensity() function
- Added the auto_threshold_image() function - Added the auto_threshold_image() function
- Added the binary_union() function - Added the binary_union() function
- Added the edge_orientation() function - Added the edge_orientation() function
- Added the get_histogram() function - Added the get_histogram() function
- Added the get_pixel_intensity() function - Added the get_pixel_intensity() function
- Added the hysteresis_threshold() function - Added the hysteresis_threshold() function
- Added the sobel_edge_detector() function - Added the sobel_edge_detector() function
- Added the suppress_non_maximum_edges() function - Added the suppress_non_maximum_edges() function
- Added the zero_border_pixels() function - Added the zero_border_pixels() function
- Changed the pixel_traits structure so that it can support 8, 16, and 32 - Changed the pixel_traits structure so that it can support 8, 16, and 32
bit grayscale pixels. bit grayscale pixels.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Added more fields to the pixel_traits template so if you had defined your - Added more fields to the pixel_traits template so if you had defined your
own pixel types you will need to update them. own pixel types you will need to update them.
Bug fixes: Bug fixes:
- Fixed some compiler errors in Visual Studio 2008 - Fixed some compiler errors in Visual Studio 2008
Other: Other:
- Generally tried to clean up the documentation and code in this release - Generally tried to clean up the documentation and code in this release
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="16.1" date="Jan 1, 2008"> <old name="16.1" date="Jan 1, 2008">
New Stuff: New Stuff:
- Added the randomize_samples() function - Added the randomize_samples() function
- Added the set_main_font() and main_font() functions to the drawable object. - Added the set_main_font() and main_font() functions to the drawable object.
So now the drawable widgets can use a user provided font. So now the drawable widgets can use a user provided font.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Made the named_rectangle object a little easier to use. It now won't - Made the named_rectangle object a little easier to use. It now won't
let you size it so small that it doesn't display its entire name. let you size it so small that it doesn't display its entire name.
Bug fixes: Bug fixes:
- Fixed a bug in the svm_nu_train() function that caused a crash with - Fixed a bug in the svm_nu_train() function that caused a crash with
some inputs. some inputs.
- Fixed a compile time error that occurred when compiling the bayesian - Fixed a compile time error that occurred when compiling the bayesian
network code in Mac OS X. network code in Mac OS X.
- Fixed a bug in the compute_cursor_pos() function where it would - Fixed a bug in the compute_cursor_pos() function where it would
return the incorrect value. return the incorrect value.
Other: Other:
- Added an example showing how to use the svm functions. - Added an example showing how to use the svm functions.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="16.0" date="Dec 10, 2007"> <old name="16.0" date="Dec 10, 2007">
New Stuff: New Stuff:
- Added the left_substr() and right_substr() functions - Added the left_substr() and right_substr() functions
- Added the zero_extend_cast() function - Added the zero_extend_cast() function
- Added the unsigned_type template - Added the unsigned_type template
- Added the uint8 typedef - Added the uint8 typedef
- Bayesian Network related - Bayesian Network related
- Added the assignment object - Added the assignment object
- Added the bayes_node object - Added the bayes_node object
- Added the joint_probability_table object - Added the joint_probability_table object
- Added the conditional_probability_table object - Added the conditional_probability_table object
- Added the bayesian_network_gibbs_sampler object - Added the bayesian_network_gibbs_sampler object
This object implements an algorithm that performs approximate inference This object implements an algorithm that performs approximate inference
in a Bayesian Network. in a Bayesian Network.
- Added the bayesian_network_join_tree object - Added the bayesian_network_join_tree object
This object implements an algorithm that performs exact inference This object implements an algorithm that performs exact inference
in a Bayesian Network. in a Bayesian Network.
- Set related - Set related
- Added the set_intersection_size() function - Added the set_intersection_size() function
- Added the set_union() function - Added the set_union() function
- Added the set_intersection() function - Added the set_intersection() function
- Added the set_difference() function - Added the set_difference() function
- Graph related - Graph related
- Added the graph object - Added the graph object
- Added the is_graph template - Added the is_graph template
- Added the is_directed_graph template - Added the is_directed_graph template
- Added the create_moral_graph() function - Added the create_moral_graph() function
- Added the triangulate_graph_and_find_cliques() function - Added the triangulate_graph_and_find_cliques() function
- Added the graph_contains_length_one_cycle() function - Added the graph_contains_length_one_cycle() function
- Added the find_connected_nodes() function - Added the find_connected_nodes() function
- Added the graph_is_connected() function - Added the graph_is_connected() function
- Added the is_clique() function - Added the is_clique() function
- Added the is_maximal_clique() function - Added the is_maximal_clique() function
- Added the copy_graph_structure() function - Added the copy_graph_structure() function
- Added the create_join_tree() function - Added the create_join_tree() function
- Added the is_join_tree() function - Added the is_join_tree() function
- Added the edge() function - Added the edge() function
- GUI related - GUI related
- Added the base_window::get_display_size() function - Added the base_window::get_display_size() function
- Added message_box_blocking() - Added message_box_blocking()
- Added the bdf_font object which is capable of loading BDF font files into - Added the bdf_font object which is capable of loading BDF font files into
the font object used by the gui_widgets the font object used by the gui_widgets
- Better Unicode support - Better Unicode support
- Added the basic_utf8_ifstream: An input stream that can read UTF-8 files - Added the basic_utf8_ifstream: An input stream that can read UTF-8 files
- Added serialization support for wchar_t and std::wstring - Added serialization support for wchar_t and std::wstring
- Added the is_combining_char() function - Added the is_combining_char() function
- Added the convert_utf8_to_utf32() function - Added the convert_utf8_to_utf32() function
- Modified most of the string manipulation functions in dlib/string.h - Modified most of the string manipulation functions in dlib/string.h
to work with any kind of character type to work with any kind of character type
- The gui widgets' font object now works with Unicode text (i.e. wchar_t - The gui widgets' font object now works with Unicode text (i.e. wchar_t
and unichar strings) as well as with normal char data. and unichar strings) as well as with normal char data.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- The dlib/all_console.cpp and dlib/all_gui.cpp files have been deprecated - The dlib/all_console.cpp and dlib/all_gui.cpp files have been deprecated
in favor of a new file. Now to build with dlib you simply add in favor of a new file. Now to build with dlib you simply add
dlib/all/source.cpp to your project regardless of what type of project dlib/all/source.cpp to your project regardless of what type of project
you are building. you are building.
- The GUI program entry point, winmain(), has been removed. You can now use - The GUI program entry point, winmain(), has been removed. You can now use
the normal main() entry point or some other non-standard entry point the normal main() entry point or some other non-standard entry point
provided by your compiler. provided by your compiler.
- Renamed directed_graph::node::item to directed_graph::node::data - Renamed directed_graph::node::item to directed_graph::node::data
Bug fixes: Bug fixes:
- Fixed some build issues in gcc 4.2 involving some uses of the std_allocator - Fixed some build issues in gcc 4.2 involving some uses of the std_allocator
- Fixed some build issues in Visual Studio involving the dir_nav component - Fixed some build issues in Visual Studio involving the dir_nav component
and buidling with NO_MAKEFILE #defined. and buidling with NO_MAKEFILE #defined.
- Moved the #define that disables the old WinSock API into the sockets cpp - Moved the #define that disables the old WinSock API into the sockets cpp
file. This should avoid conflicts with people who are using the old WinSock file. This should avoid conflicts with people who are using the old WinSock
API. API.
- Changed the tuple template slightly to avoid a bug in Visual Studio 7.1 - Changed the tuple template slightly to avoid a bug in Visual Studio 7.1
that caused a compile time error in some instances. that caused a compile time error in some instances.
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.12" date="Nov 18, 2007"> <old name="15.12" date="Nov 18, 2007">
New Stuff: New Stuff:
- Added a destroy() function to the map, set, hash_map, and hash_set objects. - Added a destroy() function to the map, set, hash_map, and hash_set objects.
- Added the tuple object - Added the tuple object
- Added an overload of connect() that has a timeout - Added an overload of connect() that has a timeout
- Added rand_kernel_3 as a random number generator that uses the Mersenne Twister - Added rand_kernel_3 as a random number generator that uses the Mersenne Twister
algorithm. algorithm.
- Added the directed_graph object - Added the directed_graph object
- Added the graph_contains_undirected_cycle() and graph_contains_directed_cycle() - Added the graph_contains_undirected_cycle() and graph_contains_directed_cycle()
functions. functions.
- Added the std_allocator object. It is a STL style allocator that can use - Added the std_allocator object. It is a STL style allocator that can use
the dlib memory manager objects. the dlib memory manager objects.
- std::string manipulation functions: - std::string manipulation functions:
- Added the cast_to_string() function. - Added the cast_to_string() function.
- Added the tolower() function - Added the tolower() function
- Added the toupper() function - Added the toupper() function
- Added the ltrim() function - Added the ltrim() function
- Added the rtrim() function - Added the rtrim() function
- Added the trim() function - Added the trim() function
- Added the lpad() function - Added the lpad() function
- Added the rpad() function - Added the rpad() function
- Added the pad() function - Added the pad() function
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the default logging level from LNONE to LERROR - Changed the default logging level from LNONE to LERROR
- Renamed the ASSERT macro to DLIB_ASSERT and CASSERT to DLIB_CASSERT. - Renamed the ASSERT macro to DLIB_ASSERT and CASSERT to DLIB_CASSERT.
This rename avoids a conflict with a macro inside MFC. This rename avoids a conflict with a macro inside MFC.
- Changed the logger so that settings are inherited when a new logger - Changed the logger so that settings are inherited when a new logger
is instantiated rather than just having the new logger use the is instantiated rather than just having the new logger use the
default settings. default settings.
- Removed the logger::clear() function since it no longer really - Removed the logger::clear() function since it no longer really
makes sense given the above change. makes sense given the above change.
- Removed the get_main_thread_id() function and replaced it with the - Removed the get_main_thread_id() function and replaced it with the
is_dlib_thread() function. is_dlib_thread() function.
Bug fixes: Bug fixes:
- Pushed some things into cpp files because doing so avoids build and/or - Pushed some things into cpp files because doing so avoids build and/or
runtime errors on some platforms. runtime errors on some platforms.
Other: Other:
- Changed the string_cast() function so that it will recognize the words true - Changed the string_cast() function so that it will recognize the words true
and false as boolean values. Also improved the error message inside the and false as boolean values. Also improved the error message inside the
string_cast_error exception object. string_cast_error exception object.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.11" date="Oct 25, 2007"> <old name="15.11" date="Oct 25, 2007">
New Stuff: New Stuff:
- Added the covariance() function - Added the covariance() function
- Added the rgb_alpha_pixel pixel type and modified all relevant functions to - Added the rgb_alpha_pixel pixel type and modified all relevant functions to
support it. support it.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- The GUI changes that are non-backwards compatible: - The GUI changes that are non-backwards compatible:
- The alpha parameter is now an unsigned char instead of unsigned int - The alpha parameter is now an unsigned char instead of unsigned int
and its range is now 0 to 255 instead of 0 to 256. and its range is now 0 to 255 instead of 0 to 256.
- The image_widget no longer has any member functions dealing with - The image_widget no longer has any member functions dealing with
alpha values. If you want to use alpha blending you just give it an alpha values. If you want to use alpha blending you just give it an
image that has an alpha channel. The same goes for draw_image(). image that has an alpha channel. The same goes for draw_image().
- There are now more fields in the pixel_traits template. So if you were - There are now more fields in the pixel_traits template. So if you were
defining your own pixels before you will need to update your pixel_traits defining your own pixels before you will need to update your pixel_traits
specializations. specializations.
Bug fixes: Bug fixes:
- Made some functions non-inline and put some things on the stack - Made some functions non-inline and put some things on the stack
instead of heap. Doing this avoids some problems with certain instead of heap. Doing this avoids some problems with certain
kinds of builds in visual studio. kinds of builds in visual studio.
Other: Other:
- Modified the message_box() function so that it is safe to call end_program() - Modified the message_box() function so that it is safe to call end_program()
from within its callback event. from within its callback event.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.10" date="Oct 09, 2007"> <old name="15.10" date="Oct 09, 2007">
New Stuff: New Stuff:
- Modified the GUI drawing functions to take an alpha argument to allow - Modified the GUI drawing functions to take an alpha argument to allow
alpha blending. alpha blending.
- Added the svm_nu_cross_validate() function to perform k-fold - Added the svm_nu_cross_validate() function to perform k-fold
cross validation using the svm_nu_train() function. cross validation using the svm_nu_train() function.
- Added the boost enable_if templates - Added the boost enable_if templates
- Added the rand_float extension to the rand object. - Added the rand_float extension to the rand object.
- New matrix features: - New matrix features:
- Added the pinv() function - Added the pinv() function
- Changed round_zeros() to use the machine epsilon instead of 1e-6 as - Changed round_zeros() to use the machine epsilon instead of 1e-6 as
its default epsilon. its default epsilon.
- Modified the matrix object so that you can declare them with - Modified the matrix object so that you can declare them with
a static dimension and a dynamic dimension. E.g. matrix&lt;float,0,10&gt; a static dimension and a dynamic dimension. E.g. matrix&lt;float,0,10&gt;
is now legal and declares a matrix with a fixed number of columns(10) is now legal and declares a matrix with a fixed number of columns(10)
and a variable number of rows. and a variable number of rows.
- Added the equal() function to compare two matrices of floating - Added the equal() function to compare two matrices of floating
point numbers for near equality. point numbers for near equality.
- Changed the matrix so that operator(long) works for both - Changed the matrix so that operator(long) works for both
column vectors and now also for row vectors. column vectors and now also for row vectors.
- Added a set_size() and constructor that takes a single long for use in - Added a set_size() and constructor that takes a single long for use in
sizing row and column vectors. sizing row and column vectors.
- Added the scale_columns() function - Added the scale_columns() function
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
- Fixed an error in svm_nu_train() where it would incorrectly - Fixed an error in svm_nu_train() where it would incorrectly
complain of incorrect nu values for some datasets. complain of incorrect nu values for some datasets.
- Added a missing std:: qualifier at two points in the dlib/vector code that - Added a missing std:: qualifier at two points in the dlib/vector code that
could cause a compiler error in some instances. could cause a compiler error in some instances.
Other: Other:
- Added a term index to the documentation. - Added a term index to the documentation.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.9" date="Sep 25, 2007"> <old name="15.9" date="Sep 25, 2007">
New Stuff: New Stuff:
- Added a nu support vector classifier training function. - Added a nu support vector classifier training function.
- Added a multilayer neural network object. - Added a multilayer neural network object.
- Added the "destructive aliasing" checks into the matrix code. Now temporary - Added the "destructive aliasing" checks into the matrix code. Now temporary
matrices are only created during assignment if the right hand side aliases matrices are only created during assignment if the right hand side aliases
the left hand side in a destructive way. This removes many of the previous the left hand side in a destructive way. This removes many of the previous
uses of temporary matrices. uses of temporary matrices.
- Made the sum() matrix function be able to sum matrices of matrices - Made the sum() matrix function be able to sum matrices of matrices
- New matrix functions: - New matrix functions:
- acos(), asin(), atan(), ceil(), cos(), cosh(), exp(), floor(), log(), - acos(), asin(), atan(), ceil(), cos(), cosh(), exp(), floor(), log(),
log10(), mean(), norm(), pow(), reciprocal(), round_zeros(), sin(), log10(), mean(), norm(), pow(), reciprocal(), round_zeros(), sin(),
sinh(), sqrt(), tan(), tanh(), variance(), and more overloads of sinh(), sqrt(), tan(), tanh(), variance(), and more overloads of
uniform_matrix(). uniform_matrix().
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
- Added missing nr() and nc() functions to the uniform_matrix() and - Added missing nr() and nc() functions to the uniform_matrix() and
identity_matrix() functions. identity_matrix() functions.
- Forgot to add a destructor for the dynamically sized matrix resulting in a - Forgot to add a destructor for the dynamically sized matrix resulting in a
memory leak. This is now fixed. memory leak. This is now fixed.
- Fixed various potential compile time errors - Fixed various potential compile time errors
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.8" date="Sep 11, 2007"> <old name="15.8" date="Sep 11, 2007">
New Stuff: New Stuff:
- Added a copy of the boost noncopyable base class. - Added a copy of the boost noncopyable base class.
- added some smart pointers: - added some smart pointers:
- added shared_ptr - added shared_ptr
- added weak_ptr - added weak_ptr
- added scoped_ptr - added scoped_ptr
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
Other: Other:
- Cleaned up the assert code and removed the need for the dlib/error.ccp file - Cleaned up the assert code and removed the need for the dlib/error.ccp file
- Made the matrix take better advantage of the compile time sized - Made the matrix take better advantage of the compile time sized
dimensions when it can. dimensions when it can.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.7" date="Aug 26, 2007"> <old name="15.7" date="Aug 26, 2007">
New Stuff: New Stuff:
- Made it so that command line options have a default conversion to bool - Made it so that command line options have a default conversion to bool
and the bool tells you if they are on the command line or not. and the bool tells you if they are on the command line or not.
- Added an implicit conversion to a scalar to the matrix object - Added an implicit conversion to a scalar to the matrix object
when it is of dimension 1x1. when it is of dimension 1x1.
- Added the thread_function object - Added the thread_function object
- Added a function to compute the singular value decomposition of a matrix. - Added a function to compute the singular value decomposition of a matrix.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Added two new arguments to the on_request() function. They allow you to - Added two new arguments to the on_request() function. They allow you to
see what HTTP headers the client sends you and to control which ones see what HTTP headers the client sends you and to control which ones
you send back. you send back.
Bug fixes: Bug fixes:
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.6" date="Aug 18, 2007"> <old name="15.6" date="Aug 18, 2007">
New Stuff: New Stuff:
- matrix object additions: - matrix object additions:
- Added some functions to convert between matrix and pixel objects. - Added some functions to convert between matrix and pixel objects.
- Added the clamp() function that operates on matrix objects. - Added the clamp() function that operates on matrix objects.
- Added the sigmoid function. - Added the sigmoid function.
- Made the matrix object capable of being sized at runtime in addition - Made the matrix object capable of being sized at runtime in addition
to its original compile time static sizing capability. to its original compile time static sizing capability.
- Added 3 and 4 argument versions of pointwise_multiply() - Added 3 and 4 argument versions of pointwise_multiply()
- Added the +=, -=, *= and /= operators to the matrix object. - Added the +=, -=, *= and /= operators to the matrix object.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
- Fixed the line numbering in the color pretty printer. Wasn't being - Fixed the line numbering in the color pretty printer. Wasn't being
done correctly. done correctly.
- Fixed a bug in the matrix round() function. - Fixed a bug in the matrix round() function.
- Fixed some miscellaneous compile time errors - Fixed some miscellaneous compile time errors
- Fixed a bug in the matrix removerc() function. - Fixed a bug in the matrix removerc() function.
- Added some missing checks to catch invalid negative index inputs to - Added some missing checks to catch invalid negative index inputs to
matrix objects. matrix objects.
- Fixed a bug in the matrix inv() function. It could sometimes - Fixed a bug in the matrix inv() function. It could sometimes
segfault if used on certain singular matrices segfault if used on certain singular matrices
Other: Other:
- string_cast() can now convert hex strings to integers - string_cast() can now convert hex strings to integers
- You can now say myarray2d.set_size(0,0) and have it do what - You can now say myarray2d.set_size(0,0) and have it do what
you would naturally expect. you would naturally expect.
- Added some #pragma statements that tell visual studio - Added some #pragma statements that tell visual studio
to link the right system libraries automatically. to link the right system libraries automatically.
So now you don't have to add these things in the So now you don't have to add these things in the
project settings anymore. project settings anymore.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.5" date="Jul 12, 2007"> <old name="15.5" date="Jul 12, 2007">
New Stuff: New Stuff:
- Added the set_all_logging_levels(), set_all_logging_output_streams() - Added the set_all_logging_levels(), set_all_logging_output_streams()
functions functions
- Added the configure_loggers_from_file() function which allows you to - Added the configure_loggers_from_file() function which allows you to
easily configure all logger objects using a textual configuration easily configure all logger objects using a textual configuration
file. file.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
- Added a workaround into the code that avoids a potential compilation - Added a workaround into the code that avoids a potential compilation
error on Mac OS X systems. error on Mac OS X systems.
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.4" date="Jun 30, 2007"> <old name="15.4" date="Jun 30, 2007">
New Stuff: New Stuff:
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
- Fixed a bug in the POSIX version of the hostname_to_ip() function. It was - Fixed a bug in the POSIX version of the hostname_to_ip() function. It was
screwy if you asked for more than the first IP address (the same address screwy if you asked for more than the first IP address (the same address
might be returned more than once). might be returned more than once).
- Fixed a bug in the pipe object's timeout functions. The timeouts weren't - Fixed a bug in the pipe object's timeout functions. The timeouts weren't
working correctly. working correctly.
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.3" date="Jun 25, 2007"> <old name="15.3" date="Jun 25, 2007">
New Stuff: New Stuff:
- Added the wait_for_num_blocked_dequeues(), enable_enqueue(), - Added the wait_for_num_blocked_dequeues(), enable_enqueue(),
disable_enqueue(), and is_enqueue_enabled() functions to the pipe object. disable_enqueue(), and is_enqueue_enabled() functions to the pipe object.
- The pipe object can now be used with a zero length buffer. - The pipe object can now be used with a zero length buffer.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- There is no longer a pipe::kernel_1a_c typedef since the pipe - There is no longer a pipe::kernel_1a_c typedef since the pipe
no longer has any requirements to check (due to the change of allowing no longer has any requirements to check (due to the change of allowing
zero length buffer sizes) zero length buffer sizes)
Bug fixes: Bug fixes:
Other: Other:
- Made the ASSERT and CASSERT macros call dlib_assert_breakpoint() when they - Made the ASSERT and CASSERT macros call dlib_assert_breakpoint() when they
fail. This way you can easily set a breakpoint on them in a debugging fail. This way you can easily set a breakpoint on them in a debugging
tool by breaking on calls to this new function. tool by breaking on calls to this new function.
- Fixed some typos and unclear parts of the pipe spec. - Fixed some typos and unclear parts of the pipe spec.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.2" date="Jun 11, 2007"> <old name="15.2" date="Jun 11, 2007">
New Stuff: New Stuff:
- Added a thread safe version of the config_reader object (in the form of an - Added a thread safe version of the config_reader object (in the form of an
extension to the config_reader) extension to the config_reader)
- Added the wait_until_empty() function to the pipe object. - Added the wait_until_empty() function to the pipe object.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Removed the connection::close() and listener::close() functions. They have - Removed the connection::close() and listener::close() functions. They have
been replaced by destructors. To upgrade old code all you have to do is been replaced by destructors. To upgrade old code all you have to do is
replace statements of the form "object->close();" with "delete object;". replace statements of the form "object->close();" with "delete object;".
Both statements do exactly the same thing. However, for connection objects, Both statements do exactly the same thing. However, for connection objects,
you should probably be using the close_gracefully() function instead. you should probably be using the close_gracefully() function instead.
Bug fixes: Bug fixes:
- Removed a potential compile time error in the dng image format handling code. - Removed a potential compile time error in the dng image format handling code.
- Fixed a bug in the bigint object. The destructor was using "delete" - Fixed a bug in the bigint object. The destructor was using "delete"
when it should have been using "delete []" when it should have been using "delete []"
- Fixed a resource leak in the POSIX version hostname_to_ip() - Fixed a resource leak in the POSIX version hostname_to_ip()
- Fixed a significant memory leak in memory_manager_kernel_1 - Fixed a significant memory leak in memory_manager_kernel_1
- Fixed a memory leak that could occur in memory_manager_kernel_2 - Fixed a memory leak that could occur in memory_manager_kernel_2
and memory_manager_kernel_3 when the constructor for the object and memory_manager_kernel_3 when the constructor for the object
being constructed threw an exception. being constructed threw an exception.
- Added a missing delete statement to plug a memory leak - Added a missing delete statement to plug a memory leak
in the md5 computation code. in the md5 computation code.
- Fixed an uninitialized variable warning from valgrind - Fixed an uninitialized variable warning from valgrind
(in lz77_buffer/lz77_buffer_kernel_2.h). I think this could (in lz77_buffer/lz77_buffer_kernel_2.h). I think this could
also potentially result in an error when decoding data but I'm not totally also potentially result in an error when decoding data but I'm not totally
sure. But either way it is fixed now. sure. But either way it is fixed now.
- Changed a call to memcpy to memmove in the sockstreambuf_kernel_2 - Changed a call to memcpy to memmove in the sockstreambuf_kernel_2
implementation since the copy could potentially be of overlapped memory. implementation since the copy could potentially be of overlapped memory.
Other: Other:
- Changed the connection::read() and connection::write() functions to take - Changed the connection::read() and connection::write() functions to take
longs instead of unsigned longs as the buffer sizes. They also now longs instead of unsigned longs as the buffer sizes. They also now
return longs instead of ints. This should be a backwards compatible change. return longs instead of ints. This should be a backwards compatible change.
- Started using the valgrind tool to check for memory errors in the project and - Started using the valgrind tool to check for memory errors in the project and
found a few things. Very nice tool :) found a few things. Very nice tool :)
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.1" date="Jun 04, 2007"> <old name="15.1" date="Jun 04, 2007">
New Stuff: New Stuff:
- Added the multithreaded_object extension to the threads API - Added the multithreaded_object extension to the threads API
- Added the load_dng() and save_dng() functions which can load and store - Added the load_dng() and save_dng() functions which can load and store
the DNG lossless compressed image format (which I just made up). the DNG lossless compressed image format (which I just made up).
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the serialization format for bool to use a 1 byte code rather than 2 - Changed the serialization format for bool to use a 1 byte code rather than 2
bytes. So this breaks compatibility with the old format. bytes. So this breaks compatibility with the old format.
Bug fixes: Bug fixes:
- The serialization for bool didn't always work right. This is now fixed. - The serialization for bool didn't always work right. This is now fixed.
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="15.0" date="May 16, 2007"> <old name="15.0" date="May 16, 2007">
New Stuff: New Stuff:
- New faster version of the bigint object (bigint_kernel_2) that uses - New faster version of the bigint object (bigint_kernel_2) that uses
the Fast Fourier Transform to perform multiplications. the Fast Fourier Transform to perform multiplications.
- The base_window can now be an "undecorated" window. This new type is suitable - The base_window can now be an "undecorated" window. This new type is suitable
for making things like popup menus and the like. for making things like popup menus and the like.
- Added the on_focus_lost() event to the base_window object - Added the on_focus_lost() event to the base_window object
- Added the on_focus_gained() event to the base_window object - Added the on_focus_gained() event to the base_window object
- Added the on_window_moved() event to the base_window object - Added the on_window_moved() event to the base_window object
- Added the get_pos() function to the base_window object - Added the get_pos() function to the base_window object
- Updated the gui_widgets's drawable interface stuff to support the three - Updated the gui_widgets's drawable interface stuff to support the three
new event types and the new window type. new event types and the new window type.
- Added the drawable::draw_rectangle() function - Added the drawable::draw_rectangle() function
- Added serialization support for std::complex. - Added serialization support for std::complex.
- Added the assign_image() function - Added the assign_image() function
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Removed the color arguments from the drawable_window object's constructor and - Removed the color arguments from the drawable_window object's constructor and
added a new boolean argument (if it is an undecorated window or not). This added a new boolean argument (if it is an undecorated window or not). This
probably won't break any code but if it does you should get a compiler error probably won't break any code but if it does you should get a compiler error
about it. about it.
- Made it so you must disable the events in the destructor for your - Made it so you must disable the events in the destructor for your
drawable gui widgets. Doing so avoids potential race conditions when drawable gui widgets. Doing so avoids potential race conditions when
destructing drawable objects. destructing drawable objects.
- Made it so that you are required to call close_window() in a window object's - Made it so that you are required to call close_window() in a window object's
destructor. This avoids a potential race condition. destructor. This avoids a potential race condition.
Bug fixes: Bug fixes:
- Added a workaround for a bug in MinGW that caused the regression test suite - Added a workaround for a bug in MinGW that caused the regression test suite
to crash when compiled with -O3. to crash when compiled with -O3.
- Fixed a potential bug in the X Windows version of the gui_core component. - Fixed a potential bug in the X Windows version of the gui_core component.
Added an extra XFlush() to end_program() because without it a Added an extra XFlush() to end_program() because without it a
program can crash when calling end_program() in certain instances. program can crash when calling end_program() in certain instances.
- The spec for the pipe object said that objects you enqueue into it - The spec for the pipe object said that objects you enqueue into it
had an "initial value for their type" after the function completes. This had an "initial value for their type" after the function completes. This
is incorrect, they are swapped into the pipe so they have an undefined is incorrect, they are swapped into the pipe so they have an undefined
value afterwards. I fixed the spec for the pipe to say this. value afterwards. I fixed the spec for the pipe to say this.
- Fixed a bug in the font rendering functions in the gui_widgets - Fixed a bug in the font rendering functions in the gui_widgets
component. It could cause a segmentation fault sometimes. component. It could cause a segmentation fault sometimes.
- Fixed some potential deadlocks in the windows version of the gui_core - Fixed some potential deadlocks in the windows version of the gui_core
component. component.
- Fixed a bug in the rsignaler object. When you called wait() or - Fixed a bug in the rsignaler object. When you called wait() or
wait_or_timeout() it only unlocked the associated rmutex once (it could be wait_or_timeout() it only unlocked the associated rmutex once (it could be
locked more than once and thus might cause a deadlock since the thread locked more than once and thus might cause a deadlock since the thread
calling wait() wouldn't actually unlock the mutex in this case). calling wait() wouldn't actually unlock the mutex in this case).
- Fixed the initialize_array() function in memory_manger_kernel_3 to be - Fixed the initialize_array() function in memory_manger_kernel_3 to be
exception safe. Previously if an exception occurred while creating exception safe. Previously if an exception occurred while creating
an array then a resource leak was created. an array then a resource leak was created.
Other: Other:
- Changed the package format for the library somewhat. The examples are now - Changed the package format for the library somewhat. The examples are now
located in their own top level folder. Additionally, the HTML version of the located in their own top level folder. Additionally, the HTML version of the
documentation also comes in the same archive as the source rather than in a documentation also comes in the same archive as the source rather than in a
separate download. separate download.
- Started using major and minor version numbers rather than just major ones. - Started using major and minor version numbers rather than just major ones.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="14" date="Apr 11, 2007"> <old name="14" date="Apr 11, 2007">
New Stuff: New Stuff:
- Added operator&lt;&lt; and operator&gt;&gt; iostream operators to the vector object. - Added operator&lt;&lt; and operator&gt;&gt; iostream operators to the vector object.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the xml_parser's document_handler interface: - Changed the xml_parser's document_handler interface:
made empty element tags (&lt;like_this/&gt;) trigger the end_element() callback made empty element tags (&lt;like_this/&gt;) trigger the end_element() callback
and removed the is_empty bool from start_element(). and removed the is_empty bool from start_element().
Bug fixes: Bug fixes:
- Fixed a potential race condition between the destruction of the thread pool - Fixed a potential race condition between the destruction of the thread pool
and the "program ending handlers" stuff. and the "program ending handlers" stuff.
Other: Other:
- Made the xml parser more robust to different types of new line characters. - Made the xml parser more robust to different types of new line characters.
- Modified the source slightly so that it works with mingw. - Modified the source slightly so that it works with mingw.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="13" date="Mar 01, 2007"> <old name="13" date="Mar 01, 2007">
New Stuff: New Stuff:
- The config_reader is now enumerable. - The config_reader is now enumerable.
- Added the image_widget gui object. - Added the image_widget gui object.
- Added nr() and nc() to the array2d object. - Added nr() and nc() to the array2d object.
- Added the shutdown_connection() function to the iostream extension - Added the shutdown_connection() function to the iostream extension
to the server object. to the server object.
- Added the timer_kernel_2 implementation which is a version of the timer object - Added the timer_kernel_2 implementation which is a version of the timer object
that is more efficient in its allocation of threads. that is more efficient in its allocation of threads.
- Added the timeout object. - Added the timeout object.
- There is now a CMakeLists.txt file located in the dlib folder. See - There is now a CMakeLists.txt file located in the dlib folder. See
dlib/examples/CMakeLists.txt and dlib/test/CMakeLists.txt for examples dlib/examples/CMakeLists.txt and dlib/test/CMakeLists.txt for examples
that use CMake to build projects using this library. that use CMake to build projects using this library.
- Added the register_program_ending_handler() function to the threading API. - Added the register_program_ending_handler() function to the threading API.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Removed the config_reader::get_blocks() function. Use the - Removed the config_reader::get_blocks() function. Use the
new enumerable interface for the config_reader instead. new enumerable interface for the config_reader instead.
- The array2d object now uses longs instead of unsigned longs to report - The array2d object now uses longs instead of unsigned longs to report
its dimensions and access its elements. its dimensions and access its elements.
- Added a uint64 to the on_connect() callback in the iostream - Added a uint64 to the on_connect() callback in the iostream
extension to the server object. extension to the server object.
- timer::set_delay_time() now throws and timer::start() now may throw - timer::set_delay_time() now throws and timer::start() now may throw
std::bad_alloc. std::bad_alloc.
Bug fixes: Bug fixes:
- Fixed a bug in end_program(). In X Windows it might not cause the - Fixed a bug in end_program(). In X Windows it might not cause the
program to end right away if it was called from outside the event program to end right away if it was called from outside the event
handling thread. handling thread.
- Fixed a bug in the implementation of the timeout part of the - Fixed a bug in the implementation of the timeout part of the
close_gracefully() function. close_gracefully() function.
Other: Other:
- The library now works on HP-UX - The library now works on HP-UX
- The regression test suite now has command line arguments that - The regression test suite now has command line arguments that
enable tests to send debug messages to a file. enable tests to send debug messages to a file.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="12" date="Feb 07, 2007"> <old name="12" date="Feb 07, 2007">
New Stuff: New Stuff:
- The http server extension now supports the POST HTTP method. - The http server extension now supports the POST HTTP method.
- The attribute list object in the xml_parser is now enumerable. - The attribute list object in the xml_parser is now enumerable.
- Added the threaded object extension - Added the threaded object extension
- Added the uintn.h file which defines fixed sized unsigned integral types. - Added the uintn.h file which defines fixed sized unsigned integral types.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Renamed the on_get() callback in the http extension to the server object to - Renamed the on_get() callback in the http extension to the server object to
on_request() on_request()
- Removed the network byte order functions from the sockets api. (They are still - Removed the network byte order functions from the sockets api. (They are still
really there though since they come from actual OS header files. But really there though since they come from actual OS header files. But
officially they have been replaced by the byte_orderer component). officially they have been replaced by the byte_orderer component).
- Renamed dlib/uint64.h to dlib/uintn.h - Renamed dlib/uint64.h to dlib/uintn.h
Bug fixes: Bug fixes:
Other: Other:
- The command line parser will now let you declare long named options with - - The command line parser will now let you declare long named options with -
characters in them. characters in them.
- Made it so you can use the COMPILE_TIME_ASSERT macros anywhere rather than - Made it so you can use the COMPILE_TIME_ASSERT macros anywhere rather than
just inside functions. just inside functions.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="11" date="Dec 27, 2006"> <old name="11" date="Dec 27, 2006">
New Stuff: New Stuff:
- For dlib::matrix - For dlib::matrix
- Added the tmp() function - Added the tmp() function
- Added optimized specializations of inv() and det() for 1x1, 2x2, 3x3 and - Added optimized specializations of inv() and det() for 1x1, 2x2, 3x3 and
4x4 matrices. 4x4 matrices.
- Added the removerc() function - Added the removerc() function
- Sockets related - Sockets related
- Added the connect() function - Added the connect() function
- Added the is_ip_address() function. - Added the is_ip_address() function.
- Added the close_gracefully() function - Added the close_gracefully() function
- Added the iostream extension to the server object. - Added the iostream extension to the server object.
- Added the http extension to the server object. - Added the http extension to the server object.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the cpp_tokenizer to not convert characters to their html form. - Changed the cpp_tokenizer to not convert characters to their html form.
Bug fixes: Bug fixes:
- Removed some potential compile time errors. See the change log for details. - Removed some potential compile time errors. See the change log for details.
Other: Other:
- Improved the web site - Improved the web site
- Added some more example code - Added some more example code
- Added more colors to cpp_pretty_printer_kernel_1. - Added more colors to cpp_pretty_printer_kernel_1.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="10" date="Nov 28, 2006"> <old name="10" date="Nov 28, 2006">
New Stuff: New Stuff:
- std::map is now serializable - std::map is now serializable
- Added the matrix object and a bunch of supporting code. - Added the matrix object and a bunch of supporting code.
- Added the list_box graphical widget - Added the list_box graphical widget
- Added the fill_rect_with_vertical_gradient() function to the - Added the fill_rect_with_vertical_gradient() function to the
drawable interfaces list of drawing helpers. drawable interfaces list of drawing helpers.
- Added the open_file_box() function which provides a simple file chooser. - Added the open_file_box() function which provides a simple file chooser.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
- Made timestamper::get_timestamp() be a const function like it should. Fixes - Made timestamper::get_timestamp() be a const function like it should. Fixes
some compile errors. some compile errors.
- Fixed a bug in the font::draw_string() function. It didn't redraw - Fixed a bug in the font::draw_string() function. It didn't redraw
multi-line strings right. multi-line strings right.
- Fixed a bug in the scroll_bar object that would cause a compile - Fixed a bug in the scroll_bar object that would cause a compile
error if you tried to call its width() function. error if you tried to call its width() function.
- Fixed a bug in the array_kernel_1 object. It would cause a segmentation fault - Fixed a bug in the array_kernel_1 object. It would cause a segmentation fault
when used sometimes. when used sometimes.
Other: Other:
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="9" date="Oct 23, 2006"> <old name="9" date="Oct 23, 2006">
New Stuff: New Stuff:
- Added the following image transformation functions: - Added the following image transformation functions:
- Added the equalize_histogram() function - Added the equalize_histogram() function
- Added the spatially_filter_image() function - Added the spatially_filter_image() function
- Added the threshold_image() function - Added the threshold_image() function
- Added the binary_dilation() function - Added the binary_dilation() function
- Added the binary_erosion() function - Added the binary_erosion() function
- Added the binary_open() function - Added the binary_open() function
- Added the binary_close() function - Added the binary_close() function
- Added the binary_intersection() function - Added the binary_intersection() function
- Added the binary_difference() function - Added the binary_difference() function
- Added the binary_complement() function - Added the binary_complement() function
- Added the clear(), load_from() and default constructor back into the - Added the clear(), load_from() and default constructor back into the
config_reader. config_reader.
- Made the member_function_pointer copyable and also added operator== and != - Made the member_function_pointer copyable and also added operator== and !=
to it. to it.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Made the vector object templated so you can use types other than double with it. - Made the vector object templated so you can use types other than double with it.
But now you But now you
have to specify what type you want to use which is slightly different. have to specify what type you want to use which is slightly different.
- The asc_pair_remover and asc_remover abstract classes now take a third template - The asc_pair_remover and asc_remover abstract classes now take a third template
argument. I highly doubt this effects any code outside the library but it is argument. I highly doubt this effects any code outside the library but it is
possible. possible.
Bug fixes: Bug fixes:
- Fixed a bug in the base_window::set_size() function. If you specified a size - Fixed a bug in the base_window::set_size() function. If you specified a size
of (0,0) it caused your program to error out. This has now been fixed. of (0,0) it caused your program to error out. This has now been fixed.
- Fixed a bug in the scroll_bar widget. - Fixed a bug in the scroll_bar widget.
- Fixed a bug in save_bmp(). For some image sizes it would output a goofy - Fixed a bug in save_bmp(). For some image sizes it would output a goofy
looking skewed image. looking skewed image.
Other: Other:
- Switched everything that used to call operator&lt; directly to instead use - Switched everything that used to call operator&lt; directly to instead use
std::less or to take a template argument that provides a compare functor that std::less or to take a template argument that provides a compare functor that
defaults to std::less. defaults to std::less.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="8" date="Oct 03, 2006"> <old name="8" date="Oct 03, 2006">
New Stuff: New Stuff:
- Added the assign_pixel() function - Added the assign_pixel() function
- Added the hsi pixel type - Added the hsi pixel type
- Added the save_bmp() function - Added the save_bmp() function
- Added the static_switch template - Added the static_switch template
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed how the config_reader works. It now has a more powerful syntax and - Changed how the config_reader works. It now has a more powerful syntax and
improved interface. Converting any old code to use the new version should be improved interface. Converting any old code to use the new version should be
simple since the new file syntax is very nearly backwards compatable with the simple since the new file syntax is very nearly backwards compatable with the
old syntax. (i.e. You probably won't have to change anything about your old syntax. (i.e. You probably won't have to change anything about your
config files) config files)
- Renamed the dlib/image_loader.h file to dlib/image_io.h since it now includes - Renamed the dlib/image_loader.h file to dlib/image_io.h since it now includes
the image saver stuff. the image saver stuff.
- Renamed the pixel struct to rgb_pixel - Renamed the pixel struct to rgb_pixel
- Renamed pixel_traits::color to pixel_traits::rgb - Renamed pixel_traits::color to pixel_traits::rgb
- Renamed pixel_traits::scalar to pixel_traits::grayscale - Renamed pixel_traits::scalar to pixel_traits::grayscale
Bug fixes: Bug fixes:
- Fixed a bug in the load_bmp() function. It would load 24bit bmp files - Fixed a bug in the load_bmp() function. It would load 24bit bmp files
incorrectly. incorrectly.
- Changed the logger so that it won't deadlock if you write something similar to - Changed the logger so that it won't deadlock if you write something similar to
my_log &lt;&lt; LINFO &lt;&lt; function_that_also_logs();. Although this is a my_log &lt;&lt; LINFO &lt;&lt; function_that_also_logs();. Although this is a
dumb thing to do. But even so, it shouldn't deadlock. dumb thing to do. But even so, it shouldn't deadlock.
- Fixed a potential linking problem with the vector object. - Fixed a potential linking problem with the vector object.
Other: Other:
- I decided I'm not going to support Borland v5.5.1 anymore. There are just too - I decided I'm not going to support Borland v5.5.1 anymore. There are just too
many bugs in this compiler. It is very old at this point so I don't see this many bugs in this compiler. It is very old at this point so I don't see this
being a big deal. being a big deal.
- Made the drawable::draw_image() and load_bmp() functions able to handle images - Made the drawable::draw_image() and load_bmp() functions able to handle images
of any type of pixel. of any type of pixel.
- Pulled the imaging, algorithmic and metaprogramming stuff out of the - Pulled the imaging, algorithmic and metaprogramming stuff out of the
miscellaneous section of the web page and gave them all their own sections. miscellaneous section of the web page and gave them all their own sections.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="7" date="Sep 18, 2006"> <old name="7" date="Sep 18, 2006">
New Stuff: New Stuff:
- Added a logger header that prints the date and time. - Added a logger header that prints the date and time.
- Added the LTRACE logging level - Added the LTRACE logging level
- Added a buffered implementation of sockstreambuf. - Added a buffered implementation of sockstreambuf.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the specs to say that sockstreambuf may be buffered. - Changed the specs to say that sockstreambuf may be buffered.
sockstreambuf_kernel_1 is still just as it always has been though. So all old sockstreambuf_kernel_1 is still just as it always has been though. So all old
code will still work just as it always has. But all the same, the specs have code will still work just as it always has. But all the same, the specs have
been changed and now allow for an implemenation that is not 100% backwards been changed and now allow for an implemenation that is not 100% backwards
compatible. compatible.
- rand_kernel_2 now emits a different string of random numbers. - rand_kernel_2 now emits a different string of random numbers.
Bug fixes: Bug fixes:
- Changed the logger object's implementation to not try to register - Changed the logger object's implementation to not try to register
a thread end handler for the main program thread anymore. This was a thread end handler for the main program thread anymore. This was
technically a bug according to the spec but it actually did end up technically a bug according to the spec but it actually did end up
working the way it was supposed to. But even so, it shouldn't have working the way it was supposed to. But even so, it shouldn't have
been doing that. been doing that.
- Changed binary_search_tree_kernel_1 so that it avoids a bug in the version of - Changed binary_search_tree_kernel_1 so that it avoids a bug in the version of
gcc on SuSE Enterprise Linux 9. gcc on SuSE Enterprise Linux 9.
- Fixed a bug in the rand_kernel_2 implementation. It wasn't giving good - Fixed a bug in the rand_kernel_2 implementation. It wasn't giving good
random numbers. random numbers.
Other: Other:
- Modified the code so that you don't get any warnings when -Wall is used with - Modified the code so that you don't get any warnings when -Wall is used with
GCC. GCC.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="6" date="Aug 30, 2006"> <old name="6" date="Aug 30, 2006">
New Stuff: New Stuff:
- Added the ASSERT_ARE_SAME_TYPE macro - Added the ASSERT_ARE_SAME_TYPE macro
- Added the is_same_type template - Added the is_same_type template
- Added the get_main_thread_id() function to the threading API - Added the get_main_thread_id() function to the threading API
- Added the thread_specific_data extension to the threading API - Added the thread_specific_data extension to the threading API
- Added the logger object. - Added the logger object.
- Added the auto_unlock object to the threading API. - Added the auto_unlock object to the threading API.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
Bug fixes: Bug fixes:
Other: Other:
- Added an example that is specifically about using threads - Added an example that is specifically about using threads
- Added two examples about using the logger object - Added two examples about using the logger object
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="5" date="Aug 18, 2006"> <old name="5" date="Aug 18, 2006">
New Stuff: New Stuff:
- Added the memory_manager_stateless object and two implementations of it. - Added the memory_manager_stateless object and two implementations of it.
- Added the MACOSX macro to dlib/platform.h - Added the MACOSX macro to dlib/platform.h
- Added a templated version of create_new_thread() that allow you to start - Added a templated version of create_new_thread() that allow you to start
a thread with a member function. a thread with a member function.
- Added the register_thread_end_handler() function to the threading kernel API. - Added the register_thread_end_handler() function to the threading kernel API.
- Added memory_manager_kernel_3 - Added memory_manager_kernel_3
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Changed the meaning of the memory_manager_global::get_number_of_allocations() - Changed the meaning of the memory_manager_global::get_number_of_allocations()
function because the previous definition of it didn't really make sense for function because the previous definition of it didn't really make sense for
this object. this object.
- Changed the threading API to wait for all outstanding threads to terminate - Changed the threading API to wait for all outstanding threads to terminate
before allowing the program to end. It used to just let the OS trash those before allowing the program to end. It used to just let the OS trash those
threads when main() ended but this isn't a safe or portable thing to do. I threads when main() ended but this isn't a safe or portable thing to do. I
used to assume the user would make sure all their threads were done and had used to assume the user would make sure all their threads were done and had
cleaned up whatever they were doing before main() ended but this is too much cleaned up whatever they were doing before main() ended but this is too much
of a burden on the end user. So now the library will wait for your threads to of a burden on the end user. So now the library will wait for your threads to
end. You still need to have some way of telling them it is time to stop though. end. You still need to have some way of telling them it is time to stop though.
Bug fixes: Bug fixes:
- Fixed a minor bug in dlib/timer/timer_kernel_1.h. Its implementation was - Fixed a minor bug in dlib/timer/timer_kernel_1.h. Its implementation was
slightly off according to the specification of a timer object. slightly off according to the specification of a timer object.
Other: Other:
- The byte_order object is now capable of flipping entire arrays. - The byte_order object is now capable of flipping entire arrays.
- Made it so that the ENABLE_ASSERTS macro is defined whenever ASSERT is - Made it so that the ENABLE_ASSERTS macro is defined whenever ASSERT is
on. on.
- Made the array container use the memory managers. - Made the array container use the memory managers.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="4" date="Jul 18, 2006"> <old name="4" date="Jul 18, 2006">
New Stuff: New Stuff:
- Added functions to explicitly convert to/from little and big endian to the - Added functions to explicitly convert to/from little and big endian to the
byte_order object. byte_order object.
- Added the allocate_array() and deallocate_array() functions to the - Added the allocate_array() and deallocate_array() functions to the
memory_manager. memory_manager.
- Created the memory_manager_global object - Created the memory_manager_global object
- Added the remove_last_in_order(), position_enumerator() and - Added the remove_last_in_order(), position_enumerator() and
remove_current_element() functions to the binary_search_tree object. remove_current_element() functions to the binary_search_tree object.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- I put an #error directive in the old GUI component to notify anyone - I put an #error directive in the old GUI component to notify anyone
trying to use it that it is deprecated. I will be removing it from the trying to use it that it is deprecated. I will be removing it from the
library in a few months. library in a few months.
- Switched the reference_counter object back to not using the memory_manager. - Switched the reference_counter object back to not using the memory_manager.
I realized it isn't safe for this object to use the memory_manager since I realized it isn't safe for this object to use the memory_manager since
it could result in memory_managers freeing each other's allocations. it could result in memory_managers freeing each other's allocations.
- I redefined the pixel_traits template. It is now a lot simpler and more - I redefined the pixel_traits template. It is now a lot simpler and more
convenient. convenient.
Bug fixes: Bug fixes:
- Fixed a minor bug in dlib/rand/rand_kernel_2.cpp - Fixed a minor bug in dlib/rand/rand_kernel_2.cpp
Other: Other:
- Added some more compile time checks to the byte_orderer object. - Added some more compile time checks to the byte_orderer object.
- Changed some includes and preprocessor macros around a little so now - Changed some includes and preprocessor macros around a little so now
everything but the GUI stuff compiles in mac OS X. everything but the GUI stuff compiles in mac OS X.
- Added inclusion guards to all the .cpp files - Added inclusion guards to all the .cpp files
- Added the all_gui.cpp and all_console.cpp files. They - Added the all_gui.cpp and all_console.cpp files. They
include all the .cpp files you need to make gui and include all the .cpp files you need to make gui and
console applications respectively into one file. console applications respectively into one file.
- Made more containers use the memory_manager. - Made more containers use the memory_manager.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="3" date="May 06, 2006"> <old name="3" date="May 06, 2006">
New Stuff: New Stuff:
- Added the enqueue_or_timeout() and dequeue_or_timeout() functions - Added the enqueue_or_timeout() and dequeue_or_timeout() functions
to the pipe object. to the pipe object.
- Gave the mouse_tracker the ability to display the mouse position - Gave the mouse_tracker the ability to display the mouse position
relative to a user selected point. relative to a user selected point.
- Added the message_box() function to the gui_widgets component. - Added the message_box() function to the gui_widgets component.
- Gave the label widget the ability to draw newlines in strings. - Gave the label widget the ability to draw newlines in strings.
- added the close_window() and is_closed() methods to the base_window - added the close_window() and is_closed() methods to the base_window
object. object.
- Added the rsignaler extension to the threading API. - Added the rsignaler extension to the threading API.
- You can now control the thread pool timeout time by setting the - You can now control the thread pool timeout time by setting the
DLIB_THREAD_POOL_TIMEOUT #define. DLIB_THREAD_POOL_TIMEOUT #define.
- Added the get_from_clipboard() and put_on_clipboard() functions - Added the get_from_clipboard() and put_on_clipboard() functions
to the gui_core component. to the gui_core component.
- Added the stop_and_wait() function to the timer object. - Added the stop_and_wait() function to the timer object.
- Added the trigger_user_event() function and on_user_event() event - Added the trigger_user_event() function and on_user_event() event
to the base_window object. This new event is also forwarded to the base_window object. This new event is also forwarded
to drawable interfaces inside the receiving window. to drawable interfaces inside the receiving window.
- Added the wrap_around() function to the named_rectangle widget. - Added the wrap_around() function to the named_rectangle widget.
- Added the top(), left(), right(), bottom(), width() and height() - Added the top(), left(), right(), bottom(), width() and height()
functions to the drawable interface. functions to the drawable interface.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Made the radio_button and check_box widgets pass references to themselves - Made the radio_button and check_box widgets pass references to themselves
when they call their click handlers. when they call their click handlers.
- Switched the sync_extension to use the rmutex and rsignaler objects - Switched the sync_extension to use the rmutex and rsignaler objects
rather than the normal non-reentrant ones. ( Chances are that old rather than the normal non-reentrant ones. ( Chances are that old
code that used this will still compile fine anyway. ) code that used this will still compile fine anyway. )
- Changed the return type of rand::get_random_number() to be an - Changed the return type of rand::get_random_number() to be an
unsigned char. I also changed both the implementations of unsigned char. I also changed both the implementations of
rand because they weren't very good at all. rand because they weren't very good at all.
- Changed the functions related to drawing strings in the font class. - Changed the functions related to drawing strings in the font class.
- Changed the drawable's rectangle to default to being empty - Changed the drawable's rectangle to default to being empty
rather than being a single point. Most code should not notice rather than being a single point. Most code should not notice
the difference. the difference.
Bug fixes: Bug fixes:
- The event handlers in gui_widgets/drawable.h were private. They - The event handlers in gui_widgets/drawable.h were private. They
should be protected. This is now fixed. should be protected. This is now fixed.
- Fixed a bug in the way the scroll_bar was drawn when it was - Fixed a bug in the way the scroll_bar was drawn when it was
the HORIZONTAL type. the HORIZONTAL type.
- Changed how the thread pool destructs itself when the program - Changed how the thread pool destructs itself when the program
is ending. Previously it was possible to get an error on is ending. Previously it was possible to get an error on
NetBSD when the program was ending. This is now fixed. NetBSD when the program was ending. This is now fixed.
- The functions related to setting the jump size in the scroll_bar - The functions related to setting the jump size in the scroll_bar
widget were private. They are now public. widget were private. They are now public.
- There was a bug in the MS Windows version of the gui_core component - There was a bug in the MS Windows version of the gui_core component
where the members of the base_window would not work if called from where the members of the base_window would not work if called from
within the on_window_close() event. This has now been fixed. within the on_window_close() event. This has now been fixed.
- Made the set_pos() function work right for the mouse_tracker widget. - Made the set_pos() function work right for the mouse_tracker widget.
- Fixed a bug in the base64 object where the string "" could potentially - Fixed a bug in the base64 object where the string "" could potentially
be decoded incorrectly. be decoded incorrectly.
- Made the global swap function for crc32_kernel_1 inline. This fixes a - Made the global swap function for crc32_kernel_1 inline. This fixes a
potential linker error. potential linker error.
- Fixed some potential deadlocking that could occur while using the - Fixed some potential deadlocking that could occur while using the
gui widgets. gui widgets.
Other: Other:
- I moved all the regression tests into the dlib/test folder and - I moved all the regression tests into the dlib/test folder and
made a nice driver program to run all of them. made a nice driver program to run all of them.
- I have been using the sourceforge compile farms to test the library - I have been using the sourceforge compile farms to test the library
on various platforms. It now works for Solaris and some of the BSDs on various platforms. It now works for Solaris and some of the BSDs
in addition to Linux and Windows. in addition to Linux and Windows.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="2" date="Apr 08, 2006"> <old name="2" date="Apr 08, 2006">
New Stuff: New Stuff:
- Added the array_expand extension to the array object. - Added the array_expand extension to the array object.
- Added the cmd_line_parser_check extension to the command line parser. - Added the cmd_line_parser_check extension to the command line parser.
- Added the pipe object. - Added the pipe object.
- All applicable container classes now use the memory_manager component for - All applicable container classes now use the memory_manager component for
their memory allocation. their memory allocation.
- New implementations of the memory_manager object. - New implementations of the memory_manager object.
- Added the copy_functor class. - Added the copy_functor class.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- Moved the wrap_string, narrow, and string_cast functions - Moved the wrap_string, narrow, and string_cast functions
to a new file. You now have to include dlib/string.h to get to a new file. You now have to include dlib/string.h to get
them. (This makes a bunch of other things work right in gcc 2.95) them. (This makes a bunch of other things work right in gcc 2.95)
- Renamed the _L macro to _dT - Renamed the _L macro to _dT
- Removed the scopy class - Removed the scopy class
- Simplified the interface to the memory manager. It is basically the same - Simplified the interface to the memory manager. It is basically the same
though. though.
- Removed the max_size() methods from the hash_table and binary_search_tree - Removed the max_size() methods from the hash_table and binary_search_tree
objects. objects.
- Removed the T_is_POD template arguments from the hash_table and - Removed the T_is_POD template arguments from the hash_table and
binary_search_tree objects. binary_search_tree objects.
- Simplified the template arguments to all checking components and extensions. - Simplified the template arguments to all checking components and extensions.
They now take the class they are to extend or check as their only template They now take the class they are to extend or check as their only template
argument. This only affects you if you haven't been using the kernel_nx argument. This only affects you if you haven't been using the kernel_nx
typedefs. typedefs.
Bug fixes: Bug fixes:
Other: Other:
- I changed a few things around and now a majority of the library - I changed a few things around and now a majority of the library
again compiles under gcc 2.95. But some things don't and I currently again compiles under gcc 2.95. But some things don't and I currently
don't plan on making them work because it involves hackish workarounds don't plan on making them work because it involves hackish workarounds
of 2.95's bugs. of 2.95's bugs.
- Changed the compress_stream_kernel_1 object so that it will detect data - Changed the compress_stream_kernel_1 object so that it will detect data
corruptions better. This change will prevent it from correctly decompressing corruptions better. This change will prevent it from correctly decompressing
data that was compressed with a previous version and has an uncompressed size data that was compressed with a previous version and has an uncompressed size
greater than about 20,000 bytes. greater than about 20,000 bytes.
- There is a new cpp file you need to compile: dlib/error.cpp - There is a new cpp file you need to compile: dlib/error.cpp
- Moved all the regression testing stuff into the dlib/test folder and made - Moved all the regression testing stuff into the dlib/test folder and made
a nicer test driver to run them. a nicer test driver to run them.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="1" date="Mar 19, 2006"> <old name="1" date="Mar 19, 2006">
New Stuff: New Stuff:
- Created the byte_orderer object. - Created the byte_orderer object.
- Created the mouse_tracker gui widget. - Created the mouse_tracker gui widget.
- The sliding_buffer object is now enumerable and serializable. - The sliding_buffer object is now enumerable and serializable.
- Added the get_filesystem_roots() function to the dir_nar component. - Added the get_filesystem_roots() function to the dir_nar component.
- Added the create_directory() function to the misc_api component. - Added the create_directory() function to the misc_api component.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- The ASSERT macro is now only enabled if DEBUG or ENABLE_ASSERTS - The ASSERT macro is now only enabled if DEBUG or ENABLE_ASSERTS
is defined. is defined.
Bug fixes: Bug fixes:
- Fixed a minor bug in the cmd_line_parser object. If you gave - Fixed a minor bug in the cmd_line_parser object. If you gave
an option such as --option=arg when option didn't take any an option such as --option=arg when option didn't take any
arguments it could hang your program. arguments it could hang your program.
- Fixed a bug in wait_or_timeout() in the posix version of the threading - Fixed a bug in wait_or_timeout() in the posix version of the threading
api. The time to wait for was being calculated incorrectly and could api. The time to wait for was being calculated incorrectly and could
result in an excessive number of spurious returns. result in an excessive number of spurious returns.
- Fixed a minor bug in the on_keydown() event for windows. - Fixed a minor bug in the on_keydown() event for windows.
I had it set such that the shift and ctrl bools would be false I had it set such that the shift and ctrl bools would be false
if they were the actual keys being pressed. This isn't what the if they were the actual keys being pressed. This isn't what the
specs say should happen but I had a comment in the windows code specs say should happen but I had a comment in the windows code
that made it clear that I did it on purpose. Go figure :) that made it clear that I did it on purpose. Go figure :)
This is now fixed. This is now fixed.
Other: Other:
- Improved the cpp_tokenizer object's ability to recognize numerical - Improved the cpp_tokenizer object's ability to recognize numerical
constants. constants.
- Improved the text_field gui widget. - Improved the text_field gui widget.
- There are now two assert macros. One called ASSERT - There are now two assert macros. One called ASSERT
and another CASSERT. They both do the same thing but ASSERT and another CASSERT. They both do the same thing but ASSERT
is only enabled when DEBUG or ENABLE_ASSERTS is defined. is only enabled when DEBUG or ENABLE_ASSERTS is defined.
All the old ASSERT statements were changed to CASSERT statements. All the old ASSERT statements were changed to CASSERT statements.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="2006-02-23.01"> <old name="2006-02-23.01">
New Stuff: New Stuff:
- Added array_kernel_2 which is a simple layer on top of a C array. - Added array_kernel_2 which is a simple layer on top of a C array.
- Added the tabbed_display GUI widget - Added the tabbed_display GUI widget
- Added the widget_group GUI widget - Added the widget_group GUI widget
- Added the named_rectangle GUI widget - Added the named_rectangle GUI widget
- Added the pixel_traits template - Added the pixel_traits template
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- The default maximum size for an array object is now 0 rather than - The default maximum size for an array object is now 0 rather than
20,000. 20,000.
Bug fixes: Bug fixes:
Other: Other:
- made the cpp_pretty_printer a little better about how it handles - made the cpp_pretty_printer a little better about how it handles
C style code. Also added support for /*!A html_anchor_name !*/ C style code. Also added support for /*!A html_anchor_name !*/
style comments. style comments.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="2006-01-31.02"> <old name="2006-01-31.02">
New Stuff: New Stuff:
- Created the array2d object. - Created the array2d object.
- Created the base64 object. - Created the base64 object.
- Created the pixel struct. - Created the pixel struct.
- Created the load_bmp() function which can load a BMP image file - Created the load_bmp() function which can load a BMP image file
into an array2d object of pixels. into an array2d object of pixels.
- Created the drawable::draw_image() function - Created the drawable::draw_image() function
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- In the drawable interface I made the z order a long rather - In the drawable interface I made the z order a long rather
than unsigned long. than unsigned long.
- The cpp_tokenizer object now has a NUMBER token type. - The cpp_tokenizer object now has a NUMBER token type.
- removed the get_ prefix from functions in the cmd_line_parser - removed the get_ prefix from functions in the cmd_line_parser
and cmd_line_parser_option objects. Also changed the and cmd_line_parser_option objects. Also changed the
cmd_line_parser_option::operator[] function to a normal member cmd_line_parser_option::operator[] function to a normal member
function called argument(). function called argument().
Bug fixes: Bug fixes:
Other: Other:
- cpp_pretty_printer now colors numeric literals a shade of yellow. - cpp_pretty_printer now colors numeric literals a shade of yellow.
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
<old name="2006-01-15.03"> <old name="2006-01-15.03">
New Stuff: New Stuff:
- Created the member_function_pointer object. - Created the member_function_pointer object.
- Created the button_action object. - Created the button_action object.
- Created the arrow_button object. - Created the arrow_button object.
- Created the check_box object. - Created the check_box object.
- Created the radio_button object. - Created the radio_button object.
- Created the scroll_bar object. - Created the scroll_bar object.
- More drawing functions to draw various things - More drawing functions to draw various things
onto a canvas object. onto a canvas object.
- Added enable/disable functions to the - Added enable/disable functions to the
drawable interface. drawable interface.
Non-Backwards Compatible Changes: Non-Backwards Compatible Changes:
- The gui widgets are no longer templated at the - The gui widgets are no longer templated at the
class level. class level.
- The drawable object's constructor now takes a - The drawable object's constructor now takes a
bit set rather than a bunch of bools to tell it bit set rather than a bunch of bools to tell it
which events to enable. which events to enable.
- I changed the names of some of the functions in the - I changed the names of some of the functions in the
gui_widgets component so that they all reflected a gui_widgets component so that they all reflected a
uniform naming style. uniform naming style.
Bug fixes: Bug fixes:
- Fixed a minor bug in the cpp_tokenizer. - Fixed a minor bug in the cpp_tokenizer.
- Minor bug in the timer object. See change log for - Minor bug in the timer object. See change log for
details. details.
Other: Other:
- Made the timer object a little more robust - Made the timer object a little more robust
</old> </old>
<!-- ******************************************************************************* --> <!-- ******************************************************************************* -->
</release_notes> </release_notes>
</body> </body>
</doc> </doc>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment