00001 // more/gen/string.h -- Additional string functions
00002 // Copyright (C) 2001--2002 Petter Urkedal
00003 //
00004 // This file is free software; you can redistribute it and/or modify
00005 // it under the terms of the GNU General Public License as published by
00006 // the Free Software Foundation; either version 2 of the License, or
00007 // (at your option) any later version.
00008 //
00009 // This file is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00012 // GNU General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with this program; if not, write to the Free Software
00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
00017 //
00018 // As a special exception, you may use this file as part of a free
00019 // software library without restriction. Specifically, if other files
00020 // instantiate templates or use macros or inline functions from this
00021 // file, or you compile this file and link it with other files to
00022 // produce an executable, this file does not by itself cause the
00023 // resulting executable to be covered by the GNU General Public
00024 // License. This exception does not however invalidate any other
00025 // reasons why the executable file might be covered by the GNU General
00026 // Public License.
00027 //
00028 // $Id: string.h,v 1.2 2002/08/24 13:56:26 petter_urkedal Exp $
00029
00030 #ifndef MORE_GEN_STRING_H
00031 #define MORE_GEN_STRING_H
00032
00033 #include <more/bits/config.h>
00034 #include <cstring>
00035
00036 namespace more {
00037 namespace gen {
00038
00039 /** Returns a unique pointer for all lexically equal strings. The
00040 string argument must have static lifetime. */
00041 char const* struniq_static(char const*);
00042
00043 /** Returns a unique pointer for all lexically equal strings. */
00044 char const* struniq_copy(char const*);
00045
00046 /** Returns a unique pointer for all lexically equal strings. The
00047 string argument must have static lifetime. */
00048 wchar_t const* struniq_static(wchar_t const*);
00049
00050 /** Returns a unique pointer for all lexically equal strings. */
00051 wchar_t const* struniq_copy(wchar_t const*);
00052
00053 /** Returns a unique string pointer for each argument. The string
00054 is a valid C identifier. The global time and space complexty
00055 scales lineary with the maximum absolute value of the argument,
00056 in addition to amortized constant time and zero space for each
00057 call. */
00058 char const* struniq_dense(int);
00059
00060 /** Returns a unique string pointer for each argument. The string
00061 is a valid C identifier. The time complexity is logarithmic in
00062 the number of distinct uniqstr_* pointers returned. */
00063 char const* struniq_sparse(int);
00064
00065 /** Returns a copy of str allocated by new. */
00066 inline char*
00067 strcpy_new(char const* str)
00068 {
00069 char* s = new char[strlen(str) + 1];
00070 std::strcpy(s, str);
00071 return s;
00072 }
00073
00074 #ifdef HAVE_BDWGC
00075 /** A version of wcstombs which stores its result in garbage
00076 ** collected memory. */
00077 char* wcstombs_gc(wchar_t const* ws);
00078
00079 /** A version of mbstowcs which stores its result in collected
00080 ** memory. */
00081 wchar_t* mbstowcs_gc(char const* str);
00082 #endif
00083
00084 }}
00085
00086 #endif