libxspf  1.2.0
XspfToolbox.h
Go to the documentation of this file.
00001 /*
00002  * libxspf - XSPF playlist handling library
00003  *
00004  * Copyright (C) 2006-2008, Sebastian Pipping / Xiph.Org Foundation
00005  * All rights reserved.
00006  *
00007  * Redistribution  and use in source and binary forms, with or without
00008  * modification,  are permitted provided that the following conditions
00009  * are met:
00010  *
00011  *     * Redistributions   of  source  code  must  retain  the   above
00012  *       copyright  notice, this list of conditions and the  following
00013  *       disclaimer.
00014  *
00015  *     * Redistributions  in  binary  form must  reproduce  the  above
00016  *       copyright  notice, this list of conditions and the  following
00017  *       disclaimer   in  the  documentation  and/or  other  materials
00018  *       provided with the distribution.
00019  *
00020  *     * Neither  the name of the Xiph.Org Foundation nor the names of
00021  *       its  contributors may be used to endorse or promote  products
00022  *       derived  from  this software without specific  prior  written
00023  *       permission.
00024  *
00025  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00026  * "AS  IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT  NOT
00027  * LIMITED  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS
00028  * FOR  A  PARTICULAR  PURPOSE ARE DISCLAIMED. IN NO EVENT  SHALL  THE
00029  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00030  * INCIDENTAL,    SPECIAL,   EXEMPLARY,   OR   CONSEQUENTIAL   DAMAGES
00031  * (INCLUDING,  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00032  * SERVICES;  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00033  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00034  * STRICT  LIABILITY,  OR  TORT (INCLUDING  NEGLIGENCE  OR  OTHERWISE)
00035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
00036  * OF THE POSSIBILITY OF SUCH DAMAGE.
00037  *
00038  * Sebastian Pipping, sping@xiph.org
00039  */
00040 
00046 #ifndef XSPF_TOOLBOX_H
00047 #define XSPF_TOOLBOX_H
00048 
00049 
00050 #include "XspfDefines.h"
00051 #include <string>
00052 #include <cstring>
00053 
00054 namespace Xspf {
00055 
00056 
00057 class XspfDateTime;
00058 
00059 
00063 namespace Toolbox {
00064 
00065 
00067 
00072 struct XspfStringCompare {
00073 
00080         bool operator()(XML_Char const * s1, XML_Char const * s2) const;
00081 
00082 };
00083 
00085 
00086 
00095 XML_Char * newAndCopy(XML_Char const * source);
00096 
00104 void deleteNewAndCopy(XML_Char ** dest, XML_Char const * src);
00105 
00117 void deleteNewAndCopy(XML_Char const * & dest, bool & destOwnership,
00118         XML_Char const * source, bool sourceCopy);
00119 
00128 template <class T>
00129 T const * getSetNull(T const * & dest) {
00130         T const * backup = dest;
00131         dest = NULL;
00132         return backup;
00133 }
00134 
00135 
00144 void copyIfOwned(XML_Char const * & dest, bool & ownDest, XML_Char const * source, bool ownSource);
00145 
00146 
00155 void freeIfOwned(XML_Char const * & dest, bool ownDest);
00156 
00157 
00169 XML_Char * makeAbsoluteUri(XML_Char const * sourceUri, XML_Char const * baseUri);
00170 
00171 
00184 XML_Char * makeRelativeUri(XML_Char const * sourceUri, XML_Char const * baseUri);
00185 
00186 
00194 bool isUri(XML_Char const * text);
00195 
00196 
00204 bool isAbsoluteUri(XML_Char const * text);
00205 
00206 
00216 bool extractInteger(XML_Char const * text, int inclusiveMinimum, int * output);
00217 
00218 
00229 bool isWhiteSpace(XML_Char const * text, int numChars);
00230 
00231 
00242 void cutOffWhiteSpace(XML_Char const * input, int inputNumChars,
00243                 XML_Char const * & blackSpaceStart, int & blackSpaceNumChars);
00244 
00245 
00252 void trimString(std::basic_string<XML_Char> & target);
00253 
00254 
00255 } // namespace Toolbox
00256 } // namespace Xspf
00257 
00258 #endif // XSPF_TOOLBOX_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines