1 /* 2 * 3 * Copyright (c) 1998-2002 4 * John Maddock 5 * 6 * Use, modification and distribution are subject to the 7 * Boost Software License, Version 1.0. (See accompanying file 8 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 * 10 */ 11 12 /* 13 * LOCATION: see http://www.boost.org for most recent version. 14 * FILE instances.cpp 15 * VERSION see <boost/version.hpp> 16 * DESCRIPTION: Defines those template instances that are placed in the 17 * library rather than in the users object files. 18 */ 19 20 // 21 // note no include guard, we may include this multiple times: 22 // 23 #ifndef BOOST_REGEX_NO_EXTERNAL_TEMPLATES 24 25 namespace boost{ 26 27 // 28 // this header can be included multiple times, each time with 29 // a different character type, BOOST_REGEX_CHAR_T must be defined 30 // first: 31 // 32 #ifndef BOOST_REGEX_CHAR_T 33 # error "BOOST_REGEX_CHAR_T not defined" 34 #endif 35 36 #ifndef BOOST_REGEX_TRAITS_T 37 # define BOOST_REGEX_TRAITS_T , boost::regex_traits<BOOST_REGEX_CHAR_T > 38 #endif 39 40 // 41 // what follows is compiler specific: 42 // 43 44 #if defined(__BORLANDC__) && (__BORLANDC__ < 0x600) 45 46 #ifdef BOOST_HAS_ABI_HEADERS 47 # include BOOST_ABI_PREFIX 48 #endif 49 50 # ifndef BOOST_REGEX_INSTANTIATE 51 # pragma option push -Jgx 52 # endif 53 54 template class BOOST_REGEX_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >; 55 template class BOOST_REGEX_DECL match_results< const BOOST_REGEX_CHAR_T* >; 56 #ifndef BOOST_NO_STD_ALLOCATOR 57 template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >; 58 #endif 59 60 # ifndef BOOST_REGEX_INSTANTIATE 61 # pragma option pop 62 # endif 63 64 #ifdef BOOST_HAS_ABI_HEADERS 65 # include BOOST_ABI_SUFFIX 66 #endif 67 68 #elif defined(BOOST_MSVC) || defined(__ICL) 69 70 # ifndef BOOST_REGEX_INSTANTIATE 71 # ifdef __GNUC__ 72 # define template __extension__ extern template 73 # else 74 # define template extern template 75 # endif 76 # endif 77 78 # ifdef BOOST_MSVC 79 # pragma warning(push) 80 # pragma warning(disable : 4251 4231 4660) 81 # endif 82 83 template class BOOST_REGEX_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >; 84 85 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) 86 template class BOOST_REGEX_DECL match_results< const BOOST_REGEX_CHAR_T* >; 87 #endif 88 #ifndef BOOST_NO_STD_ALLOCATOR 89 template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >; 90 #endif 91 #if !(defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB <= 1))\ 92 && !(defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION <= 800))\ 93 && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))\ 94 && !defined(BOOST_REGEX_ICU_INSTANCES) 95 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) 96 template class BOOST_REGEX_DECL match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >; 97 #endif 98 #ifndef BOOST_NO_STD_ALLOCATOR 99 template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >; 100 #endif 101 #endif 102 103 104 # ifdef BOOST_MSVC 105 # pragma warning(pop) 106 # endif 107 108 # ifdef template 109 # undef template 110 # endif 111 112 #elif (defined(__GNUC__) && (__GNUC__ >= 3)) 113 114 # ifndef BOOST_REGEX_INSTANTIATE 115 # define template __extension__ extern template 116 # endif 117 118 #if !defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_REGEX_ICU_INSTANCES) 119 namespace re_detail{ 120 template BOOST_REGEX_DECL 121 std::locale cpp_regex_traits_base<BOOST_REGEX_CHAR_T>::imbue(const std::locale& l); 122 123 template BOOST_REGEX_DECL 124 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::string_type 125 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::transform_primary(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const; 126 template BOOST_REGEX_DECL 127 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::string_type 128 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::transform(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const; 129 template BOOST_REGEX_DECL 130 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::string_type 131 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::lookup_collatename(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const; 132 template BOOST_REGEX_DECL 133 void cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::init(); 134 template BOOST_REGEX_DECL 135 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::char_class_type 136 cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::lookup_classname_imp(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const; 137 #ifdef BOOST_REGEX_BUGGY_CTYPE_FACET 138 template BOOST_REGEX_DECL 139 bool cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::isctype(const BOOST_REGEX_CHAR_T c, char_class_type mask) const; 140 #endif 141 } // namespace 142 template BOOST_REGEX_DECL 143 int cpp_regex_traits<BOOST_REGEX_CHAR_T>::toi(const BOOST_REGEX_CHAR_T*& first, const BOOST_REGEX_CHAR_T* last, int radix)const; 144 template BOOST_REGEX_DECL 145 std::string cpp_regex_traits<BOOST_REGEX_CHAR_T>::catalog_name(const std::string& name); 146 template BOOST_REGEX_DECL 147 std::string& cpp_regex_traits<BOOST_REGEX_CHAR_T>::get_catalog_name_inst(); 148 template BOOST_REGEX_DECL 149 std::string cpp_regex_traits<BOOST_REGEX_CHAR_T>::get_catalog_name(); 150 #ifdef BOOST_HAS_THREADS 151 template BOOST_REGEX_DECL 152 static_mutex& cpp_regex_traits<BOOST_REGEX_CHAR_T>::get_mutex_inst(); 153 #endif 154 #endif 155 156 template BOOST_REGEX_DECL basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >& 157 basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >::do_assign( 158 const BOOST_REGEX_CHAR_T* p1, 159 const BOOST_REGEX_CHAR_T* p2, 160 flag_type f); 161 template BOOST_REGEX_DECL basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >::locale_type BOOST_REGEX_CALL 162 basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >::imbue(locale_type l); 163 164 template BOOST_REGEX_DECL void BOOST_REGEX_CALL 165 match_results<const BOOST_REGEX_CHAR_T*>::maybe_assign( 166 const match_results<const BOOST_REGEX_CHAR_T*>& m); 167 168 namespace re_detail{ 169 template BOOST_REGEX_DECL void perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::construct_init( 170 const basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >& e, match_flag_type f); 171 template BOOST_REGEX_DECL bool perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::match(); 172 template BOOST_REGEX_DECL bool perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::find(); 173 } // namespace 174 175 #if (defined(__GLIBCPP__) || defined(__GLIBCXX__)) \ 176 && !defined(BOOST_REGEX_ICU_INSTANCES)\ 177 && !defined(__SGI_STL_PORT)\ 178 && !defined(_STLPORT_VERSION) 179 // std:basic_string<>::const_iterator instances as well: 180 template BOOST_REGEX_DECL void BOOST_REGEX_CALL 181 match_results<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator>::maybe_assign( 182 const match_results<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator>& m); 183 184 namespace re_detail{ 185 template BOOST_REGEX_DECL void perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::construct_init( 186 const basic_regex<BOOST_REGEX_CHAR_T>& e, match_flag_type f); 187 template BOOST_REGEX_DECL bool perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::match(); 188 template BOOST_REGEX_DECL bool perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::find(); 189 } // namespace 190 #endif 191 192 # ifdef template 193 # undef template 194 # endif 195 196 197 #endif 198 199 } // namespace boost 200 201 #endif // BOOST_REGEX_NO_EXTERNAL_TEMPLATES 202 203 204 205 206 207