initial commit
This commit is contained in:
parent
d4dc995bf8
commit
ae911acd22
33 changed files with 5875 additions and 5875 deletions
170
.gitignore
vendored
170
.gitignore
vendored
|
|
@ -1,85 +1,85 @@
|
|||
# specific name of executable generated
|
||||
toh_main_driver
|
||||
toh_test_driver
|
||||
|
||||
# Created by https://www.gitignore.io/api/c++,macos,linux
|
||||
# Edit at https://www.gitignore.io/?templates=c++,macos,linux
|
||||
|
||||
### C++ ###
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
### Linux ###
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# KDE directory preferences
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
### macOS ###
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# End of https://www.gitignore.io/api/c++,macos,linux
|
||||
# specific name of executable generated
|
||||
toh_main_driver
|
||||
toh_test_driver
|
||||
|
||||
# Created by https://www.gitignore.io/api/c++,macos,linux
|
||||
# Edit at https://www.gitignore.io/?templates=c++,macos,linux
|
||||
|
||||
### C++ ###
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
### Linux ###
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# KDE directory preferences
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
### macOS ###
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# End of https://www.gitignore.io/api/c++,macos,linux
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
[](https://classroom.github.com/a/ghli283M)
|
||||
[](https://classroom.github.com/a/ghli283M)
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
code {
|
||||
background: #eaeaea;
|
||||
padding: 0 0.3em;
|
||||
border-radius: 4px;
|
||||
}
|
||||
div.fragment {
|
||||
padding: 0.5em;
|
||||
border-radius: 4px;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
div.line {
|
||||
line-height: 1.4;
|
||||
code {
|
||||
background: #eaeaea;
|
||||
padding: 0 0.3em;
|
||||
border-radius: 4px;
|
||||
}
|
||||
div.fragment {
|
||||
padding: 0.5em;
|
||||
border-radius: 4px;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
div.line {
|
||||
line-height: 1.4;
|
||||
}
|
||||
3460
html/doxygen.css
3460
html/doxygen.css
File diff suppressed because it is too large
Load diff
|
|
@ -1,14 +1,14 @@
|
|||
code {
|
||||
background: #eaeaea;
|
||||
padding: 0 0.3em;
|
||||
border-radius: 4px;
|
||||
}
|
||||
div.fragment {
|
||||
padding: 0.5em;
|
||||
border-radius: 4px;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
div.line {
|
||||
line-height: 1.4;
|
||||
code {
|
||||
background: #eaeaea;
|
||||
padding: 0 0.3em;
|
||||
border-radius: 4px;
|
||||
}
|
||||
div.fragment {
|
||||
padding: 0.5em;
|
||||
border-radius: 4px;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
div.line {
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
|
@ -1,121 +1,121 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
function toggleVisibility(linkObj)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
var summary = $('#'+base+'-summary');
|
||||
var content = $('#'+base+'-content');
|
||||
var trigger = $('#'+base+'-trigger');
|
||||
var src=$(trigger).attr('src');
|
||||
if (content.is(':visible')===true) {
|
||||
content.hide();
|
||||
summary.show();
|
||||
$(linkObj).addClass('closed').removeClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
content.show();
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateStripes()
|
||||
{
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function() {
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
// the clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
|
||||
// all rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
// only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||
|
||||
// first row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
/* @license-end */
|
||||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
function toggleVisibility(linkObj)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
var summary = $('#'+base+'-summary');
|
||||
var content = $('#'+base+'-content');
|
||||
var trigger = $('#'+base+'-trigger');
|
||||
var src=$(trigger).attr('src');
|
||||
if (content.is(':visible')===true) {
|
||||
content.hide();
|
||||
summary.show();
|
||||
$(linkObj).addClass('closed').removeClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
content.show();
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateStripes()
|
||||
{
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function() {
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
// the clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
|
||||
// all rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
// only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||
|
||||
// first row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
/* @license-end */
|
||||
|
|
|
|||
164
html/files.html
164
html/files.html
|
|
@ -1,82 +1,82 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: File List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">File List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="mainpage_8h_source.html"><span class="icondoc"></span></a><a class="el" href="mainpage_8h.html" target="_self">mainpage.h</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: File List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">File List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="mainpage_8h_source.html"><span class="icondoc"></span></a><a class="el" href="mainpage_8h.html" target="_self">mainpage.h</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
198
html/index.html
198
html/index.html
|
|
@ -1,99 +1,99 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: Main Page</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="PageDoc"><div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Trim String Documentation</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><p>Trim String - a simple string operation assignment</p>
|
||||
<h1><a class="anchor" id="intoduction"></a>
|
||||
Introduction</h1>
|
||||
<p>A function trim() shall remove all leading and trailing whitespace characters. Whitespace characters are space (' ' ), tabulator ('\t'), new line ('<br />
|
||||
'), and line feed ('\r') charaters.</p>
|
||||
<p>The function should be implemented in two variants: One variant copies a part of a string into another. The other variant manipulates the original string without creating a copy.</p>
|
||||
<p>If we consider the string </p><pre>" This string can be trimmed . "</pre><p> the trimmed version of it would be </p><pre>"This string can be trimmed ."</pre><h1><a class="anchor" id="assignment"></a>
|
||||
Assignment</h1>
|
||||
<ol type="1">
|
||||
<li>Implement the non-copying variant function <code>trim()</code> such that all unit tests pass.</li>
|
||||
<li>Implement the copying variant function <code>trim_cpy()</code> such that all unit tests pass.</li>
|
||||
<li>Avoid code duplication, functionality that is useful for each variant shall be implemented in private(!) functions.</li>
|
||||
<li>Avoid copying character by character (inefficient), use the appropriate <code>strcpy</code> function for this purpose.</li>
|
||||
<li>Implement the newly created main() function such that it accpets a string as command line argument and<ol type="a">
|
||||
<li>Stage 1: prints the command line arguments via printf().</li>
|
||||
<li>Stage 2: copies the command line arguments via strcpy() or sprintf() or character by character (a method you did not use when implementing trim()) into a newly declared character array of length 512.</li>
|
||||
<li>Stage 3: calls the function trim() and outputs the result into the <code>stdout</code>.</li>
|
||||
<li>A 'usage' line shall be printed to <code>stdout</code> if the number of actual command line arguments does not match the number of expected arguments. </li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
</div></div><!-- PageDoc -->
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: Main Page</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="PageDoc"><div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Trim String Documentation</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><p>Trim String - a simple string operation assignment</p>
|
||||
<h1><a class="anchor" id="intoduction"></a>
|
||||
Introduction</h1>
|
||||
<p>A function trim() shall remove all leading and trailing whitespace characters. Whitespace characters are space (' ' ), tabulator ('\t'), new line ('<br />
|
||||
'), and line feed ('\r') charaters.</p>
|
||||
<p>The function should be implemented in two variants: One variant copies a part of a string into another. The other variant manipulates the original string without creating a copy.</p>
|
||||
<p>If we consider the string </p><pre>" This string can be trimmed . "</pre><p> the trimmed version of it would be </p><pre>"This string can be trimmed ."</pre><h1><a class="anchor" id="assignment"></a>
|
||||
Assignment</h1>
|
||||
<ol type="1">
|
||||
<li>Implement the non-copying variant function <code>trim()</code> such that all unit tests pass.</li>
|
||||
<li>Implement the copying variant function <code>trim_cpy()</code> such that all unit tests pass.</li>
|
||||
<li>Avoid code duplication, functionality that is useful for each variant shall be implemented in private(!) functions.</li>
|
||||
<li>Avoid copying character by character (inefficient), use the appropriate <code>strcpy</code> function for this purpose.</li>
|
||||
<li>Implement the newly created main() function such that it accpets a string as command line argument and<ol type="a">
|
||||
<li>Stage 1: prints the command line arguments via printf().</li>
|
||||
<li>Stage 2: copies the command line arguments via strcpy() or sprintf() or character by character (a method you did not use when implementing trim()) into a newly declared character array of length 512.</li>
|
||||
<li>Stage 3: calls the function trim() and outputs the result into the <code>stdout</code>.</li>
|
||||
<li>A 'usage' line shall be printed to <code>stdout</code> if the number of actual command line arguments does not match the number of expected arguments. </li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
</div></div><!-- PageDoc -->
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
68
html/jquery.js
vendored
68
html/jquery.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -1,79 +1,79 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: mainpage.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">mainpage.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="mainpage_8h_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: mainpage.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">mainpage.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a href="mainpage_8h_source.html">Go to the source code of this file.</a></p>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,78 +1,78 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: mainpage.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">mainpage.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="mainpage_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>  </div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Trim String: mainpage.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="doxygen_extra.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">Trim String
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.18 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">mainpage.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="mainpage_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>  </div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Mar 21 2022 19:15:25 for Trim String by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.18
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
102
html/menu.js
102
html/menu.js
|
|
@ -1,51 +1,51 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||
function makeTree(data,relPath) {
|
||||
var result='';
|
||||
if ('children' in data) {
|
||||
result+='<ul>';
|
||||
for (var i in data.children) {
|
||||
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
||||
data.children[i].text+'</a>'+
|
||||
makeTree(data.children[i],relPath)+'</li>';
|
||||
}
|
||||
result+='</ul>';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
$('#main-nav').append(makeTree(menudata,relPath));
|
||||
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||
if (searchEnabled) {
|
||||
if (serverSide) {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
|
||||
} else {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
|
||||
}
|
||||
}
|
||||
$('#main-menu').smartmenus();
|
||||
}
|
||||
/* @license-end */
|
||||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||
function makeTree(data,relPath) {
|
||||
var result='';
|
||||
if ('children' in data) {
|
||||
result+='<ul>';
|
||||
for (var i in data.children) {
|
||||
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
||||
data.children[i].text+'</a>'+
|
||||
makeTree(data.children[i],relPath)+'</li>';
|
||||
}
|
||||
result+='</ul>';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
$('#main-nav').append(makeTree(menudata,relPath));
|
||||
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||
if (searchEnabled) {
|
||||
if (serverSide) {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
|
||||
} else {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
|
||||
}
|
||||
}
|
||||
$('#main-menu').smartmenus();
|
||||
}
|
||||
/* @license-end */
|
||||
|
|
|
|||
|
|
@ -1,28 +1,28 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
var menudata={children:[
|
||||
{text:"Main Page",url:"index.html"},
|
||||
{text:"Files",url:"files.html",children:[
|
||||
{text:"File List",url:"files.html"}]}]}
|
||||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
var menudata={children:[
|
||||
{text:"Main Page",url:"index.html"},
|
||||
{text:"Files",url:"files.html",children:[
|
||||
{text:"File List",url:"files.html"}]}]}
|
||||
|
|
|
|||
|
|
@ -1,36 +1,36 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_0.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
createResults();
|
||||
/* @license-end */
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
window.addEventListener("message", function(event) {
|
||||
if (event.data == "take_focus") {
|
||||
var elem = searchResults.NavNext(0);
|
||||
if (elem) elem.focus();
|
||||
}
|
||||
});
|
||||
/* @license-end */
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_0.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
createResults();
|
||||
/* @license-end */
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
window.addEventListener("message", function(event) {
|
||||
if (event.data == "take_focus") {
|
||||
var elem = searchResults.NavNext(0);
|
||||
if (elem) elem.focus();
|
||||
}
|
||||
});
|
||||
/* @license-end */
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
var searchData=
|
||||
[
|
||||
['mainpage_2eh_0',['mainpage.h',['../mainpage_8h.html',1,'']]]
|
||||
];
|
||||
var searchData=
|
||||
[
|
||||
['mainpage_2eh_0',['mainpage.h',['../mainpage_8h.html',1,'']]]
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,36 +1,36 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="files_0.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
createResults();
|
||||
/* @license-end */
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
window.addEventListener("message", function(event) {
|
||||
if (event.data == "take_focus") {
|
||||
var elem = searchResults.NavNext(0);
|
||||
if (elem) elem.focus();
|
||||
}
|
||||
});
|
||||
/* @license-end */
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.18"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="files_0.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
createResults();
|
||||
/* @license-end */
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
window.addEventListener("message", function(event) {
|
||||
if (event.data == "take_focus") {
|
||||
var elem = searchResults.NavNext(0);
|
||||
if (elem) elem.focus();
|
||||
}
|
||||
});
|
||||
/* @license-end */
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
var searchData=
|
||||
[
|
||||
['mainpage_2eh_1',['mainpage.h',['../mainpage_8h.html',1,'']]]
|
||||
];
|
||||
var searchData=
|
||||
[
|
||||
['mainpage_2eh_1',['mainpage.h',['../mainpage_8h.html',1,'']]]
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,271 +1,271 @@
|
|||
/*---------------- Search Box */
|
||||
|
||||
#FSearchBox {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#MSearchBox {
|
||||
white-space : nowrap;
|
||||
float: none;
|
||||
margin-top: 8px;
|
||||
right: 0px;
|
||||
width: 170px;
|
||||
height: 24px;
|
||||
z-index: 102;
|
||||
}
|
||||
|
||||
#MSearchBox .left
|
||||
{
|
||||
display:block;
|
||||
position:absolute;
|
||||
left:10px;
|
||||
width:20px;
|
||||
height:19px;
|
||||
background:url('search_l.png') no-repeat;
|
||||
background-position:right;
|
||||
}
|
||||
|
||||
#MSearchSelect {
|
||||
display:block;
|
||||
position:absolute;
|
||||
width:20px;
|
||||
height:19px;
|
||||
}
|
||||
|
||||
.left #MSearchSelect {
|
||||
left:4px;
|
||||
}
|
||||
|
||||
.right #MSearchSelect {
|
||||
right:5px;
|
||||
}
|
||||
|
||||
#MSearchField {
|
||||
display:block;
|
||||
position:absolute;
|
||||
height:19px;
|
||||
background:url('search_m.png') repeat-x;
|
||||
border:none;
|
||||
width:115px;
|
||||
margin-left:20px;
|
||||
padding-left:4px;
|
||||
color: #909090;
|
||||
outline: none;
|
||||
font: 9pt Arial, Verdana, sans-serif;
|
||||
-webkit-border-radius: 0px;
|
||||
}
|
||||
|
||||
#FSearchBox #MSearchField {
|
||||
margin-left:15px;
|
||||
}
|
||||
|
||||
#MSearchBox .right {
|
||||
display:block;
|
||||
position:absolute;
|
||||
right:10px;
|
||||
top:8px;
|
||||
width:20px;
|
||||
height:19px;
|
||||
background:url('search_r.png') no-repeat;
|
||||
background-position:left;
|
||||
}
|
||||
|
||||
#MSearchClose {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
background : none;
|
||||
border: none;
|
||||
margin: 0px 4px 0px 0px;
|
||||
padding: 0px 0px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.left #MSearchClose {
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.right #MSearchClose {
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
.MSearchBoxActive #MSearchField {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/*---------------- Search filter selection */
|
||||
|
||||
#MSearchSelectWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #90A5CE;
|
||||
background-color: #F9FAFC;
|
||||
z-index: 10001;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.SelectItem {
|
||||
font: 8pt Arial, Verdana, sans-serif;
|
||||
padding-left: 2px;
|
||||
padding-right: 12px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
span.SelectionMark {
|
||||
margin-right: 4px;
|
||||
font-family: monospace;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.SelectItem {
|
||||
display: block;
|
||||
outline-style: none;
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
padding-left: 6px;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
a.SelectItem:focus,
|
||||
a.SelectItem:active {
|
||||
color: #000000;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.SelectItem:hover {
|
||||
color: #FFFFFF;
|
||||
background-color: #3D578C;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*---------------- Search results window */
|
||||
|
||||
iframe#MSearchResults {
|
||||
width: 60ex;
|
||||
height: 15em;
|
||||
}
|
||||
|
||||
#MSearchResultsWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #000;
|
||||
background-color: #EEF1F7;
|
||||
z-index:10000;
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
|
||||
|
||||
#SRIndex {
|
||||
clear:both;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.SREntry {
|
||||
font-size: 10pt;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
|
||||
.SRPage .SREntry {
|
||||
font-size: 8pt;
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
body.SRPage {
|
||||
margin: 5px 2px;
|
||||
}
|
||||
|
||||
.SRChildren {
|
||||
padding-left: 3ex; padding-bottom: .5em
|
||||
}
|
||||
|
||||
.SRPage .SRChildren {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.SRSymbol {
|
||||
font-weight: bold;
|
||||
color: #425E97;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRScope {
|
||||
display: block;
|
||||
color: #425E97;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRSymbol:focus, a.SRSymbol:active,
|
||||
a.SRScope:focus, a.SRScope:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
span.SRScope {
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.SRPage .SRStatus {
|
||||
padding: 2px 5px;
|
||||
font-size: 8pt;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.SRResult {
|
||||
display: none;
|
||||
}
|
||||
|
||||
DIV.searchresults {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/*---------------- External search page results */
|
||||
|
||||
.searchresult {
|
||||
background-color: #F0F3F8;
|
||||
}
|
||||
|
||||
.pages b {
|
||||
color: white;
|
||||
padding: 5px 5px 3px 5px;
|
||||
background-image: url("../tab_a.png");
|
||||
background-repeat: repeat-x;
|
||||
text-shadow: 0 1px 1px #000000;
|
||||
}
|
||||
|
||||
.pages {
|
||||
line-height: 17px;
|
||||
margin-left: 4px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.hl {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#searchresults {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.searchpages {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/*---------------- Search Box */
|
||||
|
||||
#FSearchBox {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#MSearchBox {
|
||||
white-space : nowrap;
|
||||
float: none;
|
||||
margin-top: 8px;
|
||||
right: 0px;
|
||||
width: 170px;
|
||||
height: 24px;
|
||||
z-index: 102;
|
||||
}
|
||||
|
||||
#MSearchBox .left
|
||||
{
|
||||
display:block;
|
||||
position:absolute;
|
||||
left:10px;
|
||||
width:20px;
|
||||
height:19px;
|
||||
background:url('search_l.png') no-repeat;
|
||||
background-position:right;
|
||||
}
|
||||
|
||||
#MSearchSelect {
|
||||
display:block;
|
||||
position:absolute;
|
||||
width:20px;
|
||||
height:19px;
|
||||
}
|
||||
|
||||
.left #MSearchSelect {
|
||||
left:4px;
|
||||
}
|
||||
|
||||
.right #MSearchSelect {
|
||||
right:5px;
|
||||
}
|
||||
|
||||
#MSearchField {
|
||||
display:block;
|
||||
position:absolute;
|
||||
height:19px;
|
||||
background:url('search_m.png') repeat-x;
|
||||
border:none;
|
||||
width:115px;
|
||||
margin-left:20px;
|
||||
padding-left:4px;
|
||||
color: #909090;
|
||||
outline: none;
|
||||
font: 9pt Arial, Verdana, sans-serif;
|
||||
-webkit-border-radius: 0px;
|
||||
}
|
||||
|
||||
#FSearchBox #MSearchField {
|
||||
margin-left:15px;
|
||||
}
|
||||
|
||||
#MSearchBox .right {
|
||||
display:block;
|
||||
position:absolute;
|
||||
right:10px;
|
||||
top:8px;
|
||||
width:20px;
|
||||
height:19px;
|
||||
background:url('search_r.png') no-repeat;
|
||||
background-position:left;
|
||||
}
|
||||
|
||||
#MSearchClose {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
background : none;
|
||||
border: none;
|
||||
margin: 0px 4px 0px 0px;
|
||||
padding: 0px 0px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.left #MSearchClose {
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.right #MSearchClose {
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
.MSearchBoxActive #MSearchField {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/*---------------- Search filter selection */
|
||||
|
||||
#MSearchSelectWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #90A5CE;
|
||||
background-color: #F9FAFC;
|
||||
z-index: 10001;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.SelectItem {
|
||||
font: 8pt Arial, Verdana, sans-serif;
|
||||
padding-left: 2px;
|
||||
padding-right: 12px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
span.SelectionMark {
|
||||
margin-right: 4px;
|
||||
font-family: monospace;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.SelectItem {
|
||||
display: block;
|
||||
outline-style: none;
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
padding-left: 6px;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
a.SelectItem:focus,
|
||||
a.SelectItem:active {
|
||||
color: #000000;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.SelectItem:hover {
|
||||
color: #FFFFFF;
|
||||
background-color: #3D578C;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*---------------- Search results window */
|
||||
|
||||
iframe#MSearchResults {
|
||||
width: 60ex;
|
||||
height: 15em;
|
||||
}
|
||||
|
||||
#MSearchResultsWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #000;
|
||||
background-color: #EEF1F7;
|
||||
z-index:10000;
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
|
||||
|
||||
#SRIndex {
|
||||
clear:both;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.SREntry {
|
||||
font-size: 10pt;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
|
||||
.SRPage .SREntry {
|
||||
font-size: 8pt;
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
body.SRPage {
|
||||
margin: 5px 2px;
|
||||
}
|
||||
|
||||
.SRChildren {
|
||||
padding-left: 3ex; padding-bottom: .5em
|
||||
}
|
||||
|
||||
.SRPage .SRChildren {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.SRSymbol {
|
||||
font-weight: bold;
|
||||
color: #425E97;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRScope {
|
||||
display: block;
|
||||
color: #425E97;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRSymbol:focus, a.SRSymbol:active,
|
||||
a.SRScope:focus, a.SRScope:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
span.SRScope {
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.SRPage .SRStatus {
|
||||
padding: 2px 5px;
|
||||
font-size: 8pt;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.SRResult {
|
||||
display: none;
|
||||
}
|
||||
|
||||
DIV.searchresults {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/*---------------- External search page results */
|
||||
|
||||
.searchresult {
|
||||
background-color: #F0F3F8;
|
||||
}
|
||||
|
||||
.pages b {
|
||||
color: white;
|
||||
padding: 5px 5px 3px 5px;
|
||||
background-image: url("../tab_a.png");
|
||||
background-repeat: repeat-x;
|
||||
text-shadow: 0 1px 1px #000000;
|
||||
}
|
||||
|
||||
.pages {
|
||||
line-height: 17px;
|
||||
margin-left: 4px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.hl {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#searchresults {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.searchpages {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,18 +1,18 @@
|
|||
var indexSectionsWithContent =
|
||||
{
|
||||
0: "m",
|
||||
1: "m"
|
||||
};
|
||||
|
||||
var indexSectionNames =
|
||||
{
|
||||
0: "all",
|
||||
1: "files"
|
||||
};
|
||||
|
||||
var indexSectionLabels =
|
||||
{
|
||||
0: "All",
|
||||
1: "Files"
|
||||
};
|
||||
|
||||
var indexSectionsWithContent =
|
||||
{
|
||||
0: "m",
|
||||
1: "m"
|
||||
};
|
||||
|
||||
var indexSectionNames =
|
||||
{
|
||||
0: "all",
|
||||
1: "files"
|
||||
};
|
||||
|
||||
var indexSectionLabels =
|
||||
{
|
||||
0: "All",
|
||||
1: "Files"
|
||||
};
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
68
mainpage.h
68
mainpage.h
|
|
@ -1,34 +1,34 @@
|
|||
/**
|
||||
* @mainpage
|
||||
* Trim String - a simple string operation assignment
|
||||
*
|
||||
* @section intoduction Introduction
|
||||
* A function trim() shall remove all leading and trailing whitespace
|
||||
* characters. Whitespace characters are space (' ' ), tabulator ('\t'),
|
||||
* new line ('\n'), and line feed ('\r') charaters.
|
||||
*
|
||||
* The function should be implemented in two variants:
|
||||
* One variant copies a part of a string into another.
|
||||
* The other variant manipulates the original string without
|
||||
* creating a copy.
|
||||
*
|
||||
* If we consider the string <pre>" This string can be trimmed . "</pre> the
|
||||
* trimmed version of it would be <pre>"This string can be trimmed ."</pre>
|
||||
*
|
||||
* @section assignment Assignment
|
||||
* -# Implement the non-copying variant function ` trim()` such that all unit tests pass.
|
||||
* -# Implement the copying variant function ` trim_cpy()` such that all unit tests pass.
|
||||
* -# Avoid code duplication, functionality that is useful for each variant shall be
|
||||
* implemented in private(!) functions.
|
||||
* -# Avoid copying character by character (inefficient), use the appropriate `strcpy`
|
||||
* function for this purpose.
|
||||
* -# Implement the newly created main() function such that it accpets a string
|
||||
* as command line argument and
|
||||
* -# Stage 1: prints the command line arguments via printf().
|
||||
* -# Stage 2: copies the command line arguments via strcpy() or sprintf() or
|
||||
* character by character (a method you did not use when implementing trim()) into a newly
|
||||
* declared character array of length 512.
|
||||
* -# Stage 3: calls the function trim() and outputs the result into the `stdout`.
|
||||
* -# A 'usage' line shall be printed to `stdout` if the number of actual command line
|
||||
* arguments does not match the number of expected arguments.
|
||||
*/
|
||||
/**
|
||||
* @mainpage
|
||||
* Trim String - a simple string operation assignment
|
||||
*
|
||||
* @section intoduction Introduction
|
||||
* A function trim() shall remove all leading and trailing whitespace
|
||||
* characters. Whitespace characters are space (' ' ), tabulator ('\t'),
|
||||
* new line ('\n'), and line feed ('\r') charaters.
|
||||
*
|
||||
* The function should be implemented in two variants:
|
||||
* One variant copies a part of a string into another.
|
||||
* The other variant manipulates the original string without
|
||||
* creating a copy.
|
||||
*
|
||||
* If we consider the string <pre>" This string can be trimmed . "</pre> the
|
||||
* trimmed version of it would be <pre>"This string can be trimmed ."</pre>
|
||||
*
|
||||
* @section assignment Assignment
|
||||
* -# Implement the non-copying variant function ` trim()` such that all unit tests pass.
|
||||
* -# Implement the copying variant function ` trim_cpy()` such that all unit tests pass.
|
||||
* -# Avoid code duplication, functionality that is useful for each variant shall be
|
||||
* implemented in private(!) functions.
|
||||
* -# Avoid copying character by character (inefficient), use the appropriate `strcpy`
|
||||
* function for this purpose.
|
||||
* -# Implement the newly created main() function such that it accpets a string
|
||||
* as command line argument and
|
||||
* -# Stage 1: prints the command line arguments via printf().
|
||||
* -# Stage 2: copies the command line arguments via strcpy() or sprintf() or
|
||||
* character by character (a method you did not use when implementing trim()) into a newly
|
||||
* declared character array of length 512.
|
||||
* -# Stage 3: calls the function trim() and outputs the result into the `stdout`.
|
||||
* -# A 'usage' line shall be printed to `stdout` if the number of actual command line
|
||||
* arguments does not match the number of expected arguments.
|
||||
*/
|
||||
|
|
|
|||
198
makefile
198
makefile
|
|
@ -1,99 +1,99 @@
|
|||
CC = gcc
|
||||
CCLINK = g++
|
||||
LIBS =
|
||||
CCOPTIONS = -Wall -pedantic -std=gnu11 -g
|
||||
LDOPTIONS =
|
||||
|
||||
BUILD_DIR = build
|
||||
|
||||
TEST = trim_str_test_app
|
||||
PROGRAM = trim_str_app
|
||||
|
||||
COMMON_HDRS = general.h
|
||||
LIBRARY_FILES = shortcut
|
||||
ASSIGNMENT_HDRS =
|
||||
ASSIGNMENT_FILES = trim
|
||||
TEST_FILES = test_trim
|
||||
MAIN_DRIVER = trim_str
|
||||
TEST_DRIVER = trim_str_test_driver
|
||||
|
||||
LIBRARY_H = $(addsuffix .h, $(LIBRARY_FILES))
|
||||
ASSIGNMENT_H = $(addsuffix .h, $(ASSIGNMENT_FILES)) $(ASSIGNMENT_HDRS)
|
||||
ASSIGNMENT_C = $(addsuffix .c, $(ASSIGNMENT_FILES)) $(MAIN_DRIVER).c
|
||||
|
||||
HDRS = $(ASSIGNEMT_H) $(SHARED_HDRS) $(COMMON_HDRS) $(LIBRARY_H)
|
||||
TESTOBJECT = $(addprefix $(BUILD_DIR)/, $(TEST_DRIVER).o)
|
||||
MAINOBJECT = $(addprefix $(BUILD_DIR)/, $(MAIN_DRIVER).o)
|
||||
LIBRARY_OBJS = $(addprefix $(BUILD_DIR)/, $(addsuffix .o, $(LIBRARY_FILES)))
|
||||
TEST_OBJS = $(addprefix $(BUILD_DIR)/, $(addsuffix .o, $(TEST_FILES)))
|
||||
MAIN_OBJ = $(addprefix $(BUILD_DIR)/, $(addsuffix .o, $(ASSIGNMENT_FILES)))
|
||||
OBJS = $(LIBRARY_OBJS) $(MAIN_OBJ) $(TEST_OBJS)
|
||||
|
||||
DOXY = doxygen
|
||||
|
||||
all: $(PROGRAM)
|
||||
./$(PROGRAM) " Such a messy text "
|
||||
|
||||
$(TEST): $(BUILD_DIR) $(OBJS) $(TESTOBJECT)
|
||||
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(TESTOBJECT)
|
||||
|
||||
$(PROGRAM): $(BUILD_DIR) $(OBJS) $(MAINOBJECT)
|
||||
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(MAINOBJECT)
|
||||
|
||||
.PHONY: clean cleanall doxy test setsample setassignment definesample defineassignment assignmentfolder
|
||||
|
||||
clean:
|
||||
rm -f $(PROGRAM) $(TEST) $(TESTOBJECT) $(MAINOBJECT) $(OBJS)
|
||||
rm -rf $(BUILD_DIR)
|
||||
rm -f *.o
|
||||
|
||||
cleanall: clean
|
||||
rm -f index.html
|
||||
rm -rf html
|
||||
|
||||
|
||||
doxy:
|
||||
$(DOXY)
|
||||
rm -f index.html
|
||||
ln -s html/index.html index.html
|
||||
|
||||
test: $(TEST)
|
||||
./$(TEST)
|
||||
|
||||
cleantest: clean
|
||||
clear
|
||||
make test
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
$(BUILD_DIR)/%.o: %.c
|
||||
$(CC) $(CCOPTIONS) -c -o $@ $<
|
||||
|
||||
#sets project as sample solution
|
||||
setsample:
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name).sample $(name);)
|
||||
|
||||
#sets project as assignment
|
||||
setassignment:
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name).assignment $(name);)
|
||||
|
||||
# defines current state of project as sample solution
|
||||
definesample:
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name) $(name).sample;)
|
||||
|
||||
# defines current sate of project as assignment
|
||||
defineassignment :
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name) $(name).assignment;)
|
||||
|
||||
# creates a folder which can serve as a publishable assignment
|
||||
assignmentfolder:
|
||||
make setassignment
|
||||
make doxy
|
||||
rm -rf ../assignment
|
||||
mkdir ../assignment
|
||||
cp -R * ../assignment
|
||||
cp .gitignore ../assignment
|
||||
rm ../assignment/*.sample
|
||||
rm ../assignment/*.assignment
|
||||
make cleanall
|
||||
CC = gcc
|
||||
CCLINK = g++
|
||||
LIBS =
|
||||
CCOPTIONS = -Wall -pedantic -std=gnu11 -g
|
||||
LDOPTIONS =
|
||||
|
||||
BUILD_DIR = build
|
||||
|
||||
TEST = trim_str_test_app
|
||||
PROGRAM = trim_str_app
|
||||
|
||||
COMMON_HDRS = general.h
|
||||
LIBRARY_FILES = shortcut
|
||||
ASSIGNMENT_HDRS =
|
||||
ASSIGNMENT_FILES = trim
|
||||
TEST_FILES = test_trim
|
||||
MAIN_DRIVER = trim_str
|
||||
TEST_DRIVER = trim_str_test_driver
|
||||
|
||||
LIBRARY_H = $(addsuffix .h, $(LIBRARY_FILES))
|
||||
ASSIGNMENT_H = $(addsuffix .h, $(ASSIGNMENT_FILES)) $(ASSIGNMENT_HDRS)
|
||||
ASSIGNMENT_C = $(addsuffix .c, $(ASSIGNMENT_FILES)) $(MAIN_DRIVER).c
|
||||
|
||||
HDRS = $(ASSIGNEMT_H) $(SHARED_HDRS) $(COMMON_HDRS) $(LIBRARY_H)
|
||||
TESTOBJECT = $(addprefix $(BUILD_DIR)/, $(TEST_DRIVER).o)
|
||||
MAINOBJECT = $(addprefix $(BUILD_DIR)/, $(MAIN_DRIVER).o)
|
||||
LIBRARY_OBJS = $(addprefix $(BUILD_DIR)/, $(addsuffix .o, $(LIBRARY_FILES)))
|
||||
TEST_OBJS = $(addprefix $(BUILD_DIR)/, $(addsuffix .o, $(TEST_FILES)))
|
||||
MAIN_OBJ = $(addprefix $(BUILD_DIR)/, $(addsuffix .o, $(ASSIGNMENT_FILES)))
|
||||
OBJS = $(LIBRARY_OBJS) $(MAIN_OBJ) $(TEST_OBJS)
|
||||
|
||||
DOXY = doxygen
|
||||
|
||||
all: $(PROGRAM)
|
||||
./$(PROGRAM) " Such a messy text "
|
||||
|
||||
$(TEST): $(BUILD_DIR) $(OBJS) $(TESTOBJECT)
|
||||
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(TESTOBJECT)
|
||||
|
||||
$(PROGRAM): $(BUILD_DIR) $(OBJS) $(MAINOBJECT)
|
||||
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(MAINOBJECT)
|
||||
|
||||
.PHONY: clean cleanall doxy test setsample setassignment definesample defineassignment assignmentfolder
|
||||
|
||||
clean:
|
||||
rm -f $(PROGRAM) $(TEST) $(TESTOBJECT) $(MAINOBJECT) $(OBJS)
|
||||
rm -rf $(BUILD_DIR)
|
||||
rm -f *.o
|
||||
|
||||
cleanall: clean
|
||||
rm -f index.html
|
||||
rm -rf html
|
||||
|
||||
|
||||
doxy:
|
||||
$(DOXY)
|
||||
rm -f index.html
|
||||
ln -s html/index.html index.html
|
||||
|
||||
test: $(TEST)
|
||||
./$(TEST)
|
||||
|
||||
cleantest: clean
|
||||
clear
|
||||
make test
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
$(BUILD_DIR)/%.o: %.c
|
||||
$(CC) $(CCOPTIONS) -c -o $@ $<
|
||||
|
||||
#sets project as sample solution
|
||||
setsample:
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name).sample $(name);)
|
||||
|
||||
#sets project as assignment
|
||||
setassignment:
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name).assignment $(name);)
|
||||
|
||||
# defines current state of project as sample solution
|
||||
definesample:
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name) $(name).sample;)
|
||||
|
||||
# defines current sate of project as assignment
|
||||
defineassignment :
|
||||
$(foreach name, $(ASSIGNMENT_H) $(ASSIGNMENT_C), cp $(name) $(name).assignment;)
|
||||
|
||||
# creates a folder which can serve as a publishable assignment
|
||||
assignmentfolder:
|
||||
make setassignment
|
||||
make doxy
|
||||
rm -rf ../assignment
|
||||
mkdir ../assignment
|
||||
cp -R * ../assignment
|
||||
cp .gitignore ../assignment
|
||||
rm ../assignment/*.sample
|
||||
rm ../assignment/*.assignment
|
||||
make cleanall
|
||||
|
|
|
|||
302
shortcut.c
302
shortcut.c
|
|
@ -1,151 +1,151 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: shortcut.c
|
||||
* Author: P. Bauer
|
||||
* Date: November 08, 2010
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Test driver.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "shortcut.h"
|
||||
|
||||
#define MAX_TEST_FUNCTIONS 256
|
||||
|
||||
static char assert_msg_buffer[1024];
|
||||
static int tc_count = 0;
|
||||
static int tc_fail_count = 0;
|
||||
|
||||
static struct TestCase test_cases[MAX_TEST_FUNCTIONS];
|
||||
|
||||
const char* version()
|
||||
{
|
||||
return "ShortCut v. 1.3.0";
|
||||
}
|
||||
|
||||
char* format_msg(char* format, ...) {
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vsprintf(assert_msg_buffer, format, args);
|
||||
return assert_msg_buffer;
|
||||
}
|
||||
|
||||
void assert_true(bool bool_expr, struct TestCase *tc, const char *msg,
|
||||
const char* file, int line)
|
||||
{
|
||||
if (!bool_expr) {
|
||||
if (tc->success) {
|
||||
tc->success = false;
|
||||
tc_fail_count++;
|
||||
}
|
||||
printf("\n\tFailure (file: %s, line %d): %s: %s", file, line, tc->name, msg);
|
||||
}
|
||||
}
|
||||
|
||||
void assert_false(bool bool_expr, struct TestCase *tc, const char *msg,
|
||||
const char* file, int line)
|
||||
{
|
||||
assert_true(!bool_expr, tc, msg, file, line);
|
||||
}
|
||||
|
||||
static void assert_string_failure(const char *expected, char *actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line);
|
||||
|
||||
void assert_equals_str(const char *expected, char *actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line)
|
||||
{
|
||||
if (expected == actual) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (expected == 0 || actual == 0) {
|
||||
assert_string_failure(expected, actual, tc, msg, file, line);
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(actual, expected) != 0) {
|
||||
assert_string_failure(expected, actual, tc, msg, file, line);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_MSG_LEN 128
|
||||
static void assert_string_failure(const char *expected, char *actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line)
|
||||
{
|
||||
char new_msg[MAX_MSG_LEN];
|
||||
|
||||
sprintf(new_msg, "Expected \"%s\", actual \"%s\". %s", expected, actual, msg);
|
||||
assert_true(false, tc, new_msg, file, line);
|
||||
}
|
||||
|
||||
void assert_equals(int expected, int actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line)
|
||||
{
|
||||
char new_msg[MAX_MSG_LEN];
|
||||
sprintf(new_msg, "Expected %d, actual %d. %s", expected, actual, msg);
|
||||
assert_true(expected == actual, tc, new_msg, file, line);
|
||||
}
|
||||
|
||||
void assert_equals_f(double expected, double actual, double tolerance, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line)
|
||||
{
|
||||
char new_msg[MAX_MSG_LEN];
|
||||
sprintf(new_msg, "Expected %f, actual %f. %s", expected, actual, msg);
|
||||
double min_val = expected - tolerance;
|
||||
double max_val = expected + tolerance;
|
||||
assert_true(min_val <= actual && actual <= max_val, tc, new_msg, file, line);
|
||||
}
|
||||
|
||||
int get_test_count()
|
||||
{
|
||||
return tc_count;
|
||||
}
|
||||
|
||||
bool add_test(void (*test_function)(struct TestCase *tc), const char *test_name)
|
||||
{
|
||||
if (tc_count == MAX_TEST_FUNCTIONS) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
test_cases[tc_count].success = true;
|
||||
test_cases[tc_count].name = test_name;
|
||||
test_cases[tc_count].test_function = test_function;
|
||||
tc_count++;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void run_tests()
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("\n%s: Running tests\n", version());
|
||||
|
||||
for (i = 0; i < get_test_count(); i++) {
|
||||
printf("Running test %s ...", test_cases[i].name);
|
||||
test_cases[i].test_function(&test_cases[i]);
|
||||
if (test_cases[i].success) {
|
||||
printf("\033[32m OK\033[m");
|
||||
}
|
||||
else {
|
||||
printf("\033[31m ... FAIL\033[m");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf("\nTotal tests run: %d\n", tc_count);
|
||||
if (tc_fail_count > 0) {
|
||||
printf("\033[31mTests failed: %d\033[m\n", tc_fail_count);
|
||||
}
|
||||
else {
|
||||
printf("\033[32mAll tests run successfully\033[m\n");
|
||||
}
|
||||
}
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: shortcut.c
|
||||
* Author: P. Bauer
|
||||
* Date: November 08, 2010
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Test driver.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "shortcut.h"
|
||||
|
||||
#define MAX_TEST_FUNCTIONS 256
|
||||
|
||||
static char assert_msg_buffer[1024];
|
||||
static int tc_count = 0;
|
||||
static int tc_fail_count = 0;
|
||||
|
||||
static struct TestCase test_cases[MAX_TEST_FUNCTIONS];
|
||||
|
||||
const char* version()
|
||||
{
|
||||
return "ShortCut v. 1.3.0";
|
||||
}
|
||||
|
||||
char* format_msg(char* format, ...) {
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vsprintf(assert_msg_buffer, format, args);
|
||||
return assert_msg_buffer;
|
||||
}
|
||||
|
||||
void assert_true(bool bool_expr, struct TestCase *tc, const char *msg,
|
||||
const char* file, int line)
|
||||
{
|
||||
if (!bool_expr) {
|
||||
if (tc->success) {
|
||||
tc->success = false;
|
||||
tc_fail_count++;
|
||||
}
|
||||
printf("\n\tFailure (file: %s, line %d): %s: %s", file, line, tc->name, msg);
|
||||
}
|
||||
}
|
||||
|
||||
void assert_false(bool bool_expr, struct TestCase *tc, const char *msg,
|
||||
const char* file, int line)
|
||||
{
|
||||
assert_true(!bool_expr, tc, msg, file, line);
|
||||
}
|
||||
|
||||
static void assert_string_failure(const char *expected, char *actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line);
|
||||
|
||||
void assert_equals_str(const char *expected, char *actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line)
|
||||
{
|
||||
if (expected == actual) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (expected == 0 || actual == 0) {
|
||||
assert_string_failure(expected, actual, tc, msg, file, line);
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(actual, expected) != 0) {
|
||||
assert_string_failure(expected, actual, tc, msg, file, line);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_MSG_LEN 128
|
||||
static void assert_string_failure(const char *expected, char *actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line)
|
||||
{
|
||||
char new_msg[MAX_MSG_LEN];
|
||||
|
||||
sprintf(new_msg, "Expected \"%s\", actual \"%s\". %s", expected, actual, msg);
|
||||
assert_true(false, tc, new_msg, file, line);
|
||||
}
|
||||
|
||||
void assert_equals(int expected, int actual, struct TestCase *tc,
|
||||
const char *msg, const char* file, int line)
|
||||
{
|
||||
char new_msg[MAX_MSG_LEN];
|
||||
sprintf(new_msg, "Expected %d, actual %d. %s", expected, actual, msg);
|
||||
assert_true(expected == actual, tc, new_msg, file, line);
|
||||
}
|
||||
|
||||
void assert_equals_f(double expected, double actual, double tolerance, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line)
|
||||
{
|
||||
char new_msg[MAX_MSG_LEN];
|
||||
sprintf(new_msg, "Expected %f, actual %f. %s", expected, actual, msg);
|
||||
double min_val = expected - tolerance;
|
||||
double max_val = expected + tolerance;
|
||||
assert_true(min_val <= actual && actual <= max_val, tc, new_msg, file, line);
|
||||
}
|
||||
|
||||
int get_test_count()
|
||||
{
|
||||
return tc_count;
|
||||
}
|
||||
|
||||
bool add_test(void (*test_function)(struct TestCase *tc), const char *test_name)
|
||||
{
|
||||
if (tc_count == MAX_TEST_FUNCTIONS) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
test_cases[tc_count].success = true;
|
||||
test_cases[tc_count].name = test_name;
|
||||
test_cases[tc_count].test_function = test_function;
|
||||
tc_count++;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void run_tests()
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("\n%s: Running tests\n", version());
|
||||
|
||||
for (i = 0; i < get_test_count(); i++) {
|
||||
printf("Running test %s ...", test_cases[i].name);
|
||||
test_cases[i].test_function(&test_cases[i]);
|
||||
if (test_cases[i].success) {
|
||||
printf("\033[32m OK\033[m");
|
||||
}
|
||||
else {
|
||||
printf("\033[31m ... FAIL\033[m");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf("\nTotal tests run: %d\n", tc_count);
|
||||
if (tc_fail_count > 0) {
|
||||
printf("\033[31mTests failed: %d\033[m\n", tc_fail_count);
|
||||
}
|
||||
else {
|
||||
printf("\033[32mAll tests run successfully\033[m\n");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
224
shortcut.h
224
shortcut.h
|
|
@ -1,112 +1,112 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: shortcut
|
||||
* Author: P. Bauer
|
||||
* Date: November 03, 2010
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* A simple unit testing frame work for C.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#ifndef ___SHORTCUT_H
|
||||
#define ___SHORTCUT_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/** TestCase is the struct to define one test case. A test case can
|
||||
*** be added to a test. If the test is run all added test cases are
|
||||
*** run and the result of the run of each test case is checked automatically.
|
||||
*/
|
||||
struct TestCase {
|
||||
const char *name;
|
||||
/** true if the test passed, false otherwise. */
|
||||
bool success;
|
||||
|
||||
/** The test function which is executed by the test framework. */
|
||||
void (*test_function)(struct TestCase *tc);
|
||||
};
|
||||
|
||||
/**
|
||||
*** @return Version of shortcut as string
|
||||
***/
|
||||
const char* version();
|
||||
|
||||
/**
|
||||
*** @return The fromated string as generated using sprintf(format, ...)
|
||||
***/
|
||||
char* format_msg(char* format, ...);
|
||||
|
||||
/** assert_true checks, whether a boolean expression passed is true or false.
|
||||
*** in case it is false the test case stating the assertion is marked
|
||||
*** as failed and msg is printed.
|
||||
*** @param bool_expr Expression which is evaluated.
|
||||
*** @param tc Pointer to the test case which states this assertion.
|
||||
*** @param msg Message to be printed if assertion evaluates to false.
|
||||
*** @param file File in which the assert is given.
|
||||
*** @param line Line in which the assert is given.
|
||||
*/
|
||||
void assert_true(bool bool_expr, struct TestCase *tc, const char *msg,
|
||||
const char* file, int line);
|
||||
|
||||
/** assert_false does the same as assert() but the boolean expression
|
||||
*** has to evaluate to false. If it evaluates to true the assertion
|
||||
*** fails.
|
||||
*** @see assert
|
||||
*/
|
||||
void assert_false(bool bool_expr, struct TestCase* tc, const char* msg,
|
||||
const char* file, int line);
|
||||
|
||||
/** assert_equals checks whether two values are equal. Currently the following
|
||||
*** data formats are supported:
|
||||
*** - strings
|
||||
*** - integer
|
||||
*** @param expected The expected string value
|
||||
*** @param actual The actual string value
|
||||
*** @param tc Pointer to the test case which states this assertion.
|
||||
*** @param msg Message to be printed if assertion evaluates to false.
|
||||
*** @param file File in which the assert is given.
|
||||
*** @param line Line in which the assert is given.
|
||||
*** @see assert
|
||||
*/
|
||||
void assert_equals(int expected, int actual, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line);
|
||||
void assert_equals_str(const char* expected, char* actual, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line);
|
||||
void assert_equals_f(double expected, double actual, double tolerance, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line);
|
||||
|
||||
/** @return The total number of test cases added to the test.
|
||||
*/
|
||||
int get_test_count();
|
||||
|
||||
/** add_test creates a new test case and adds the a test function to
|
||||
*** this test case.
|
||||
*** @param test_function Pointer to the test function to be added
|
||||
*** to the newly created test case.
|
||||
*** @param test_case_name Name which should be assigned to the newly
|
||||
*** created test case.
|
||||
*/
|
||||
bool add_test(void (*test_function)(struct TestCase *tc), const char *test_case_name);
|
||||
|
||||
void run_tests();
|
||||
|
||||
#define TEST(testname) void testname(struct TestCase *tc)
|
||||
|
||||
#define MSG(format, ...) format_msg(format, ##__VA_ARGS__)
|
||||
|
||||
#define ASSERT_TRUE(condition, msg) assert_true(condition, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_FALSE(condition, msg) assert_false(condition, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS(expected, actual) assert_equals(expected, actual, tc, "", __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS_STR(expected, actual, msg) assert_equals_str(expected, actual, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS_TOLERANCE(expected, actual, tolerance) assert_equals_f(expected, actual, tolerance, tc, "", __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS_TOLERANCE_STR(expected, actual, tolerance, msg) assert_equals_f(expected, actual, tolerance, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ADD_TEST(testfunction) add_test(testfunction, #testfunction)
|
||||
|
||||
#endif
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: shortcut
|
||||
* Author: P. Bauer
|
||||
* Date: November 03, 2010
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* A simple unit testing frame work for C.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#ifndef ___SHORTCUT_H
|
||||
#define ___SHORTCUT_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/** TestCase is the struct to define one test case. A test case can
|
||||
*** be added to a test. If the test is run all added test cases are
|
||||
*** run and the result of the run of each test case is checked automatically.
|
||||
*/
|
||||
struct TestCase {
|
||||
const char *name;
|
||||
/** true if the test passed, false otherwise. */
|
||||
bool success;
|
||||
|
||||
/** The test function which is executed by the test framework. */
|
||||
void (*test_function)(struct TestCase *tc);
|
||||
};
|
||||
|
||||
/**
|
||||
*** @return Version of shortcut as string
|
||||
***/
|
||||
const char* version();
|
||||
|
||||
/**
|
||||
*** @return The fromated string as generated using sprintf(format, ...)
|
||||
***/
|
||||
char* format_msg(char* format, ...);
|
||||
|
||||
/** assert_true checks, whether a boolean expression passed is true or false.
|
||||
*** in case it is false the test case stating the assertion is marked
|
||||
*** as failed and msg is printed.
|
||||
*** @param bool_expr Expression which is evaluated.
|
||||
*** @param tc Pointer to the test case which states this assertion.
|
||||
*** @param msg Message to be printed if assertion evaluates to false.
|
||||
*** @param file File in which the assert is given.
|
||||
*** @param line Line in which the assert is given.
|
||||
*/
|
||||
void assert_true(bool bool_expr, struct TestCase *tc, const char *msg,
|
||||
const char* file, int line);
|
||||
|
||||
/** assert_false does the same as assert() but the boolean expression
|
||||
*** has to evaluate to false. If it evaluates to true the assertion
|
||||
*** fails.
|
||||
*** @see assert
|
||||
*/
|
||||
void assert_false(bool bool_expr, struct TestCase* tc, const char* msg,
|
||||
const char* file, int line);
|
||||
|
||||
/** assert_equals checks whether two values are equal. Currently the following
|
||||
*** data formats are supported:
|
||||
*** - strings
|
||||
*** - integer
|
||||
*** @param expected The expected string value
|
||||
*** @param actual The actual string value
|
||||
*** @param tc Pointer to the test case which states this assertion.
|
||||
*** @param msg Message to be printed if assertion evaluates to false.
|
||||
*** @param file File in which the assert is given.
|
||||
*** @param line Line in which the assert is given.
|
||||
*** @see assert
|
||||
*/
|
||||
void assert_equals(int expected, int actual, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line);
|
||||
void assert_equals_str(const char* expected, char* actual, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line);
|
||||
void assert_equals_f(double expected, double actual, double tolerance, struct TestCase* tc,
|
||||
const char* msg, const char* file, int line);
|
||||
|
||||
/** @return The total number of test cases added to the test.
|
||||
*/
|
||||
int get_test_count();
|
||||
|
||||
/** add_test creates a new test case and adds the a test function to
|
||||
*** this test case.
|
||||
*** @param test_function Pointer to the test function to be added
|
||||
*** to the newly created test case.
|
||||
*** @param test_case_name Name which should be assigned to the newly
|
||||
*** created test case.
|
||||
*/
|
||||
bool add_test(void (*test_function)(struct TestCase *tc), const char *test_case_name);
|
||||
|
||||
void run_tests();
|
||||
|
||||
#define TEST(testname) void testname(struct TestCase *tc)
|
||||
|
||||
#define MSG(format, ...) format_msg(format, ##__VA_ARGS__)
|
||||
|
||||
#define ASSERT_TRUE(condition, msg) assert_true(condition, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_FALSE(condition, msg) assert_false(condition, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS(expected, actual) assert_equals(expected, actual, tc, "", __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS_STR(expected, actual, msg) assert_equals_str(expected, actual, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS_TOLERANCE(expected, actual, tolerance) assert_equals_f(expected, actual, tolerance, tc, "", __FILE__, __LINE__)
|
||||
|
||||
#define ASSERT_EQUALS_TOLERANCE_STR(expected, actual, tolerance, msg) assert_equals_f(expected, actual, tolerance, tc, msg, __FILE__, __LINE__)
|
||||
|
||||
#define ADD_TEST(testfunction) add_test(testfunction, #testfunction)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
318
test_trim.c
318
test_trim.c
|
|
@ -1,159 +1,159 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Test functions for 'trim'.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#include <string.h>
|
||||
|
||||
#include "shortcut.h"
|
||||
#include "trim.h"
|
||||
#include "test_trim.h"
|
||||
|
||||
#define MAX_STR_LEN 48
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_null_string) {
|
||||
char* trimmed = trim(0);
|
||||
ASSERT_EQUALS(0l, (long)trimmed);
|
||||
}
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_null_string_cpy) {
|
||||
char str[MAX_STR_LEN] = "";
|
||||
trim_cpy(str, 0);
|
||||
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
trim_cpy(0, trimmed);
|
||||
ASSERT_EQUALS_STR(trimmed, trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_string) {
|
||||
char str[MAX_STR_LEN] = "";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS((long)str, (long)trimmed);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_string_cpy) {
|
||||
char str[MAX_STR_LEN] = "";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_string
|
||||
*/
|
||||
TEST(just_string) {
|
||||
char str[MAX_STR_LEN] = "How cool is this?!";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS((long)str, (long)trimmed);
|
||||
ASSERT_EQUALS_STR(str, trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_string
|
||||
*/
|
||||
TEST(just_string_cpy) {
|
||||
char str[MAX_STR_LEN] = "How cool is this?!";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR(str, trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_space
|
||||
*/
|
||||
TEST(leading_space) {
|
||||
char str[MAX_STR_LEN] = " \t A lot of space ahead";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS_STR("A lot of space ahead", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_space
|
||||
*/
|
||||
TEST(leading_space_cpy) {
|
||||
char str[MAX_STR_LEN] = " \t A lot of space ahead";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("A lot of space ahead", trimmed, "");
|
||||
}
|
||||
/**
|
||||
* trailing_space
|
||||
*/
|
||||
TEST(trailing_space) {
|
||||
char str[MAX_STR_LEN] = "After all just emptyness \n ";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS((long)str, (long)trimmed);
|
||||
ASSERT_EQUALS_STR("After all just emptyness", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* trailing_space
|
||||
*/
|
||||
TEST(trailing_space_cpy) {
|
||||
char str[MAX_STR_LEN] = "After all just emptyness \n ";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("After all just emptyness", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_and_trailing_space
|
||||
*/
|
||||
TEST(leading_and_trailing_space) {
|
||||
char str[MAX_STR_LEN] = " A lot of space around. \r ";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS_STR("A lot of space around.", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_and_trailing_space
|
||||
*/
|
||||
TEST(leading_and_trailing_space_cpy) {
|
||||
char str[MAX_STR_LEN] = " A lot of space around. \r ";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("A lot of space around.", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_blanks
|
||||
*/
|
||||
TEST(just_space) {
|
||||
char str[MAX_STR_LEN] = "\t \r \n ";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_blanks
|
||||
*/
|
||||
TEST(just_space_cpy) {
|
||||
char str[MAX_STR_LEN] = "\t \r \n ";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Test functions for 'trim'.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#include <string.h>
|
||||
|
||||
#include "shortcut.h"
|
||||
#include "trim.h"
|
||||
#include "test_trim.h"
|
||||
|
||||
#define MAX_STR_LEN 48
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_null_string) {
|
||||
char* trimmed = trim(0);
|
||||
ASSERT_EQUALS(0l, (long)trimmed);
|
||||
}
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_null_string_cpy) {
|
||||
char str[MAX_STR_LEN] = "";
|
||||
trim_cpy(str, 0);
|
||||
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
trim_cpy(0, trimmed);
|
||||
ASSERT_EQUALS_STR(trimmed, trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_string) {
|
||||
char str[MAX_STR_LEN] = "";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS((long)str, (long)trimmed);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* empty_substring: tests that trimming an empty string yields an empty string.
|
||||
*/
|
||||
TEST(empty_string_cpy) {
|
||||
char str[MAX_STR_LEN] = "";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_string
|
||||
*/
|
||||
TEST(just_string) {
|
||||
char str[MAX_STR_LEN] = "How cool is this?!";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS((long)str, (long)trimmed);
|
||||
ASSERT_EQUALS_STR(str, trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_string
|
||||
*/
|
||||
TEST(just_string_cpy) {
|
||||
char str[MAX_STR_LEN] = "How cool is this?!";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR(str, trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_space
|
||||
*/
|
||||
TEST(leading_space) {
|
||||
char str[MAX_STR_LEN] = " \t A lot of space ahead";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS_STR("A lot of space ahead", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_space
|
||||
*/
|
||||
TEST(leading_space_cpy) {
|
||||
char str[MAX_STR_LEN] = " \t A lot of space ahead";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("A lot of space ahead", trimmed, "");
|
||||
}
|
||||
/**
|
||||
* trailing_space
|
||||
*/
|
||||
TEST(trailing_space) {
|
||||
char str[MAX_STR_LEN] = "After all just emptyness \n ";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS((long)str, (long)trimmed);
|
||||
ASSERT_EQUALS_STR("After all just emptyness", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* trailing_space
|
||||
*/
|
||||
TEST(trailing_space_cpy) {
|
||||
char str[MAX_STR_LEN] = "After all just emptyness \n ";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("After all just emptyness", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_and_trailing_space
|
||||
*/
|
||||
TEST(leading_and_trailing_space) {
|
||||
char str[MAX_STR_LEN] = " A lot of space around. \r ";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS_STR("A lot of space around.", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* leading_and_trailing_space
|
||||
*/
|
||||
TEST(leading_and_trailing_space_cpy) {
|
||||
char str[MAX_STR_LEN] = " A lot of space around. \r ";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("A lot of space around.", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_blanks
|
||||
*/
|
||||
TEST(just_space) {
|
||||
char str[MAX_STR_LEN] = "\t \r \n ";
|
||||
char* trimmed = trim(str);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* just_blanks
|
||||
*/
|
||||
TEST(just_space_cpy) {
|
||||
char str[MAX_STR_LEN] = "\t \r \n ";
|
||||
char trimmed[MAX_STR_LEN] = "no content";
|
||||
|
||||
trim_cpy(str, trimmed);
|
||||
ASSERT_EQUALS_STR("", trimmed, "");
|
||||
}
|
||||
|
|
|
|||
62
test_trim.h
62
test_trim.h
|
|
@ -1,31 +1,31 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim string_cpy
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Test functions for 'trim'.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#ifndef ___TEST_trim_H
|
||||
#define ___TEST_trim_H
|
||||
|
||||
#include "shortcut.h"
|
||||
|
||||
TEST(empty_null_string);
|
||||
TEST(empty_null_string_cpy);
|
||||
TEST(empty_string);
|
||||
TEST(empty_string_cpy);
|
||||
TEST(just_string);
|
||||
TEST(just_string_cpy);
|
||||
TEST(leading_space);
|
||||
TEST(leading_space_cpy);
|
||||
TEST(trailing_space);
|
||||
TEST(trailing_space_cpy);
|
||||
TEST(leading_and_trailing_space);
|
||||
TEST(leading_and_trailing_space_cpy);
|
||||
TEST(just_space);
|
||||
TEST(just_space_cpy);
|
||||
|
||||
#endif
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim string_cpy
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Test functions for 'trim'.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#ifndef ___TEST_trim_H
|
||||
#define ___TEST_trim_H
|
||||
|
||||
#include "shortcut.h"
|
||||
|
||||
TEST(empty_null_string);
|
||||
TEST(empty_null_string_cpy);
|
||||
TEST(empty_string);
|
||||
TEST(empty_string_cpy);
|
||||
TEST(just_string);
|
||||
TEST(just_string_cpy);
|
||||
TEST(leading_space);
|
||||
TEST(leading_space_cpy);
|
||||
TEST(trailing_space);
|
||||
TEST(trailing_space_cpy);
|
||||
TEST(leading_and_trailing_space);
|
||||
TEST(leading_and_trailing_space_cpy);
|
||||
TEST(just_space);
|
||||
TEST(just_space_cpy);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
20
trim.c
20
trim.c
|
|
@ -1,10 +1,10 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: */<your name>;/*
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Implementation of 'trim' functionality.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: */<your name>;/*
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Implementation of 'trim' functionality.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
|
|
|
|||
98
trim.h
98
trim.h
|
|
@ -1,49 +1,49 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Implementation of 'trim' functionality.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef ___TRIM_H
|
||||
#define ___TRIM_H
|
||||
|
||||
/**
|
||||
* Provides the trimmed string WITHOUT making a copy
|
||||
* of the source string.
|
||||
* Trimming means that leading and trailing whitespace
|
||||
* characters are removed.
|
||||
*
|
||||
* Whitespace characters are:
|
||||
* - space (' '),
|
||||
* - tabulator ('\t')
|
||||
* - new line ('\n')
|
||||
* - line feed ('\r')
|
||||
* @param string The string to be trimmed.
|
||||
* @return The trimmed string.
|
||||
*/
|
||||
char* trim(char* string);
|
||||
|
||||
/**
|
||||
* Provides the trimmed string as COPY of the source string.
|
||||
* Trimming means that leading and trailing whitespace
|
||||
* characters are removed.
|
||||
*
|
||||
* Whitespace characters are:
|
||||
* - space (' '),
|
||||
* - tabulator ('\t')
|
||||
* - new line ('\n')
|
||||
* - line feed ('\r')
|
||||
* @param string The string to be trimmed.
|
||||
* @param trimmed_string Container which takes the trimmed
|
||||
* version of source. This function expects a buffer that
|
||||
* is large enough for carrying the trimmed string.
|
||||
*/
|
||||
void trim_cpy(char* string, char* trimmed_string);
|
||||
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Implementation of 'trim' functionality.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef ___TRIM_H
|
||||
#define ___TRIM_H
|
||||
|
||||
/**
|
||||
* Provides the trimmed string WITHOUT making a copy
|
||||
* of the source string.
|
||||
* Trimming means that leading and trailing whitespace
|
||||
* characters are removed.
|
||||
*
|
||||
* Whitespace characters are:
|
||||
* - space (' '),
|
||||
* - tabulator ('\t')
|
||||
* - new line ('\n')
|
||||
* - line feed ('\r')
|
||||
* @param string The string to be trimmed.
|
||||
* @return The trimmed string.
|
||||
*/
|
||||
char* trim(char* string);
|
||||
|
||||
/**
|
||||
* Provides the trimmed string as COPY of the source string.
|
||||
* Trimming means that leading and trailing whitespace
|
||||
* characters are removed.
|
||||
*
|
||||
* Whitespace characters are:
|
||||
* - space (' '),
|
||||
* - tabulator ('\t')
|
||||
* - new line ('\n')
|
||||
* - line feed ('\r')
|
||||
* @param string The string to be trimmed.
|
||||
* @param trimmed_string Container which takes the trimmed
|
||||
* version of source. This function expects a buffer that
|
||||
* is large enough for carrying the trimmed string.
|
||||
*/
|
||||
void trim_cpy(char* string, char* trimmed_string);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
34
trim_str.c
34
trim_str.c
|
|
@ -1,17 +1,17 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: */<your name>;/*
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Application entry point for 'trim'.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "trim.h"
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
return 0;
|
||||
}
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: */<your name>;/*
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* Application entry point for 'trim'.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "trim.h"
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,38 +1,38 @@
|
|||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* trim_str test driver.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "trim.h"
|
||||
|
||||
#include "shortcut.h"
|
||||
#include "test_trim.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
ADD_TEST(empty_string);
|
||||
ADD_TEST(empty_string_cpy);
|
||||
ADD_TEST(just_string);
|
||||
ADD_TEST(just_string_cpy);
|
||||
ADD_TEST(leading_space);
|
||||
ADD_TEST(leading_space_cpy);
|
||||
ADD_TEST(trailing_space);
|
||||
ADD_TEST(trailing_space_cpy);
|
||||
ADD_TEST(leading_and_trailing_space);
|
||||
ADD_TEST(leading_and_trailing_space_cpy);
|
||||
ADD_TEST(just_space);
|
||||
ADD_TEST(just_space_cpy);
|
||||
ADD_TEST(empty_null_string);
|
||||
ADD_TEST(empty_null_string_cpy);
|
||||
|
||||
run_tests();
|
||||
return 0;
|
||||
}
|
||||
/*----------------------------------------------------------
|
||||
* HTBLA-Leonding
|
||||
* ---------------------------------------------------------
|
||||
* Title: Trim String
|
||||
* Author: S. Schraml
|
||||
* ----------------------------------------------------------
|
||||
* Description:
|
||||
* trim_str test driver.
|
||||
* ----------------------------------------------------------
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "trim.h"
|
||||
|
||||
#include "shortcut.h"
|
||||
#include "test_trim.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
ADD_TEST(empty_string);
|
||||
ADD_TEST(empty_string_cpy);
|
||||
ADD_TEST(just_string);
|
||||
ADD_TEST(just_string_cpy);
|
||||
ADD_TEST(leading_space);
|
||||
ADD_TEST(leading_space_cpy);
|
||||
ADD_TEST(trailing_space);
|
||||
ADD_TEST(trailing_space_cpy);
|
||||
ADD_TEST(leading_and_trailing_space);
|
||||
ADD_TEST(leading_and_trailing_space_cpy);
|
||||
ADD_TEST(just_space);
|
||||
ADD_TEST(just_space_cpy);
|
||||
ADD_TEST(empty_null_string);
|
||||
ADD_TEST(empty_null_string_cpy);
|
||||
|
||||
run_tests();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue