Synesis Software STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ...

pantheios/inserters/pad.hpp

Go to the documentation of this file.
00001 /* /////////////////////////////////////////////////////////////////////////
00002  * File:        pantheios/inserters/pad.hpp
00003  *
00004  * Purpose:     padding of arguments of arbitrary type.
00005  *
00006  * Created:     29th June 2009
00007  * Updated:     14th February 2010
00008  *
00009  * Home:        http://www.pantheios.org/
00010  *
00011  * Copyright (c) 2009-2010, Matthew Wilson and Synesis Software
00012  * All rights reserved.
00013  *
00014  * Redistribution and use in source and binary forms, with or without
00015  * modification, are permitted provided that the following conditions are
00016  * met:
00017  *
00018  * - Redistributions of source code must retain the above copyright notice,
00019  *   this list of conditions and the following disclaimer.
00020  * - Redistributions in binary form must reproduce the above copyright
00021  *   notice, this list of conditions and the following disclaimer in the
00022  *   documentation and/or other materials provided with the distribution.
00023  * - Neither the name(s) of Matthew Wilson and Synesis Software nor the
00024  *   names of any contributors may be used to endorse or promote products
00025  *   derived from this software without specific prior written permission.
00026  *
00027  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00028  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
00029  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00030  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00031  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00032  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00033  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00034  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00035  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00036  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00037  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00038  *
00039  * ////////////////////////////////////////////////////////////////////// */
00040 
00041 
00048 #ifndef PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_PAD
00049 #define PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_PAD
00050 
00051 /* /////////////////////////////////////////////////////////////////////////
00052  * Version information
00053  */
00054 
00055 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00056 # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_PAD_MAJOR    1
00057 # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_PAD_MINOR    0
00058 # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_PAD_REVISION 2
00059 # define PANTHEIOS_VER_PANTHEIOS_INSERTERS_HPP_PAD_EDIT     3
00060 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00061 
00062 /* /////////////////////////////////////////////////////////////////////////
00063  * Includes
00064  */
00065 
00066 #ifndef PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS
00067 # include <pantheios/pantheios.h>
00068 #endif /* !PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS */
00069 
00070 # include <stlsoft/shims/access/string.hpp>
00071 
00072 /* /////////////////////////////////////////////////////////////////////////
00073  * Namespace
00074  */
00075 
00076 #if !defined(PANTHEIOS_NO_NAMESPACE)
00077 namespace pantheios
00078 {
00079 #endif /* !PANTHEIOS_NO_NAMESPACE */
00080 
00081 /* /////////////////////////////////////////////////////////////////////////
00082  * Macros
00083  */
00084 
00094 #define PANTHEIOS_LPAD(var, minWidth)   ( ::pantheios::pad(var, minWidth)), (var)
00095 
00105 #define PANTHEIOS_RPAD(var, minWidth)   (var), ( ::pantheios::pad(var, minWidth))
00106 
00107 /* /////////////////////////////////////////////////////////////////////////
00108  * Inserter functions
00109  */
00110 
00111 #ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
00112 
00113 template <typename S>
00114 inline const pan_slice_t pad(S const& arg, size_t minimumWidth)
00115 {
00116     const size_t len = stlsoft::c_str_len(arg);
00117 
00118     if(len < minimumWidth)
00119     {
00120         size_t              actualWidth;
00121         pan_char_t const*   padding = pantheios::core::pantheios_getPad(minimumWidth - len, &actualWidth);
00122 
00123         return pan_slice_t(padding, actualWidth);
00124     }
00125 
00126     return pan_slice_t();
00127 }
00128 
00129 #endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
00130 
00131 /* /////////////////////////////////////////////////////////////////////////
00132  * Namespace
00133  */
00134 
00135 #if !defined(PANTHEIOS_NO_NAMESPACE)
00136 } /* namespace pantheios */
00137 #endif /* !PANTHEIOS_NO_NAMESPACE */
00138 
00139 /* /////////////////////////////////////////////////////////////////////////
00140  * Inclusion
00141  */
00142 
00143 #ifdef STLSOFT_PPF_pragma_once_SUPPORT
00144 # pragma once
00145 #endif /* STLSOFT_PPF_pragma_once_SUPPORT */
00146 
00147 /* ////////////////////////////////////////////////////////////////////// */
00148 
00149 #endif /* !PANTHEIOS_INCL_PANTHEIOS_INSERTERS_HPP_PAD */
00150 
00151 /* ///////////////////////////// end of file //////////////////////////// */

pantheios Library documentation Matthew Wilson & Synesis Software, 2006-2011 SourceForge.net Logo