annotate DEPENDENCIES/generic/include/boost/bind/mem_fn.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED
Chris@16 2 #define BOOST_BIND_MEM_FN_HPP_INCLUDED
Chris@16 3
Chris@16 4 // MS compatible compilers support #pragma once
Chris@16 5
Chris@16 6 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
Chris@16 7 # pragma once
Chris@16 8 #endif
Chris@16 9
Chris@16 10 //
Chris@16 11 // mem_fn.hpp - a generalization of std::mem_fun[_ref]
Chris@16 12 //
Chris@16 13 // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
Chris@16 14 // Copyright (c) 2001 David Abrahams
Chris@16 15 // Copyright (c) 2003-2005 Peter Dimov
Chris@16 16 //
Chris@16 17 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 18 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 19 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 20 //
Chris@16 21 // See http://www.boost.org/libs/bind/mem_fn.html for documentation.
Chris@16 22 //
Chris@16 23
Chris@16 24 #include <boost/config.hpp>
Chris@16 25 #include <boost/get_pointer.hpp>
Chris@16 26 #include <boost/detail/workaround.hpp>
Chris@16 27
Chris@16 28 namespace boost
Chris@16 29 {
Chris@16 30
Chris@16 31 #if defined(BOOST_NO_VOID_RETURNS)
Chris@16 32
Chris@16 33 #define BOOST_MEM_FN_CLASS_F , class F
Chris@16 34 #define BOOST_MEM_FN_TYPEDEF(X)
Chris@16 35
Chris@16 36 namespace _mfi // mem_fun_impl
Chris@16 37 {
Chris@16 38
Chris@16 39 template<class V> struct mf
Chris@16 40 {
Chris@16 41
Chris@16 42 #define BOOST_MEM_FN_RETURN return
Chris@16 43
Chris@16 44 #define BOOST_MEM_FN_NAME(X) inner_##X
Chris@16 45 #define BOOST_MEM_FN_CC
Chris@16 46
Chris@16 47 #include <boost/bind/mem_fn_template.hpp>
Chris@16 48
Chris@16 49 #undef BOOST_MEM_FN_CC
Chris@16 50 #undef BOOST_MEM_FN_NAME
Chris@16 51
Chris@16 52 #ifdef BOOST_MEM_FN_ENABLE_CDECL
Chris@16 53
Chris@16 54 #define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
Chris@16 55 #define BOOST_MEM_FN_CC __cdecl
Chris@16 56
Chris@16 57 #include <boost/bind/mem_fn_template.hpp>
Chris@16 58
Chris@16 59 #undef BOOST_MEM_FN_CC
Chris@16 60 #undef BOOST_MEM_FN_NAME
Chris@16 61
Chris@16 62 #endif
Chris@16 63
Chris@16 64 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
Chris@16 65
Chris@16 66 #define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
Chris@16 67 #define BOOST_MEM_FN_CC __stdcall
Chris@16 68
Chris@16 69 #include <boost/bind/mem_fn_template.hpp>
Chris@16 70
Chris@16 71 #undef BOOST_MEM_FN_CC
Chris@16 72 #undef BOOST_MEM_FN_NAME
Chris@16 73
Chris@16 74 #endif
Chris@16 75
Chris@16 76 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
Chris@16 77
Chris@16 78 #define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
Chris@16 79 #define BOOST_MEM_FN_CC __fastcall
Chris@16 80
Chris@16 81 #include <boost/bind/mem_fn_template.hpp>
Chris@16 82
Chris@16 83 #undef BOOST_MEM_FN_CC
Chris@16 84 #undef BOOST_MEM_FN_NAME
Chris@16 85
Chris@16 86 #endif
Chris@16 87
Chris@16 88 #undef BOOST_MEM_FN_RETURN
Chris@16 89
Chris@16 90 }; // struct mf<V>
Chris@16 91
Chris@16 92 template<> struct mf<void>
Chris@16 93 {
Chris@16 94
Chris@16 95 #define BOOST_MEM_FN_RETURN
Chris@16 96
Chris@16 97 #define BOOST_MEM_FN_NAME(X) inner_##X
Chris@16 98 #define BOOST_MEM_FN_CC
Chris@16 99
Chris@16 100 #include <boost/bind/mem_fn_template.hpp>
Chris@16 101
Chris@16 102 #undef BOOST_MEM_FN_CC
Chris@16 103 #undef BOOST_MEM_FN_NAME
Chris@16 104
Chris@16 105 #ifdef BOOST_MEM_FN_ENABLE_CDECL
Chris@16 106
Chris@16 107 #define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
Chris@16 108 #define BOOST_MEM_FN_CC __cdecl
Chris@16 109
Chris@16 110 #include <boost/bind/mem_fn_template.hpp>
Chris@16 111
Chris@16 112 #undef BOOST_MEM_FN_CC
Chris@16 113 #undef BOOST_MEM_FN_NAME
Chris@16 114
Chris@16 115 #endif
Chris@16 116
Chris@16 117 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
Chris@16 118
Chris@16 119 #define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
Chris@16 120 #define BOOST_MEM_FN_CC __stdcall
Chris@16 121
Chris@16 122 #include <boost/bind/mem_fn_template.hpp>
Chris@16 123
Chris@16 124 #undef BOOST_MEM_FN_CC
Chris@16 125 #undef BOOST_MEM_FN_NAME
Chris@16 126
Chris@16 127 #endif
Chris@16 128
Chris@16 129 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
Chris@16 130
Chris@16 131 #define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
Chris@16 132 #define BOOST_MEM_FN_CC __fastcall
Chris@16 133
Chris@16 134 #include <boost/bind/mem_fn_template.hpp>
Chris@16 135
Chris@16 136 #undef BOOST_MEM_FN_CC
Chris@16 137 #undef BOOST_MEM_FN_NAME
Chris@16 138
Chris@16 139 #endif
Chris@16 140
Chris@16 141 #undef BOOST_MEM_FN_RETURN
Chris@16 142
Chris@16 143 }; // struct mf<void>
Chris@16 144
Chris@16 145 #undef BOOST_MEM_FN_CLASS_F
Chris@16 146 #undef BOOST_MEM_FN_TYPEDEF_F
Chris@16 147
Chris@16 148 #define BOOST_MEM_FN_NAME(X) X
Chris@16 149 #define BOOST_MEM_FN_NAME2(X) inner_##X
Chris@16 150 #define BOOST_MEM_FN_CC
Chris@16 151
Chris@16 152 #include <boost/bind/mem_fn_vw.hpp>
Chris@16 153
Chris@16 154 #undef BOOST_MEM_FN_NAME
Chris@16 155 #undef BOOST_MEM_FN_NAME2
Chris@16 156 #undef BOOST_MEM_FN_CC
Chris@16 157
Chris@16 158 #ifdef BOOST_MEM_FN_ENABLE_CDECL
Chris@16 159
Chris@16 160 #define BOOST_MEM_FN_NAME(X) X##_cdecl
Chris@16 161 #define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl
Chris@16 162 #define BOOST_MEM_FN_CC __cdecl
Chris@16 163
Chris@16 164 #include <boost/bind/mem_fn_vw.hpp>
Chris@16 165
Chris@16 166 #undef BOOST_MEM_FN_NAME
Chris@16 167 #undef BOOST_MEM_FN_NAME2
Chris@16 168 #undef BOOST_MEM_FN_CC
Chris@16 169
Chris@16 170 #endif
Chris@16 171
Chris@16 172 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
Chris@16 173
Chris@16 174 #define BOOST_MEM_FN_NAME(X) X##_stdcall
Chris@16 175 #define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall
Chris@16 176 #define BOOST_MEM_FN_CC __stdcall
Chris@16 177
Chris@16 178 #include <boost/bind/mem_fn_vw.hpp>
Chris@16 179
Chris@16 180 #undef BOOST_MEM_FN_NAME
Chris@16 181 #undef BOOST_MEM_FN_NAME2
Chris@16 182 #undef BOOST_MEM_FN_CC
Chris@16 183
Chris@16 184 #endif
Chris@16 185
Chris@16 186 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
Chris@16 187
Chris@16 188 #define BOOST_MEM_FN_NAME(X) X##_fastcall
Chris@16 189 #define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall
Chris@16 190 #define BOOST_MEM_FN_CC __fastcall
Chris@16 191
Chris@16 192 #include <boost/bind/mem_fn_vw.hpp>
Chris@16 193
Chris@16 194 #undef BOOST_MEM_FN_NAME
Chris@16 195 #undef BOOST_MEM_FN_NAME2
Chris@16 196 #undef BOOST_MEM_FN_CC
Chris@16 197
Chris@16 198 #endif
Chris@16 199
Chris@16 200 } // namespace _mfi
Chris@16 201
Chris@16 202 #else // #ifdef BOOST_NO_VOID_RETURNS
Chris@16 203
Chris@16 204 #define BOOST_MEM_FN_CLASS_F
Chris@16 205 #define BOOST_MEM_FN_TYPEDEF(X) typedef X;
Chris@16 206
Chris@16 207 namespace _mfi
Chris@16 208 {
Chris@16 209
Chris@16 210 #define BOOST_MEM_FN_RETURN return
Chris@16 211
Chris@16 212 #define BOOST_MEM_FN_NAME(X) X
Chris@16 213 #define BOOST_MEM_FN_CC
Chris@16 214
Chris@16 215 #include <boost/bind/mem_fn_template.hpp>
Chris@16 216
Chris@16 217 #undef BOOST_MEM_FN_CC
Chris@16 218 #undef BOOST_MEM_FN_NAME
Chris@16 219
Chris@16 220 #ifdef BOOST_MEM_FN_ENABLE_CDECL
Chris@16 221
Chris@16 222 #define BOOST_MEM_FN_NAME(X) X##_cdecl
Chris@16 223 #define BOOST_MEM_FN_CC __cdecl
Chris@16 224
Chris@16 225 #include <boost/bind/mem_fn_template.hpp>
Chris@16 226
Chris@16 227 #undef BOOST_MEM_FN_CC
Chris@16 228 #undef BOOST_MEM_FN_NAME
Chris@16 229
Chris@16 230 #endif
Chris@16 231
Chris@16 232 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
Chris@16 233
Chris@16 234 #define BOOST_MEM_FN_NAME(X) X##_stdcall
Chris@16 235 #define BOOST_MEM_FN_CC __stdcall
Chris@16 236
Chris@16 237 #include <boost/bind/mem_fn_template.hpp>
Chris@16 238
Chris@16 239 #undef BOOST_MEM_FN_CC
Chris@16 240 #undef BOOST_MEM_FN_NAME
Chris@16 241
Chris@16 242 #endif
Chris@16 243
Chris@16 244 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
Chris@16 245
Chris@16 246 #define BOOST_MEM_FN_NAME(X) X##_fastcall
Chris@16 247 #define BOOST_MEM_FN_CC __fastcall
Chris@16 248
Chris@16 249 #include <boost/bind/mem_fn_template.hpp>
Chris@16 250
Chris@16 251 #undef BOOST_MEM_FN_CC
Chris@16 252 #undef BOOST_MEM_FN_NAME
Chris@16 253
Chris@16 254 #endif
Chris@16 255
Chris@16 256 #undef BOOST_MEM_FN_RETURN
Chris@16 257
Chris@16 258 } // namespace _mfi
Chris@16 259
Chris@16 260 #undef BOOST_MEM_FN_CLASS_F
Chris@16 261 #undef BOOST_MEM_FN_TYPEDEF
Chris@16 262
Chris@16 263 #endif // #ifdef BOOST_NO_VOID_RETURNS
Chris@16 264
Chris@16 265 #define BOOST_MEM_FN_NAME(X) X
Chris@16 266 #define BOOST_MEM_FN_CC
Chris@16 267
Chris@16 268 #include <boost/bind/mem_fn_cc.hpp>
Chris@16 269
Chris@16 270 #undef BOOST_MEM_FN_NAME
Chris@16 271 #undef BOOST_MEM_FN_CC
Chris@16 272
Chris@16 273 #ifdef BOOST_MEM_FN_ENABLE_CDECL
Chris@16 274
Chris@16 275 #define BOOST_MEM_FN_NAME(X) X##_cdecl
Chris@16 276 #define BOOST_MEM_FN_CC __cdecl
Chris@16 277
Chris@16 278 #include <boost/bind/mem_fn_cc.hpp>
Chris@16 279
Chris@16 280 #undef BOOST_MEM_FN_NAME
Chris@16 281 #undef BOOST_MEM_FN_CC
Chris@16 282
Chris@16 283 #endif
Chris@16 284
Chris@16 285 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
Chris@16 286
Chris@16 287 #define BOOST_MEM_FN_NAME(X) X##_stdcall
Chris@16 288 #define BOOST_MEM_FN_CC __stdcall
Chris@16 289
Chris@16 290 #include <boost/bind/mem_fn_cc.hpp>
Chris@16 291
Chris@16 292 #undef BOOST_MEM_FN_NAME
Chris@16 293 #undef BOOST_MEM_FN_CC
Chris@16 294
Chris@16 295 #endif
Chris@16 296
Chris@16 297 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
Chris@16 298
Chris@16 299 #define BOOST_MEM_FN_NAME(X) X##_fastcall
Chris@16 300 #define BOOST_MEM_FN_CC __fastcall
Chris@16 301
Chris@16 302 #include <boost/bind/mem_fn_cc.hpp>
Chris@16 303
Chris@16 304 #undef BOOST_MEM_FN_NAME
Chris@16 305 #undef BOOST_MEM_FN_CC
Chris@16 306
Chris@16 307 #endif
Chris@16 308
Chris@16 309 // data member support
Chris@16 310
Chris@16 311 namespace _mfi
Chris@16 312 {
Chris@16 313
Chris@16 314 template<class R, class T> class dm
Chris@16 315 {
Chris@16 316 public:
Chris@16 317
Chris@16 318 typedef R const & result_type;
Chris@16 319 typedef T const * argument_type;
Chris@16 320
Chris@16 321 private:
Chris@16 322
Chris@16 323 typedef R (T::*F);
Chris@16 324 F f_;
Chris@16 325
Chris@16 326 template<class U> R const & call(U & u, T const *) const
Chris@16 327 {
Chris@16 328 return (u.*f_);
Chris@16 329 }
Chris@16 330
Chris@16 331 template<class U> R const & call(U & u, void const *) const
Chris@16 332 {
Chris@16 333 return (get_pointer(u)->*f_);
Chris@16 334 }
Chris@16 335
Chris@16 336 public:
Chris@16 337
Chris@16 338 explicit dm(F f): f_(f) {}
Chris@16 339
Chris@16 340 R & operator()(T * p) const
Chris@16 341 {
Chris@16 342 return (p->*f_);
Chris@16 343 }
Chris@16 344
Chris@16 345 R const & operator()(T const * p) const
Chris@16 346 {
Chris@16 347 return (p->*f_);
Chris@16 348 }
Chris@16 349
Chris@16 350 template<class U> R const & operator()(U const & u) const
Chris@16 351 {
Chris@16 352 return call(u, &u);
Chris@16 353 }
Chris@16 354
Chris@16 355 #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)
Chris@16 356
Chris@16 357 R & operator()(T & t) const
Chris@16 358 {
Chris@16 359 return (t.*f_);
Chris@16 360 }
Chris@16 361
Chris@16 362 R const & operator()(T const & t) const
Chris@16 363 {
Chris@16 364 return (t.*f_);
Chris@16 365 }
Chris@16 366
Chris@16 367 #endif
Chris@16 368
Chris@16 369 bool operator==(dm const & rhs) const
Chris@16 370 {
Chris@16 371 return f_ == rhs.f_;
Chris@16 372 }
Chris@16 373
Chris@16 374 bool operator!=(dm const & rhs) const
Chris@16 375 {
Chris@16 376 return f_ != rhs.f_;
Chris@16 377 }
Chris@16 378 };
Chris@16 379
Chris@16 380 } // namespace _mfi
Chris@16 381
Chris@16 382 template<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f)
Chris@16 383 {
Chris@16 384 return _mfi::dm<R, T>(f);
Chris@16 385 }
Chris@16 386
Chris@16 387 } // namespace boost
Chris@16 388
Chris@16 389 #endif // #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED