diff options
author | Taybin Rutkin <taybin@taybin.com> | 2005-05-13 20:47:18 +0000 |
---|---|---|
committer | Taybin Rutkin <taybin@taybin.com> | 2005-05-13 20:47:18 +0000 |
commit | d09f6b3016bacbc2871a8946cbb24ad705076509 (patch) | |
tree | f27312839c2a772cb2ce068a4f28b2449ad869df /libs/sigc++2 |
Initial revision
git-svn-id: svn://localhost/trunk/ardour2@4 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/sigc++2')
69 files changed, 34422 insertions, 0 deletions
diff --git a/libs/sigc++2/.cvsignore b/libs/sigc++2/.cvsignore new file mode 100644 index 0000000000..d505773e75 --- /dev/null +++ b/libs/sigc++2/.cvsignore @@ -0,0 +1,18 @@ +Makefile +Makefile.in +aclocal.m4 +autom4te.cache +config.guess +config.log +config.status +config.sub +depcomp +install-sh +libsigc++-2.0.spec +libtool +ltmain.sh +missing +sigc++-2.0.pc +stamp-h1 +configure +sigc++config.h diff --git a/libs/sigc++2/AUTHORS b/libs/sigc++2/AUTHORS new file mode 100644 index 0000000000..000671ac0a --- /dev/null +++ b/libs/sigc++2/AUTHORS @@ -0,0 +1,8 @@ +Martin Schulze <mschulze@cvs.gnome.org> +Murray Cumming <murrayc@murrayc.com> +Cedric Gustin <cedric.gustin@swing.be> (win32 support) +Timothy M. Shead <tshead@k-3d.com> and James Lin <jameslin@vmware.com> (MSVC support) +Damien Carbery <Damien.Carbery@Sun.COM> (Sun FORTE C++ support) +Takashi Takekawa <takekawa@users.sourceforge.jp> (Intel C++ support) +Andreas Rottmann <rottmann@users.sourceforge.net> (make system) +Karl Einar Nelson <kenelson@ece.ucdavis.edu> (initial version 1.9.4) diff --git a/libs/sigc++2/COPYING b/libs/sigc++2/COPYING new file mode 100644 index 0000000000..c4792dd27a --- /dev/null +++ b/libs/sigc++2/COPYING @@ -0,0 +1,515 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. +^L + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. +^L + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. +^L + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. +^L + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. +^L + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. +^L + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. +^L + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS +^L + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + <one line to give the library's name and a brief idea of what it +does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper +mail. + +You should also get your employer (if you work as a programmer) or +your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James +Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/libs/sigc++2/ChangeLog b/libs/sigc++2/ChangeLog new file mode 100644 index 0000000000..8e02aef058 --- /dev/null +++ b/libs/sigc++2/ChangeLog @@ -0,0 +1,1249 @@ +2004-10-12 Martin Schulze <mschulze@cvs.gnome.org> + + * MSVC_Net2003/*/*.vcproj, MSVC_Net2003/blank.cpp: Fix project files + to compile out-of-the-box and add dummy file so that .cc files get + recognized as c++ code files (patch from Timothy M. Shead). + +2004-10-10 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/signal_base.{h,cc}, sigc++/functors/slot_base.{h,cc}, + sigc++/functors/macros/slot.h.m4: If SIGC_NEW_DELETE_IN_LIBRARY_ONLY + is defined, implement signal_base::operator new/delete and + slot_rep::operator new/delete (suggested by Timothy M. Shead). + Remove old work-around from 2004-10-02 since it didn't work. + +2004-10-07 Martin Schulze <mschulze@cvs.gnome.org> + + * configure.ac: Update for libtool 1.5a (with support for Intel C++). + * MSVC_Net2003/sigc++config.h: Remove bogus '#define' + (reported by Timothy M. Shead <tshead@k-3d.com>). + +2004-10-02 Martin Schulze <mschulze@cvs.gnome.org> + + * configure.ac: Bump version number to 2.0.6. + * NEWS: Add ChangeLog summary for version 2.0.6. + +2004-10-02 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/functors/slot_base.{h,cc}, sigc++/functors/macros/slot.h.m4: + Rename (typed_)slot_rep::detach to (typed_)slot_rep::destroy. + Call the dtor of the functor stored in typed_slot_rep from destroy(). + A cleaner solution would be to add an additional "virtual" function + that calls 'delete' or a real virtual dtor. However, this would be + less efficient and might break the ABI. (Fixes #152323.) + +2004-10-02 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++config.h.in, MSVC_Net2003/sigc++config.h, + sigc++/signal_base.cc, sigc++/functors/slot_base.{h,cc}, + sigc++/functors/macros/slot.h.m4: Define and use new macro + SIGC_NEW_DELETE_IN_LIBRARY_ONLY to ABI-compatibly move + all calls to new and delete into non-inline library code. + +2004-09-26 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/adaptors/lambda/macros/group.h.m4: Add a missing + template keyword in the definition of deduce_result_type::type + (hopefully fixes #152327). + +2004-09-26 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/macros/object_slot.h.m4: Use correct bound_mem_functor + variants for const (volatile) methods (fixes #148744). + +2004-09-01 Martin Schulze <mschulze@cvs.gnome.org> + + * docs/index.html: Correct link to lambda module. + +2004-09-01 Martin Schulze <mschulze@cvs.gnome.org> + + * README: Update compatibility section. + +2.0.5: + +2004-09-01 Martin Schulze <mschulze@cvs.gnome.org> + + * MSVC_Net2003/Makefile.am: Add sigc++config.h to EXTRA_DIST. + * configure.ac: Bump version number to 2.0.5. + * NEWS: Add ChangeLog summary for version 2.0.5. + +2.0.4: + +2004-08-21 Martin Schulze <mschulze@cvs.gnome.org> + + * tests/test_lambda.cc: Use sigc::var("\n") instead of sigc::ref("\n"). + Comment out the affected lines, nevertheless. + Sun FORTE and Compaq C++ can handle neither sigc::ref("\n") nor + sigc::var("\n"). I see more chances fixing sigc::var("\n"). + * sigc++/adaptors/lambda/macros/base.h.m4: Add a comment about a + possible work around for sigc::var("\n") compiler problems. + * tests/test_compatibility.cc: Remove a 'const' keyword that prevents + the test case from compiling with the Sun FORTE. + * tests/test_trackable.cc: Remove a 'virtual' keyword and an unused + variable to avoid compiler warnings. + * NEWS: Add ChangeLog summary for version 2.0.4. + +2004-08-03 Martin Schulze <mschulze@cvs.gnome.org> + + * scripts/cxx.m4, sigc++config.h.in, configure.ac, + sigc++/adaptors/lambda/macros/operator.h.m4, tests/test_lambda.cc: + Rollback change from 2004-07-15: configure check + SIGC_OPERATOR_OVERLOAD_AMBIGUITY is not needed - the overload + ambiguity doesn't occur if the lambda operators take all arguments + as const reference. + * configure.ac: Bump version number to 2.0.4. + +2004-08-03 James Lin <slimjimmy@mail.com> + + * Added SIGC_API qualifier to all externally-visible non-template + classes/structs. + * Added #include <sigc++config.h> to the files that use SIGC_API. + * Added empty SIGC_API definition to sigc++config.h.in for non-MSVC + compilers. I'm not sure if this is the right place to put this + (probably not). + * Added MSVC-specific sigc++config.h to the MSVC project directory. + (The comment in it probably should be edited.) + * Changed MSVC project settings to output a multi-threaded DLL, set + the include paths to work (hopefully) out-of-the-box. Disabled + precompiled headers, since they just complicate things and + shouldn't be necessary for such a relatively project. + +2004-08-01 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/type_traits.h: Remove type_trait<>::instance() + (was unimplemented and unused; caused problems with the MSVC). + +2004-07-23 Martin Schulze <mschulze@cvs.gnome.org> + + * Makefile.am: Fix typo concerning distribution of libsigc++-2.0.spec. + * AUTHORS: Mention our contributors for platforms Sun FORTE and Intel C++. + +2004-07-15 Martin Schulze <mschulze@cvs.gnome.org> + + * *.h.m4: Don't call operator()() in sun_forte_workaround(); rather copy + operator()(). Calling operator()() makes a copy of the arguments causing + wrong results if an argument type is a reference. Hopefully fixes #147311. + +2004-07-15 Martin Schulze <mschulze@cvs.gnome.org> + + * tests/test_lambda.cc: Break "std::cout << [expr] << a << std::endl;" + into "std::cout << [expr]; std::cout << a << std::endl;". + I hope this fixes #147313 where the right values for "[expr]" but wrong + values for "a" were written to std::cout for some compiler with optimizations + turned off. + +2004-07-15 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/adaptors/lambda/macros/operator.h.m4: Correct return type deduction + of lambda expressions in lambda_operator*::operator()(). Might be related to + bug #147313. + * sigc++/adaptors/lambda/macros/group.h.m4: Use m4 macro _P_(). + +2004-07-15 Martin Schulze <mschulze@cvs.gnome.org> + + * scripts/cxx.m4, sigc++config.h.in, configure.ac, + sigc++/adaptors/lambda/macros/operator.h.m4, tests/test_lambda.cc: + Add configure check SIGC_OPERATOR_OVERLOAD_AMBIGUITY for a SUN FORTE + compiler problem (bug #147391). Use it to decide whether the lambda + action operators may be overloaded (not doing so restricts the API slightly). + * sigc++/adaptors/lambda/macros/operator.h.m4: Add some doxygen comments + and remove attic code. + * sigc++/adaptors/lambda/macros/base.h.m4: + Add templates unwrap_lambda_type and unwrap_lambda_value() to support + the non-overloaded lambda action operators. Also add some doxygen comments + and remove attic code. + * sigc++/adaptors/lambda/macros/group.h.m4: Fix a bug that resulted in + gargabe values being passed on to the functor contained in the group adaptor + (partly fixes #147313). + +2004-07-11 Martin Schulze <mschulze@cvs.gnome.org> + + * scripts/cxx.m4, sigc++config.h.in, configure.ac, *.h.m4: + Split SIGC_CXX_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + into SIGC_CXX_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + and SIGC_CXX_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD. + Remove LIBSIGC_TEMPLATE_PREFIX. Add template keyword to + SIGC_WORKAROUND_OPERATOR_PARENTHESES depending on the configure checks. + Should fix the compiler problems with MSVC. + +2004-07-11 Martin Schulze <mschulze@cvs.gnome.org> + + * examples/hello_world.cc: Use sigc::ptr_fun instead of std::ptr_fun. + (fixes bug #144846) + +2004-07-11 Eric Bourque <ericb@computer.org> + + * libsigc++-2.0.spec.in: new file + * configure.ac : patched generate spec file + * .cvsignore: ignore generated file (Martin Schulze) + * Makefile.am: distribute spec file (Martin Schulze) + +2004-07-11 Murray Cumming <murrayc@murrayc.com> + + * sigc++/connection.cc: Added some comments. + * sigc++/trackable.cc: operator=(): Check for self-asignment, though I + do not know of any actual bug that this fixes. Added some comments. + * sigc++/trackable.h Added some doxygen documentation. + +2004-07-09 Murray Cumming <murrayc@murrayc.com> + + * tests/: Added test_disconnect_during_emit.cc, to prove that this + works. + +2004-07-08 Murray Cumming <murrayc@murrayc.com> + + * tests/test_retype_return.cc: foo::operator(int): return a + value. The SUN Forte 5.5 compiler complains about this, as it should. + +2004-07-08 Murray Cumming <murrayc@murrayc.com> + + * sigc++/macros/signal.h.m4: class signal*: Rename the slot_list + typedef to slot_list_type, because there is already a template class + called slot_type. SUN Forte 5.5 seems to complain about this and I am + not surprised. The old typdef is still there for backwards + compatibility, except when building with SUN Forte. + +2004-07-07 Murray Cumming <murrayc@murrayc.com> + + * scripts/cxx.m4: SIGC_CXX_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD(): + Don't define the SIGC_TEMPLATE_SPECIALIZATOIN_OPERATOR_OVERLOAD C + macro at all if the test fails. This might fix the build on SUN Forte. + * sigc++/functors/macros/mem_fun.h.m4: Default constructor: Initialize + the func_ptr_ member variable. I have no evidence that this solves any + problems, but it worried me. + * sigc++/functors/slot_base.h: operator bool(): Correct documentation, + to use @code instead of <code> + * sigc++/macros/signal.h.m4: Remove the documentation for the + parameters named first and last, because they do not exist. + +2004-05-31 Martin Schulze <mschulze@cvs.gnome.org> + + * autogen.sh: Add '--force'-flag to the 'libtoolize'-command (bug #143425). + +2.0.3: + +2004-05-30 Martin Schulze <mschulze@cvs.gnome.org> + + * configure.ac: Bump version number to 2.0.3. + * NEWS: Add ChangeLog summary for version 2.0.3. + * sigc++/macros/signal.h.m4: Fix segfault on emission of unconnected signal. + * tests/test_signal.cc, tests/test_accumulated.cc: Emit unconnected signal. + * sigc++/macros/object_slot.h.m4: Suppress compiler warning at + dynamic_cast<>-test (tested by Christof Petig/Timothy M. Shead). + +2.0.2: + +2004-05-22 Martin Schulze <mschulze@cvs.gnome.org> + + * configure.ac: Bump version number to 2.0.2. + * NEWS: Add ChangeLog summary for version 2.0.2. + +2004-05-20 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/macros/signal.h.m4: If a custom accumulator is specified + invoke it on signal emission even if the signal's slot list is empty. + (This used to be the case in libsigc++-1.2 as pointed out by Timothy.) + +2004-05-20 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/macros/object_slot.h.m4: Suppress compiler warning at + dynamic_cast<>-test (suggested by Timothy M. Shead). + +2004-05-01 Martin Schulze <mschulze@cvs.gnome.org> + + * README: Updated for libsigc++-2.0. + +2.0.1: + +2004-04-27 Martin Schulze <mschulze@cvs.gnome.org> + + * configure.ac: Bump version number to 2.0.1. + * NEWS: Add ChangeLog summary for version 2.0.1. + * sigc++/adaptors/lambda/macros/base.h.m4: Fixed documentation. + * sigc++/adaptors/macros/bind.h.m4: Hide work-arounds from doxygen. + * scripts/cxx.m4, sigc++config.h.in, configure.ac, + sigc++/adaptors/macros/bind.h.m4: Removed configure check. It + showed that the Apple gcc can also compile the sophisticated version + of the work-around. + +2004-04-26 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/macros/object_slot.h.m4: Modified test for SigC::Object + inheritance so that it also works if SigC::Object is virtual base. + (Fixes bug 141094 reported by Jonathan Brandmeyer) + +2004-04-26 Martin Schulze <mschulze@cvs.gnome.org> + + * scripts/cxx.m4: Updated the configure check. It would probably + have succeeded on the Apple. + +2004-04-26 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/adaptors/macros/bind.h.m4: Add work-arounds for + bind<-1>::deduce_result_type compilation error on Apple gcc 3.3. + * scripts/cxx.m4, sigc++config.h.in, configure.ac: Add configure + check for the compilation error above. + * sigc++/adaptors/lambda/macros/operator.h.m4: Replace _A with + _Aa. _A is a reserved keyword on Apple gcc 3.3 (Spundun Bhatt). + (fixes bug #10444 reported by Spundun Bhatt) + +2004-04-19 Martin Schulze <mschulze@cvs.gnome.org> + + * sigc++/signal_base.cc: Fixed serious bug in signal_base::impl(): + Only reference a newly created object (initial reference). + (This fixes bug #140269 reported by Andris.) + +2004-04-19 Murray Cumming <murrayc@murrayc.com> + + * scripts/cxx.m4: Updated the operator() template check, because it + failed with gcc 3.4 (from cvs). Apparently the template keyword can + only be used from another template. + +2.0.0: + +2004-04-06 Martin Schulze <mschulze@cvs.gnome.org> + + * configure.ac: Bump version number to 2.0.0. + * NEWS: Add ChangeLog summary for version 2.0.0. + * TODO, AUTHORS: Bring up to date. + * sigc++-2.0.pc.in, Makefile.am: 1.9 -> 2.0 + * Added more documentation. + +2004-04-10 Murray Cumming <murrayc@murrayc.com> + + * sigc++/connection.[h|cc]: Implement blocked() to avoid undefined + symbol linker error. + +2004-04-08 Murray Cumming <murrayc@murrayc.com> + + * dist the scripts directory. + +1.9.16: + +2004-04-06 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.16. + * NEWS: Add ChangeLog summary for version 1.9.16. + +2004-04-02 Murray Cumming <murrayc@murrayc.com> + + * sigc++/connection.cc: Make block() and unblock() always return a + value, to fix compiler warnings. Patch from bug #138620 by + Alexander Nedotsukov. + +2004-04-02 Murray Cumming <murrayc@murrayc.com> + + * Fix the compile of examples/member_method.cc. Bug #131701 from + Kirill Smelkov. I also made the examples build as part of the regular + build. + +2004-04-02 Murray Cumming <murrayc@murrayc.com> + + * sigc++config.h.m4: Remove every undef apart from the one we need, to + avoid clashes, because we #include this in a public header. + +2004-03-25 Murray Cumming <murrayc@murrayc.com> + + * scripts/cxx.m4, configure.in, sigc++config.h.in: Rename the + template_keyword check to template_specialization, because the problem + is with or without the keyword. + * sigc++/adaptors/macros/adaptor_trait.h.m4: Define + SIGC_WORKAROUND_OPERATOR_PARENTHESES, which calls either operator() or + sun_forte_workaround() depending on the result of the compiler test. + * many .m4 files: Add sun_forte_workaround methods that call the + operator() methods. Put them in #ifdefs so that only SUN Forte C++ + sees them. + +2004-03-22 Murray Cumming <murrayc@murrayc.com> + + * Makefile.am, sigc++/Makfile.am: Fix the sigc++config.h.in disting, + to fix make distcheck. + +2004-03-21 Murray Cumming <murrayc@murrayc.com> + + * Rename config.h.in to sigc++config.h.in so that gtkmm does not + include some other config.h at strange times - fixes a problem in + the gtkmm demos. This should really be in the sigc++ directory, but + that seems to add that as an include path, which causes the STL + headers to include sigc++/signal.h instead of some STL signal.h header. + +2004-03-20 Murray Cumming <murrayc@murrayc.com> + + * Makefile.am: Install the config.h platform-specific header. + * sigc++-2.0.pc.in: Report the include path for config.h + +2004-03-20 Murray Cumming <murrayc@murrayc.com> + + * Added config.h.in, using autoheader, from which config.h will be + generated, so we can detect compiler features. + * configure.ac: Added AC_CONFIG_HEADER(config.h) to generate config.h + from config.h.in. + * scripts/cxx.m4: Added this directory and file, with a + SIGC_CXX_TEMPLATE_KEYWORD_OPERATOR_OVERLOAD macro that defines + the SIGC_TEMPLATE_KEYWORD_OPERATOR_OVERLOAD C macro. + * autogen.sh: Added -I scripts to the aclocal call, so that it finds + the m4 macro for configure.ac. + * sigc++/adapators/macros/adaptor_trait.h.m4: Include config.h and + use SIGC_TEMPLATE_KEYOWRD_OPERATOR_OVERLOAD. + +2004-03-18 Martin Schulze <mschulze@cvs.gnome.org> + + * tests/test_mem_fun.cc, tests/test_ptr_fun.cc: Don't test + making functors from overloaded methods with partial template + specialization. Not portable among different compilers (SUN FORTE). + * adaptors/macros/apdaptor_trait.h.m4: Only gcc seems to use the + notation A.template operator()<...>(...) => adapt preprocessor check + for #define LIBSIGC_TEMPLATE_PREFIX. TODO: replace with configure check. + +2004-03-13 Murray Cumming <murrayc@murrayc.com> + + * g++ 3.4 (pre-release) build fixes: + * sigc++/macros/signal.h.m4: slot_iterator_buf::operator*(): + Use blocked() and empty() instead of non-existant blocked_and_empty(). + * sigc++/functors/macros/mem_fun.h.m4: memfun_functor*::operator()(): + Use this->func_ptr_ instead of just func_ptr_. + * sigc++/adaptors/macros/deduce_result_type.h.m4: Use + T_functor::template deduce_result_type<> instead of just + T_functor::deduce_result_type<>. + * sigc++/adaptors/lambda/macros/base.h.m4, operator.h.m4, group.h.m4:: + Use template keyword again. operator[](): Use this->value_ instead of + just value_. + * sigc++/adaptors/lambda/macros/bind/m4: Use template keyword, and + this-> again. + * sigc++/adaptors/macros/compose.h.m4, hide.h.m4, bind_return.h.m4, + exception_catch.h.m4: + rettype.h.m4, rettype_return.h.m4: Use template keyword,and this-> again + +1.9.15: + +2004-02-27 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.15. + * NEWS: Add ChangeLog summary for version 1.9.15. + +2004-02-27 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functors/macros/slot.h.m4: Make the unnumbered slot templates' + copy ctors use the copy ctors of the base class. Fixes bug #24698. + * tests/test_slot.cc: Test copy ctor (Bryan Forbes). + +2004-02-27 Martin Schulze <teebaum@cvs.gnome.org> + + * tests/type_functor_trait.cc: Bring it up-to-date (use sigc::ref). + Make it work with the SUN Forte. + +2004-02-24 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/type_traits.h: Make is_base_and_derived<> work with the SUN Forte. + +2004-02-19 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/type_traits.h: Make is_base_and_derived<> platform independant. + * sigc++/adaptors/lambda/macros/base.h.m4: Make lambda_core<> ctors + explicit. Remove an unused ctor from lambda_core<T_type, true>. + +2004-02-14 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functors/slot_base.h, sigc++/functors/macros/slot.h.m4: + Move some documentation to slot_base.h. + * sigc++/signal_base.h, sigc++/macros/signal.h.m4: + Move some documentation to signal_base.h. + + API addition: + * sigc++/functors/macros/slot.h.m4: Add numbered slot# templates. + Make unnumbered slot templates inherit from slot#. + + API change: + * sigc++/functors/macros/mem_fun.h.m4: Allow for methods of the object's + base types to be passed into sigc::mem_fun(). (Used to be the case in + libsigc++-1.2). + +2004-02-13 Murray Cumming <murrayc@usa.net> + + * sigc++/functors/slot_base.[h|cc], sigc++/trackable.[h|cc]: Create + and use a typedef for the destroy_notify callback functions, to avoid + confusion function pointer declaration syntax in the API. + +2004-02-13 Murray Cumming <murrayc@murrayc.com> + + * Moved implementation to .cc files: + * sigc++/functors/: Added slot_base.[h|cc] which contains non-template + code that was previsouly in the generated functors/slot.h and + non-generated slot.cc files. All non-inline implementation is now in + the .cc file. + * sigc++/functors/macros/slot.m4: Removed the code that has been moved + to slot_base.[h|cc]. + * sigc++/: Added signal_base.[h|cc] which contains non-template code + that was previously in the generated signal.h and non-generated + signal.cc file. All non-inline implementation is now in the .cc file. + * sigc++/macros/signal.m4: Removed the code that ahs been moved to + signal.cc + * sigc++/connector.[h|cc]: method implementation moved to the .cc file. + +1.9.14: + +2004-02-13 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.14. + * NEWS: Add ChangeLog summary for version 1.9.14. + +2004-02-09 Murray Cumming <murrayc@usa.net> + + * sigc++/functors/macros/slot.h.m4: slot_base: Added operator bool(), needed to + check for a slot that is created with the default constructor. This was + present in libsigc++ 1.2 also. + +2004-02-06 Murray Cumming <murrayc@usa.net> + + * Makefile.am: Build the docs directory, by adding it to SUBDIRS. + * docs/Doxyfile.in: Updated to be more glibmm-like. + * Added some @deprecated doxygen bits. + * sigc++/macros/signal.h.m4: Call base constructor from signal_base + constructor - this is an error-as-warning when building gtkmm. + +1.9.13: + +2003-11-30 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.13. + * NEWS: Add ChangeLog summary for version 1.9.13. + * Makefile.am, MSVC_Net2003/Makefile.am, configure.ac: + Distribute MS .Net project files. + * sigc++/adaptors/macros/[bind,hide].h.m4: Correct and add + documentation. Make hide_functor ctor explicit. + +2003-11-11 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors/macros/[bind,hide].h.m4: Change to zero-based + argument index in numbered bind() and hide() overload + (Agreement on the mailing list). + Support binding up to CALL_SIZE arguments with one bind adaptor. + (Requested by joey yandle and others). + Only support binding of multiple arguments in unnumberd overloads + to keep the API simple (Requested by Murray Cumming). + * tests/test_[bind,hide,functor_trait].cc, sigc++/bind.h: + Reflect API changes in compatibility module and test cases. + +2003-11-10 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors/macros/[bind,hide].h.m4: Add unnumbered + bind() and hide() overloads to make specifying the argument + position optional (Proposed by Jeff Franks). + * tests/test_[bind,hide].cc: Test unnumbered bind() and hide(). + * sigc++/adaptors/macros/adaptor_trait.h.m4: + Change "#ifdef MSVC" to "#ifdef _MSC_VER" (Roel Vanhout). + +2003-11-09 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functors/macros/slot.h.m4: Change functor type in + typed_slot_rep to adaptor_trait::adaptor_type<T_functor> + and use explicit function template instantiation in + internal::slot_call::call_it(). Avoids copying of arguments + in call_it() and enables binding of object instances + to class methods through bind() (Reported by Jeff Franks). + * tests/test_bind.cc: Test binding object instances to + class methods through bind(). + * sigc++/adaptors/adaptors.h: Include retype[_result].h. + * sigc++/adaptors/macros/adaptor_trait.h.m4: + - Add documentation. + - Mark some c-tors as explicit. + - Remove ununsed operator T_functor&() from adaptor_functor. + * sigc++/adaptors/macros/deduce_result_type.h.m4: + Rewrite parts of the documentation. + * sigc++/adaptors/macros/bind.h.m4: Add documentation. + * sigc++/functors/macros/mem_fun.h.m4: Remove unnecessary + explicit markers. Minor fixes to documentation. + * sigc++/functors/macros/functor_trait.h.m4: + Minor fixes to documentation. + +1.9.12: + +2003-11-04 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.12. + * NEWS: Add ChangeLog summary for version 1.9.12. + +2003-11-03 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/macros/signal.h.m4: Document accumulators. + Move slot_iterator_buf into namespace internal. Since + accumulators have the iterator type as a template argument + there is no need to expose this very internal type. + * sigc++/functors/macros/*.m4: Regroup documentation. + Documentation of the core parts of the library should be + complete by now. + +2003-11-02 Martin Schulze <teebaum@cvs.gnome.org> + + * Improve documentation of the core parts of the library. + * tests/test_ptr_fun.cc: Test ptr_fun() with static + member functions. + +2003-11-02 Martin Schulze <teebaum@cvs.gnome.org> + + * Move all .m4 files into new subdirectories + sigc++/[...]/macros. Install the .m4 files on + "make install" (Reported by Ron Steinke). + +2003-11-01 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/[class,method,object]_slot.h.m4: Include + sigc++/functors/mem_fun.h (Reported by Ron Steinke). + +2003-11-01 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors/lambda/operator.h.m4: Add negation + operator I have completely overlooked until now. + * sigc++/tests/test_lambda.cc: Test negation operator. + +2003-11-01 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/[class_slot,method_slot,object_slot,hide].h.m4, + sigc++/signal.h.m4, sigc++/functors/mem_fun.h.m4: + - Use a shorter notation for ..._mem_function variants. + - Change order of mem_funcotr<>'s template arguments to + match std::mem_fun_t and to be more consistent with adaptors. + - Use ::sigc::slot's implicit ctor in compatibility module. + * sigc++/adaptors/lambda/operator.h.m4: Change some + lambda action names to match action names in std. + + API addition: + * sigc++/adaptors/retype.h.m4: New file adding + adaptor retype. + * sigc++/Makefile.am: Build and distribute new file. + * tests/test_retype.cc: New file testing adaptor retype. + * MSVC_Net2003/tests/test_retype/test_reytype.vcproj, + tests/Makefile.am: Build and distribute new test case. + +2003-11-01 Martin Schulze <teebaum@cvs.gnome.org> + + * MSVC_Net2003: New directory containing project + files for Visual Studio .Net 2003. + Credits to Roel Vanhout <roel@riks.nl>! + +2003-11-01 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/retype.h.m4: Use LIBSIGC_TEMPLATE_PREFIX + in explicit function template instantiations. + * sigc++/type_traits.h: Add template specialization + for arrays (T_type[N]) to disable non-working member + type_trait<T_type[N]>::instance(). + * sigc++/visit_each.h: Remove more disturbing + limit_derived_target<>::operator() overloads. + (Should have noticed earlier that they are unnecessary.) + * sigc++/adaptors/deduce_result_type.h.m4, + sigc++/adaptors/lambda/operator.h.m4, + sigc++/functors/functor_trait.h.m4, + tests/test_[bind,compose,exception_catch,hide,lambda].cc: + Completely removed support for typeof(). We don't need + it any more and it is completely non-standard! + +2003-10-30 Cedric Gustin <cedric.gustin@swing.be> + + * configure.ac: Added test of win32 platform. Commented + out AM_DISABLE_SHARED (DLLs are shared libraries). + * sigc++/Makefile.am: added a few LDFLAGS for win32 + DLLs. + +2003-10-30 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/signal.h.m4: Add SigC::Signal#<>::slot(). + * sigc++/slot.h.m4: Comment out make_slot() work-around. + * sigc++/adaptors/bind.h.m4: Remove unnecessary brackets + in template argument lists. They are confusing MSVC. + * sigc++/adaptors/*.h.m4, sigc++/adaptors/lambda/*.h.m4: + Use LIBSIGC_TEMPLATE_PREFIX in explicit function + template instantiations. + * sigc++/tests/test_*.cc: + - Include <string> where std::string is used. + - Use double instead of float. + +2003-10-27 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/retype.h.m4: Cleanup. + * TODO: Bring it up to date. + +1.9.11: + +2003-10-26 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.11. + * NEWS: Add ChangeLog summary for version 1.9.11. + +2003-10-26 Martin Schulze <teebaum@cvs.gnome.org> + + Compatiblity module: + * sigc++/signal.h.m4: Move definition of compatiblity + classes SigC::SignalN to here. + * sigc++/connection.h: + - Add connection::connected(). + - Add compatibility typedef SigC::Connection. + * sigc++/bind.h, sigc++/bind_return.h, + sigc++/class_slot.h.m4, sigc++/hide.h.m4, + sigc++/method_slot.h.m4, sigc++/object.h, + sigc++/object_slot.h.m4, sigc++/retype.h.m4, + sigc++/retype_return.h sigc++/slot.h.m4, + sigc++/compatibility.h: + New files to complete compatibility module. + Split content of compatibility.h.m4 among the new files. + * sigc++/compatibility.h.m4: Removed. + * Makefile.am: Build and distribute new files. + * tests/test_compatibility.cc: Test new stuff. + + Fixes: + * sigc++/functors/slot.h.m4: Fix copy constructor and + operator=() of slot template. + * sigc++/adaptors/bind.h.m4: Fix deduce_result_type + template specializations. bind<0>() probably compiles + with gcc-3.3, now. + +2003-10-26 Martin Schulze <teebaum@cvs.gnome.org> + + Fixes: + * sigc++/functors/slot.{cc,h.m4}: + - Fix notification process: don't defer detaching of a + slot from all referred trackables during signal emission! + - Size optimization: replace virtual functions from + struct typed_slot_rep with function pointers in slot_rep + (reduces size of a typical typed_slot_rep instantiation + by 30% !!!). + * tests/test_slot.cc: Test sigc::slot more thoroughly. + * sigc++/functors/mem_fun.h.m4: Fix visit_each(). + * sigc++/adaptos/bind_return.h.m4: Add support for + sigc::ref(). + * tests/test_bind_return.cc: Use sigc::ref(). + * sigc++/signal.h.m4: Avoid compiler warning about + uninitialized variable r_ in emit(). + * sigc++/visit_each.h: Cleanup. + + API additions: + * sigc++/adpators/lambda/operators.h.m4: Add + lambda actions sigc::{reinterpret,static,dynamic}_cast_ + to support explicit parameter conversion. + * tests/test_lambda.cc: Test sigc::static_cast_. + * sigc++/adaptors/retype_return.h.m4: New file adding + adaptor retype_return (and hide_return). + * sigc++/Makefile.am: Build and distribute new file. + * tests/test_retype_return.cc: New file testing + adaptor retype_return (and hide_return). + * tests/Makefile.am: Build and distribute new test case. + +2003-10-25 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/visit_each.h: Remove disturbing + limit_derived_target<>::operator() overloads. + * sigc++/adaptors/bind.h.m4: Add support for sigc::ref(). + * tests/test_bind.cc: Test sigc::ref(). + * sigc++/adaptors/lambda/{operator,group,base}.h.m4: + - Move support for sigc::ref() from lambda_core<> into + lambda operator and lambda group creator functions. + - Add missing visit_each() overload for lambda<> template. + * tests/test_lambda.cc: Test auto-disconnection. + TODO: Fix a strange bug that leads to "Bus error" + during auto-disconnection. + +1.9.10: + +2003-10-23 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.10. + * NEWS: Add ChangeLog summary for version 1.9.10. + +2003-10-23 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functors/{functor_trait,slot}.h.m4: + Move definition of struct nil into functor_trait.h. + +2003-10-23 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Disable typeof() compiler checks. + * sigc++/adaptors/bind.h.m4: Remove unnecessary + deduce_result_type<> template specializations. + +2003-10-20 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors/compose.h.m4: + Correct order of typedefs for good. (Patch from Jeff Franks.) + +1.9.9: + +2003-10-20 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/connection.h: Add constructor that takes + a sigc::slot_base& to support 3rd-party slot lists + like they are used in glibmm/gtkmm. + * sigc++/functors/slot.h.m4: Make sigc::slot::call_type public. + (Fixes compile problems reported by Jeff Franks.) + * sig++/type_traits.h: Don't use long long in + sigc::is_base_and_derived. + (Fixes compile problems reported by Jeff Franks.) + * sigc++/adaptors/{bind,compose,hide,exception_catch}.h.m4: + Correct order of typedefs. (Repoted by Jeff Franks.) + * configure.ac: Bump version number to 1.9.9. + * NEWS: Add ChangeLog summary for version 1.9.9. + +1.9.8: + +2003-10-19 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functors/slot.h.m4: Define doxygen group functors. + * configure.ac: Bump version number to 1.9.8. + * NEWS: Add ChangeLog summary for version 1.9.8. + +2003-10-19 Martin Schulze <teebaum@cvs.gnome.org> + + * NEWS: Add announces of versions 1.9.6 and 1.9.7. + * sigc++/compatibility.h.m4: New file. Defines namespace SigC. + namespace SigC should be API compatible to libsigc++-1.2. + * sigc++/Makefile.am: Build compatibility.h. + * tests/test_compatibility.cc, tests/Makefile.am: + Add test case for compatibility module. + * docs/index.html: Change group names. + * sigc++/sigc++.h: Include connection.h. + * sigc++/connection.{cc,h}: + - Rename dependency to destroy_notify_callback. + - Change parameter name in set_slot() from d to data. + - Fix operator=(): Add "return *this;" + - Get rid of namespace functor. + - Corrections in documentation. + * sigc++/signal.{cc,h.m4}: + - Add reference counter to signal_impl. Replaces "bool destroy_". + - Move signal_base, slot_iterator[_buf], slot_list out of + namespace internal. They are part of the public API. + - Add convenience function signal#::make_slot(). + - Get rid of namespace functor. + - Corrections in documentation. + * sigc++/trackable.{cc,h}: + - Rename dependency to destroy_notify_callback. + - Rename trackable::clear() to trackable::notify_callbacks(). + - Corrections in documentation. + * sigc++/type_traits.h: Add documentation. + * sigc++/visit_each.h: + - Get rid of namespace functor. + - Add documentation. + * sigc++/adaptors[/lambda]/*: Get rid of namespace functor. + * sigc++/functors/{functor_trait.h,ptr_fun.h.m4,mem_fun.h.m4}: + - Get rid of namespace functor. + - Corrections in documentation / add documentation. + * sigc++/functors/slot.{cc,h.m4}: + - Move slot_base out of namespace internal. It's public API. + - Get rid of one-letter-parameter-names. + - Get rid of namespace functor. + - Corrections in documentation. + * tests/*.cc: Get rid of "using namespace ...". + +2003-09-10 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors/lambda/{base,operators}.h.m4: + Add subscript ([]) and assign (=) operator. I think there are now + enough operators available to make any future power user happy. + The only one missing is the comma operator and if we added it + the logical consequence would be to also add if(), switch(), do(), + etc. lambda expressions which are really out of place in libsigc++. + * sigc++/type_traits.h: Fix is_base_and_derived<> for const types. + * tests/test_lambda.cc: Test new operators. + +1.9.7: + +2003-09-05 Martin Schulze <teebaum@cvs.gnome.org> + + * configure.ac: Bump version number to 1.9.7. + +2003-09-03 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors/lambda/operator.h.m4: + - Restructure so that the size of the generated source file stays + reasonable for 34 operators: There are only two lambda templates + lambda_operator and lambda_operator_unary. The action is an additional + template parameter. A small template lambda_action[_unary] is specialized + for all actions. + - Add most operators that boost::lambda supports. Missing operators are + "=", "[]", "," and support for pointer arithmetic. I don't know if it's + worth adding these. In libsigc++, the purpose of lambda operators is to + provide some extra functionality for the group adaptor. + * tests/test_lambda.cc: + Test pre-increment, address and dereference operator. + +2003-08-31 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/reference_wrapper.h, sigc++/type_traits.h, sigc++/Makefile.am: + New file reference_wrapper.h provides ref() to specify that adaptors/lambdas + should take a reference to the object passed into ref() instead of a copy. + * tests/test_lambda.cc: + - Test group() with mem_fun(). + - Use ref() where lambdas should store references to objects. + - Test var() and constant(). + * sigc++/adaptors/lambda/base.h.m4: + - Support ref() in return type deduction. + - Add var() and constant() which create lambdas for usage with lambda operators. + * sigc++/adaptors/lambda/operator.h.m4: + - Fix return type deduction. + - Remove operator{+,-,*,...} overloads added on 2003-08-29. ref() is way cleaner. + * sigc++/adaptors/lambda/group.h.m4, + sigc++/adaptors/bind.h.m4, sigc++/adaptors/compose.h.m4, + sigc++/adaptors/exception_catch.h.m4, sigc++/adaptors/hide.h.m4: + Fix return type deduction. + +2003-08-29 Martin Schulze <teebaum@cvs.gnome.org> + + * tests/test_lambda.cc: Add more tests. + * sigc++/adaptors/lambda/select.h.m4, sigc++/adaptors/lambda/lambda.cc.m4: + Make _1, _2, ... constant. + * sigc++/adaptors/lambda/operator.h.m4: + Add operator{+,-,*,...} overloads to distinguish between const and non-const objects. + Store references to non-const objects rather than copies. + This allows expressions like e.g. std::cout << _1. + * sigc++/adaptors/lambda/base.h.m4, sigc++/adaptors/lambda/group.h.m4: + Remove void specializations. Functors returning void are tested and work fine. + +2003-08-27 Martin Schulze <teebaum@cvs.gnome.org> + + * tests/test_callof.cc, tests/test_deduce_result_type.cc: + Rename, correct and improve this test case. + * tests/Makefile.am: Build and run test_deduce_result_type + instead of test_callof. + +2003-08-27 Martin Schulze <teebaum@cvs.gnome.org> + + * Update TODO. + +2003-08-27 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors/hide.h.m4: Remove usage of callof_ignore_arg<>. + * sigc++/callof.h.m4, sigc++/adaptors/deduce_result_type.h.m4, + sigc++/functors/functor_trait.h.m4: + Remove the first and move deduce_result_type templates from + functor_trait.h.m4 into new file deduce_result_type.h.m4. + * sigc++/Makefile.am, sigc++/sigc++.h, sigc++/adaptors/adaptor_trait.h.m4: + Build and include sigc++/adaptors/deduce_result_type.h instead of callof.h. + * sigc++/functors/slot.h.m4: Document struct nil. + +2003-08-24 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functors/functor_trait.h.m4: Simplify usage of convenience + macro SIGC_FUNCTORS_HAVE_RESULT_TYPE: + namespace sigc{ namespace functor{ SIGC_FUNCTORS_HAVE_RESULT_TYPE }} + +2003-08-24 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functors/functor_trait.h,m4, sigc++/adaptors[/lambda]/*.h.m4: + Merge adaptor return type deduction and typeof() into + sigc::functor::deduce_result_type. Use it for all adaptors. + * tests/test_compose.cc: Only test multi-type get-functor if + typeof() if supported. + +2003-08-24 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/adaptors[/lambda]/*.h.m4: + - Remove unnecessary void specializations. In fact, only the one + for sigc::functor::exception_catch<> is needed and I don't really + understand why. For the lambda stuff the void specializatoins are + just commented out at the moment. + - Make typeof() optional. Surprisingly, I got the lambda stuff working + without typeof()! The test suite doesn't catch all cases yet, so maybe + some thing are still not working. + TODO: Implement configure check. + * tests/test_bind.cc, tests/test_compose.cc tests/test_exception_catch.cc, + tests/test_hide.cc, tests/test_lambda.cc: + Only test multiple functor return types if typeof() is supported. + +2003-08-06 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/trackable.{cc,h}: Add function trackable::clear(). + +2003-06-24 Andreas Rottmann <rottmann@users.sourceforge.net> + + * TODO: Minor tweaks. + +2003-06-23 Andreas Rottmann <rottmann@users.sourceforge.net> + + * docs/reference/Doxyfile.in: Use these variables. + * docs/reference/Makefile.am (html/index.html): Provide doxygen + with SRCDIR and TOP_SRCDIR environment variables. + + * sigc++/functors/slot.h.m4: Make slot::call_type typedef public; + this fixes a g++ 3.3 error in signal.h. + + * sigc++/signal.h.m4: Make the signal::accumulated class public; + this fixes a g++ 3.3 error in test_accumulated.cc. + +2003-06-15 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/functor/slot.h.m4: Correct typing error in docs. + * sigc++/functor/ptr_fun.h.m4: Document the whole thing. + +2003-05-31 Murray Cumming <murrayc@usa.net> + + * Reference documentation: Rearranged the groups to make it all + a bit more like the libsigc++ 1.2 reference documentation. + Corrected some spelling and grammar too. + This needs a lot of work. The text is very hard to read and it's + generally not appropriate for a user of the code who doesn't + care about the internals. But it's not impossible - our examples + should show us what we need to say in the documentation. + We probably need some more groups for the extra stuff, like we do + in libsigc++ 1.2. + +2003-05-29 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/signal.h.m4: Fix documentation. + * sigc++/connection.h, sigc++/functor/slot.h.m4: + Document the whole thing. + +2003-05-29 Martin Schulze <teebaum@cvs.gnome.org> + + * sigc++/signal.h.m4: + - Remove bogus operator() from unnumbered signal<> and + signal<>::accumulated templates. + - Document the whole thing. + + * docs/index.html: Fix some links. + +2003-04-06 Martin Schulze <MHL.Schulze@t-online.de> + + * TODO, configure.ac, Makefile.am, docs/*: + Add Doxygen framework. + +2003-04-06 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/callof.h.m4, sigc++/adaptors/*, tests/test_callof.cc: + Move sigc::callof<> to sigc::functor::internal::callof<>. + + * sigc++/functors/mem_fun.h.m4, tests/test_mem_fun.cc: + Add new types [bound_][const_]volatile_mem_functor, visit_each() + and mem_fun() overloads for volatile qualifier. + Add ctor overloads in bound_*mem_functor and mem_fun() overloads + that take reference instead of pointer. + +2003-03-26 Martin Schulze <MHL.Schulze@t-online.de> + + * Change "closure" to "slot" throughout sigc++2 (file names, + class names, member variables, documentation, etc.). + +2003-03-26 Martin Schulze <MHL.Schulze@t-online.de> + + * TODO: Rewrite to reflect recent changes as well as recent discussions. + +2003-03-24 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/adaptors/bind_return.h.m4: Make the adaptor's data member + public so that visit_each() can access it. + + * sigc++/adaptors/lambda/*.h.m4: More fixes. Add a note about + malfunctioning typeof() (probably compiler bug in gcc-3.2). + + * tests/*.cc: Test references. Fix compose equivalent in test_lambda. + +2003-03-24 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/Makefile.am, sigc++/functors/functor_trait.h[.m4], + sigc++/adaptors/adaptor_trait.h.m4: Move detection of function + and member method pointers' return types from adaptor_trait into + functor_trait. (We'll use functor_trait rather than adaptor_trait for + our lambda stuff.) functor_trait.h needs to be generated from .m4 now. + + * sigc++/functors/functor_trait.h.m4: Add convenience macros: + - SIGC_FUNCTORS_HAVE_RESULT_TYPE indicates that the existance of + T_functor::result_type should be assumed for all unknown functors. + - SIGC_FUNCTOR_TRAIT(T_functor, T_result) explicitly specifies the + result type of a functor. + ("typename functor_trait<T_functor>::result_type") is used to + determine the return type of our adaptors' operator()() overloads. + + * sigc++/adaptors/[lambda/]*.h.m4: Various fixes in visit_each() and + operator()() overloads to make these operator()() overloads usable. + Most of them were just commented out before. Some adaptor types also + have void specializations, now. + + * sigc++/adaptors/lambda/group.h.m4: Change syntax from + "[some_functor] % grp([args])" to "group([some_functor], [args])" + like we agreed on the ml some time ago. + + * sigc++/tests/test_[all adaptors].cc: Test stuff that didn't work + before. + +2003-03-22 Murray Cumming <murrayc@usa.net> + + * Added pgk-config file, from a mystery person in bug #108857 + +2003-03-22 Martin Schulze <MHL.Schulze@t-online.de> + + * tests/test_bind.cc: Test and show how to use functor_trait + for user defined or 3rd-party functors so that a + bind<0>([functor],[arg1])() call with no arguments can return a value. + +2003-03-20 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/callof.h.m4: Add explanations. Comment in / create templates + callof_safe[#]. Unfortunately they don't work for functors with overloaded + operator() so we don't use it for now. At least everything is documented. + + * sigc++/functors/functor_trait.h, sigc++/functors/*.h.m4: Add back + functor_base compiler hint. We're using it now in adaptor_functor<>. + + * sigc++/adaptors/{adaptor_trait,bind}.h.m4: Make operator() overloads + with no arguments return the result of the functor invocation. + Fix multiple bind<0>(). + * tests/test_bind.cc: Test the stuff that's working now. + +2003-03-16 Murray Cumming <murrayc@usa.net> + + * Added sigc++/sigc++.h, like in libsigc++ 1.2 + * examples: Added member_method example, which uses a class method + and which demonstrates disconnection. + +1.9.6: + +2003-03-11 Andreas Rottmann <rottmann@users.sourceforge.net> + + * sigc++/Makefile.am: Use substitution references instead of + $(patsubst). Is shorter and fixes the strange-dirs-in-dist-tarball + bug. + +2003-03-09 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/connection.h: Add block() capability. + +2003-03-09 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/signal.{cc,h.m4}: Add flag signal_impl::destroy_ + and function signal_impl::destroy(). Use them to defer + the destruction of the signal_impl object during signal + emission. + + * tests/test_disconnect.cc: Add tests for the connection + class and for deleting signals during emission. + +2003-03-09 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/connection.{cc,h}, sigc++/Makefile.am: + - New files that add a connection class. Objects of this + class are constructed from closure list iterators and can + be used to disconnect the refered closure. As opposed to + iterators they stay valid beyond the lifetime of the closure. + +2003-03-09 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/functors/closure.{cc,h.m4}, sigc++/signal.cc: + - Rename closure_{base,rep}::[set_]dependency_ -> [set_]parent_. + - Make closure_rep inherit trackable. This allows for + connection objects that stay valid beyond the life time + of the refered closure. + - Make some one-line-functions inline again. + +2003-03-08 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/trackable.cc: BUGFIX in trackable_dep_list::clear() + +2003-03-08 Andreas Rottmann <rottmann@users.sourceforge.net> + + * sigc++/Makefile.am: Rewritten so we can build lambda cleanly. + * sigc++/Makefile.am_fragment: Removed. + + * sigc++/functors/Makfile.am: Removed. + * sigc++/adaptors/Makefile.am: Removed. + * sigc++/adaptors/lambda/Makefile.am: Removed. + * configure.ac (AC_OUTPUT): Remove the above Makefiles. + + * tests/Makefile.am: Re-included lambda test. + +2003-03-07 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/signal.{cc,h.m4}: + - signal_emit#<>: New templates replacing signal#<>::caller. + The purpose of these templates is implementing the emit + function and optimizing signal emission for the case that + no accumulator is used via template specializations. + - default_accumulator<>: Removed. The default for T_accumulator + in signal#<> now is nil. An example how to use accumulators + is available in tests/test_accumulator.cc. + - signal_{base,impl}: Move the implementation of signal_base's + interface to signal_impl. An object of this class is + dynamically allocated when first connecting a closure to + the signal. This drastically reduces the size of empty signals + and allows for future addition of a reference counter to make + it safe to delete a signal during emission. + - Directly work on closure_rep during signal emission. This + seems to be quicker than using the closure templates. + - Document the classes. Restructure the header file a bit. + + * sigc++/functors/closure.h.m4: Make closure_base::rep_ data + member public, so that signal emission can directly work on it. + + * tests/test_size.cc: Add an entry for signal_impl. + +2003-03-07 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/functors/closure.{cc,h.m4}: + - closure_base: BUGFIXES in ~closure_base() and operator=(). + - Mark some functions with the inline keyword. This seems to + help gcc 3.2 to optimize signal emission and (dis)connection. + - Document the classes. Restructure the header file a bit. + +2003-03-07 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/trackable.{cc,h}: Make trackable allocate a + trackable_dep_list object dynamically when adding the first + dependency. (This reduces the size of objects, that are not + refered by a closure by 4 bytes (50%) and increases the size + of objects that are refered by a closure by 4 bytes (50%) + on a 32 bit architecture => This reduces total memory use + when >50% of the trackables are not refered by a closure.) + Document the classes. + +2003-03-05 Martin Schulze <MHL.Schulze@t-online.de> + + * tests/Makefile.am, tests/test_size.cc, tests/test_accumulated.cc: + Add two test cases. test_size is showing the size of public and + internal structures. (Which apart from empty signals are smaller + than the sizes of the equivalent libsigc++-1.2 structures.) + test_accumulated is a test for the template signal<>::accumulated<> + at the same time showing the use of accumulators in libsigc++2. + + * Offtopic: My note about binary sizes from 2003-02-10 is wrong. + Stripped libsigc++2 test binaries are about 8-10k in size. + +2003-03-05 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/visit_each.h: BUGFIX in template specialization + limit_derive_target<T_Target*,T_action>::with_type<false,T_type>: + Add non-const overloads for static void execute_() avoiding + compile time errors. + +2003-02-16 Martin Schulze <MHL.Schulze@t-online.de> + + * tests/Makefile.am, tests/test_disconnect.cc: + Add testcase with a mixed connection & disconnection sequence. + +2003-02-16 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/signal.cc: Bugfix in signal_base::insert(): + Set notification function in the newly created copy of + slot_ rather than in slot_ itself. + +2003-02-10 Martin Schulze <MHL.Schulze@t-online.de> + + * sigc++/signal.h.m4: Comment in typedefs for iterator types in + the signal#<> class template. Make signal#<>::connect() return an + iterator for convenience. + (Note that the first change increases the binary size of + tests/test_signal from 201k to 204k, the second change to 206k.) + +2003-01-23 Murray Cumming <murrayc@usa.net> + + * sigc++/adaptors/lambda is disable temporarily (not built and + not distributed) because it gets built before its parent + directory, but #includes generated sources in the parent directory. + +2003-01-22 Murray Cumming <murrayc@usa.net> + + * Added Andreas Rottman's example. + +2003-01-22 Murray Cumming <murrayc@usa.net> + + * Applied Andreas Rottman's make dist fixes. + +2003-01-14 Murray Cumming <murrayc@usa.net> + + * Added whitespace to make the code more readable. + diff --git a/libs/sigc++2/INSTALL b/libs/sigc++2/INSTALL new file mode 100644 index 0000000000..a4b34144dc --- /dev/null +++ b/libs/sigc++2/INSTALL @@ -0,0 +1,229 @@ +Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/libs/sigc++2/Makefile.am b/libs/sigc++2/Makefile.am new file mode 100644 index 0000000000..03d67389c6 --- /dev/null +++ b/libs/sigc++2/Makefile.am @@ -0,0 +1,30 @@ + +# it includes all the autostuff automatically, you just name the +# other stuff here +EXTRA_DIST = autogen.sh sigc++config.h.in libsigc++-2.0.spec.in +# ACLOCAL_FLAGS = -I scripts + +SUBDIRS = sigc++ +DIST_SUBDIRS = $(SUBDIRS) + +sigc_configdir = $(libdir)/sigc++-2.0/include +sigc_config_DATA = sigc++config.h + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = sigc++-2.0.pc + +all-local: + @echo "*** Everything completed ***" + +dist-hook: + @echo; echo; \ + echo "**********************************************************"; \ + echo "* IMPORTANT NOTICE: *"; \ + echo "* *"; \ + echo "* Be sure you have done a complete build before running *"; \ + echo "* 'make dist' or 'make distcheck', because otherwise *"; \ + echo "* the tarball will _not_ contain the dependency rules *"; \ + echo "* generated by the compiler. *"; \ + echo "**********************************************************"; \ + echo; echo \ + cp libsigc++-2.0.spec $(distdir) diff --git a/libs/sigc++2/NEWS b/libs/sigc++2/NEWS new file mode 100644 index 0000000000..83c29f5626 --- /dev/null +++ b/libs/sigc++2/NEWS @@ -0,0 +1,232 @@ +*** libsigc++ 2.0: + +libsigc++ implements a typesafe callback system for standard C++. It +allows you to define signals and to connect those signals to any +callback function, either global or a member function, regardless of +whether it is static or virtual. + +libsigc++ is used by gtkmm to wrap the GTK+ signal system. It does not depend +on GTK or gtkmm. + +libsigc++ 2.0 uses modern C++ mechanisms to achieve a highly flexible, +yet typesafe callback system. It supports all features of libsigc++ 1.2 +and improves upon it with a simpler and more powerful API. + +This version of libsigc++ needs GNU g++ 3.2 or higher to compile. + + +*** ChangeLog summary: + +2.0.6: + +* Fixed a memory leak in sigc::slot. +* Fixed compilation for gcc-3.4. +* Fixed compilation for Intel C++ compiler (upgraded libtool). +* Fixed project files for MSVC .Net (Timothy M. Shead). +* Fixed segfaults when compiled with MSVC .Net 2003 (moved + all calls to new and delete into non-inline library code). +* In the compatibility module use correct bound_mem_functor + variants for const (volatile) methods when creating a slot. +* Minor documentation fix. +* Resolved bugs: #152327 #148744 #152323 #151404 #153143 + +2.0.5: + +* Distribute pregenerated configuration header for MSVC .Net. + +2.0.4: + +* Fixed warnings and compiler errors in the test cases. +* Added a new test case (Murray Cumming). +* Fixed 'hello_world' example. +* Don't test optional features that fail with the Sun FORTE. +* Fixes for the Sun FORTE to compile out-of-the-box + (Damien Carbery, Murray Cumming, Martin Schulze). +* Fixes for MSVC to build a DLL out-of-the-box (James Lin). +* Improved compiler specific configuration during 'configure'. +* Added rmp description file libsigc++-2.0.spec (Eric Bourque). +* Minor documentation improvements (Murray Cumming). +* Resolved bugs: #147311 #147313 #147391 #144846 #145541 + +2.0.3: + +* Fix segfault on emission of unconnected signal. +* Test emission of unconnected signals in the test case. +* Suppress compiler warning at dynamic_cast<>-test for good. + (Help from Christof Petig and Timothy M. Shead.) + +2.0.2: + +* Suppress compiler warning in compatibility module at + dynamic_cast<>-test (fix suggested by Timothy M. Shead). +* If a custom accumulator is specified invoke it on signal + emission even if the signal's slot list is empty. (This used + to be the case in libsigc++-1.2 as pointed out by Timothy.) + +2.0.1: + +* Fixed serious bug in reference counting in sigc::signal_base::impl(). +* Fixed SigC::Object-derivation check in SigC::slot() compatibility module. +* Fixed compilation on Apple gcc 3.3 (assisted by Spundun Bhatt). +* Fixed configure check for gcc 3.4 (Murray Cumming). + +2.0.0: + +* Implemented sigc::connection::blocked() (Murray Cumming). +* Added the scripts directory to the make dist target (Murray Cumming). +* Added more documentation (Martin Schulze). + +1.9.16: + +* Fixed compiler warning in sigc::connection (Alexander Nedotsukov, Murray Cumming). +* Fixed examples and made them part of the regular build (Murray Cumming). +* Added header sigc++config.h for configure time checks (Murray Cumming). +* Added configure time checks to determine the correct syntax + for explicit template method specializations (Murray Cumming). +* Removed code using partial specializations of overloaded template methods + from test cases. SUN Forte doesn't support this feature (Martin Schulze). +* Fixed compilation for gcc 3.4 (Murray Cumming). + +1.9.15: + +API additions: +* Add numbered slot# templates. +* Allow for methods of the object's base types to be passed into sigc::mem_fun(). + +Other fixes and cleanups: +* Make is_base_and_derived template compatible with the SUN Forte. +* Non-template code moved from .m4 macro source to .h/.cc files (Murray Cumming). +* Implementation moved to .cc files (Murray Cumming). +* More fixes for the SUN Forte. Make some more ctors explicit. + +1.9.14: + +* Added sigc::slot_base::operator bool() (Murray Cumming). +* Build docs directory by default (Murray Cumming). +* Fixed minor doxygen issues (Murray Cumming). +* Fixed compiler warning in signal.h (Murray Cumming). + +1.9.13: + +* Fixed passing references through sigc::slot (Reported by Jeff Franks). +* Enabled binding of objects to method slots through sigc::bind(). +* Reworked sigc::bind() API: Made the template argument for the + parameter position zero-based and optional. Added overloads for + binding of up to 7 arguments at a time when no position is specified. +* Reworked sigc::hide() API: Made the template argument for the + parameter position zero-based and optional. +* Fixed compilation problems with MSVC .Net 2003 (Roel Vanhout). +* Distribute MSVC .Net 2003 project files in the tarballs. +* Improved and extended documentation. +* Minor cleanups. + +1.9.12: + +* Added adaptor retype(). With this final API addition all adaptors + are in place that are available in libsigc++-1.2. +* Added negation lambda operator. Use STL names for lambda actions. +* Remove formerly disabled support for gcc extension typeof(). +* Added project files for MS Visual Studio .Net 2003. (Roel Vanhout) +* Make libsigc++2 compile with .Net 2003. (Roel Vanhout, Martin Schulze) +* Build shared version of libsigc++2 by default. (Cedric Gustin) +* Add support for win32 platform. (Cedric Gustin) +* Install .m4 files. (requested by Ron Steinke) +* Cleaned up functors. +* Restructured and completed documentation of the core library parts. + +1.9.11: + +API Additions and important bug fixes: +* Compatibility module completed. libsigc++-1.2 filenames are preserved. +* Fixed critical bug in auto-disconnection: don't defer detaching + of a slot from all referred trackables during signal emission. +* Reduced size of slots significantly. +* Fixed support for sigc::ref() in adaptors. +* Fixed sigc::visit_each(): only hit targets that are passed by + reference; pass bound members in bound_member_functor by reference. +* Add lambda actions sigc::{reinterpret,static,dynamic}_cast_ + to support explicit parameter conversion. +* Add adaptors sigc::retype_return<>() and sigc::hide_return(). + +Minor fixes: +* Fixed return type deduction for bind<0>. + libsigc++-1.9.11 should compile with gcc-3.3. +* Fixed copy constructor and operator=() of slot template. +* Fixed a compiler warning in signal_emit#<>::emit(). +* Improved test case. + +1.9.10: + +* Fix compiler issues with gcc-3.3.2 (patch from Jeff Franks). +* Remove compiler check for the gcc extension typeof(). +* Simplify bind_functor templates. +* Move definition of struct nil into functor_trait.h. + +1.9.9: + +* Add a constructor to sigc::connection that takes a slot_base& + to support user defined slot lists like they are used in gtkmm. +* Fix compiler issues with gcc-3.3.2 (reported by Jeff Franks). + +1.9.8: + +* Add compatibility module that defines namespace SigC. + namespace SigC should be API compatible to libsigc++-1.2. + Currently only the core parts of the library are supported. + Adaptors are still to follow. +* Fix connection::operator=(). Include connection.h in sigc++.h. +* Get rid of namespace functor. +* Rename dependency to destroy_notify_callback. +* Rename trackable::clear() to trackable::notify_callbacks(). +* Move slot_base, signal_base, slot_iterator[_buf], slot_list + out of namespace internal. They are public API. +* Add reference counter to signal_impl enabling signals + to share the underlying information. +* Add convenience function signal#::make_slot(). +* Get rid of one-letter-parameter-names. +* Get rid of "using namespace ..." in the test cases. +* Add lambda operators subscript ([]) and assign (=). +* Fix is_base_and_derived<> for const types. +* New and updated documentation. +* Add previous announces to file NEWS. + +1.9.7: + +* Added sigc++/sigc++.h. (Murray Cumming) +* Added member_method example. (Murray Cumming) +* Renamed closure to slot. +* Fixed issues with gcc-3.3. (Adreas Rottmann) +* Removed unnecessary void specializations. +* Made adaptors' operator()() (overload with no arguments) return a value. +* Made visit_each() support adaptors. +* Overhauled return type deduction to make it work without typeof(). +* Added convinience macros SIGC_FUNCTORS_HAVE_RESULT_TYPE and +SIGC_FUNCTOR_TRAIT(T_functor, T_result) to make return type deduction system +support 3rd-party funtors. +* Changed syntax of group adaptor from "[functor] % grp([lambdas])" to "group +([functor], [lambdas])". +* Made many fixes to lambda functionality. +* Added var() and constant() lambda creators. +* Added many lambda operators. +* Added ref() which creates a reference wrapper to enable storage of +references in bind and group adaptors. +* Expanded test suite. +* Added documentation. (Corrections by Murray Cumming) + +1.9.6: + +* First public release of the unstable 2.0 generation. + libsigc++ 2.0 uses modern C++ mechanisms to achieve a highly + flexible, yet typesafe callback system. It supports all features of + libsigc++ 1.2 and improves upon it by: + - No need to specify the number of arguments in signal definitions. + - Connection of any compatible (=implicitly convertable) functor + to a signal. + - Implicit type conversions of parameters during signal emission. + - Lambda adaptor for complete restructuring of functor parameter + lists in one line (subject to changes). + - Signal has a fully featured stl style list interface. + - A convinient accumulator API (replacing the old marshaller API). + - Removal of unnecessary memory management functionality. + - Lightweight class "trackable" for use as base class of your + class hierarchy replaces class "Object". diff --git a/libs/sigc++2/README b/libs/sigc++2/README new file mode 100644 index 0000000000..f90f8f055a --- /dev/null +++ b/libs/sigc++2/README @@ -0,0 +1,72 @@ +libsigc++ -- The Typesafe Callback Framework for C++ + + +General information: + + libsigc++ implements a typesafe callback system for standard C++. It + allows you to define signals and to connect those signals to any + callback function, either global or a member function, regardless of + whether it is static or virtual. + + libsigc++ is used by gtkmm to wrap the GTK+ signal system. It does not + depend on GTK or gtkmm. + + Further information about the major release 2.0 is available on the + libsigc++ project home page: http://libsigc.sourceforge.net/ + + +License information: + + Distribution of library and components is under the LGPL as listed in the + file COPYING. Examples and tests are Public Domain. + + +Contact information: + Maintainer: mailto: mschulze@cvs.gnome.org + Maillist: mailto: libsigc-list@gnome.org + Homepage: http://libsigc.sourceforge.net + Online reference documentation: http://libsigc.sourceforge.net/libsigc2/docs/ + Ftp: http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.0/ + CVS: + + +Overview of the distribution: + + docs/ documentation on the signal system + docs/reference/ reference documentation + + examples/ examples of various signal functions + + sigc++/ source for library + sigc++/macros/ .m4 files used to auto-generate source files + sigc++/functors/ source for library (various functors) + sigc++/functors/macros/ .m4 files used to auto-generate source files + sigc++/adaptors/ source for library (various adaptors) + sigc++/adaptors/macros/ .m4 files used to auto-generate source files + sigc++/adpators/lambda/ source for library (lambda library) + sigc++/adpators/lambda/macros/ .m4 files used to auto-generate source files + + scripts/ automake junk + + tests/ programs testing and verifying proper behaviour + + MSVC_Net2003/ project files for building the library with MSVC .NET 2003 + + +Compatibility: + + Compatible compilers must supports the following recent c++ techniques: + * Partial template (function) specialization. + * Explicit template (member) function instantiation. + * Treat void return as normal return. + + This release has only been tested with gcc-3.3. It should at least also compile with: + * gcc >= 3.2 + * cygwin (gcc >= 3.2) + * mingw32 + * Microsoft Visual Studio .Net 2003 + * Sun Forte C++ compiler >= 5.5 + * Compaq C++ compiler + * Intel compiler + Please report any troubles you encounter with these compilers! + You are also invited to try a compiler that is not listed above. diff --git a/libs/sigc++2/SConscript b/libs/sigc++2/SConscript new file mode 100644 index 0000000000..a9d5649e7b --- /dev/null +++ b/libs/sigc++2/SConscript @@ -0,0 +1,13 @@ +import glob +import os + +sigc2_files = glob.glob('sigc++/*.cc') + glob.glob('sigc++/functors/*.cc') + glob.glob('sigc++/adaptors/lambda/*.cc') + +Import('env') +sigc2 = env.Copy() + +sigc2_configure_script = sigc2.Command ('configure', 'configure.ac', 'cd libs/sigc++2; ./autogen.sh; cd -', ENV=os.environ) +sigc2_config_h = sigc2.Command('sigc++config.h', [sigc2_configure_script, 'sigc++config.h.in'], 'cd libs/sigc++2; ./configure; cd -', ENV=os.environ) + +libsigc2 = sigc2.StaticLibrary('sigc++2', sigc2_files) +Default([sigc2_config_h, libsigc2]) diff --git a/libs/sigc++2/TODO b/libs/sigc++2/TODO new file mode 100644 index 0000000000..7ea792aeb0 --- /dev/null +++ b/libs/sigc++2/TODO @@ -0,0 +1,66 @@ +Compatibility: + +- Fix compilation for SUN FORTE C++ 5.5. + + +Configure checks and Makefile issues: + +- When you use a single Makefile.am for + several directories (in sigc++2, all under sigc++/ is ruled by a + single Makefile.am with the new build system), you have a problem when + you do a build where $(srcdir) != $(builddir), since in the build-tree + the necessary subdirectories are not created. So I have to find a + place where to create this directories, in case they do not exist. + This is only an issue for clean CVS checkouts, however (Andy) + + +sigc++-1.2 compatibility: + +- Verify completeness. + + +documentation: + +- Improve documentation: Make groups (see index.html). Exclude stuff to make + the html output readable. + +- Add documentation for adaptors and accumulators. + + +basic functionality: + +- I don't understand what is meant by "stl-pointer-like functions" (Martin): + + slot should have the full set of stl pointer like functions. (Karl Nelson) + + +lambda functionality (I don't understand this (Martin)): + +- Add support for _R to force references down into + the stack frame of lambda. Ie. + + A a; + (_1+_2)(1,a); // fail if no "operator int() const" + +- Call groups in lambda. (Huh, that appears to be in group?) + + +Old TODO's that should be almost finished (Martin): + +- Fine-tooth comb the code looking for missing operator =() function + and missing copy constructors. + +- Improve and expand the test suite. There are a lot of combinations which + should be valid but haven't been tested which are likely to result in + wierd compiler errors if something wasn't done consistantly. + + +Old TODO's that should be finished (Martin): + +- Improve signal#, it currently is just barely functional. +- Add iterator support and stl like functionality to signal. + +- Add blocking capablity to slot. + +- Deinline/move to .cc where possible to move functions into the + library to reduce resulting binary size. diff --git a/libs/sigc++2/autogen.sh b/libs/sigc++2/autogen.sh new file mode 100755 index 0000000000..c58ddd27a2 --- /dev/null +++ b/libs/sigc++2/autogen.sh @@ -0,0 +1,18 @@ +#! /bin/sh + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +echo "Adding libtools." +libtoolize --automake --copy --force + +echo "Building macros." +aclocal -I "$srcdir/scripts" $ACLOCAL_FLAGS + +echo "Building makefiles." +automake --add-missing --copy + +echo "Building configure." +autoconf + +rm -f config.cache diff --git a/libs/sigc++2/configure.ac b/libs/sigc++2/configure.ac new file mode 100644 index 0000000000..14c0ee6a7f --- /dev/null +++ b/libs/sigc++2/configure.ac @@ -0,0 +1,64 @@ +dnl Configure.in +dnl +dnl Source for generating compiler independent libraries. +dnl + +dnl INIT is required name a file which is unique to the package +dnl just to prevent someone from copying the configure to the wrong package. +AC_INIT(sigc++) + +dnl This version stuff is just for the packaging section of the tool. +dnl thus make format_package-0.0.1.tar.gz +FP_MAJOR_VERSION=2 +FP_MINOR_VERSION=0 +FP_MICRO_VERSION=6 +FP_VERSION=$FP_MAJOR_VERSION.$FP_MINOR_VERSION.$FP_MICRO_VERSION + +dnl For automake. +VERSION=$FP_VERSION +PACKAGE=libsigc++ + +dnl Initialize automake stuff +AM_INIT_AUTOMAKE($PACKAGE, $VERSION) + +dnl Specify a configuration file: +AC_CONFIG_HEADER(sigc++config.h) + +dnl disable autoheader +AUTOHEADER=':' + +dnl Maintainer support (autodependencies and packaging) +AM_MAINTAINER_MODE + +dnl Using C compiler +AC_PROG_CC +AC_PROG_CPP + +dnl Using libtool +AC_CONFIG_MACRO_DIR(scripts) +LT_INIT +dnl AM_PROG_LIBTOOL + +dnl Using C++ compiler +AC_PROG_CXX +AC_LANG_CPLUSPLUS + +SIGC_CXX_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD() + +if test "X$config_error" = "Xyes" ; then + AC_ERROR( +[One or more of the required compiler features is missing. +If you believe this is in error, please consult the config.log file +for further details. +]) +fi + + +# Generate output +AC_OUTPUT([ + Makefile + sigc++-2.0.pc + + sigc++/Makefile + libsigc++-2.0.spec +]) diff --git a/libs/sigc++2/libsigc++-2.0.spec.in b/libs/sigc++2/libsigc++-2.0.spec.in new file mode 100644 index 0000000000..7dc756c6ce --- /dev/null +++ b/libs/sigc++2/libsigc++-2.0.spec.in @@ -0,0 +1,91 @@ +Summary: The Typesafe Signal Framework for C++ +Name: @PACKAGE@ +Version: @VERSION@ +Release: 1 +License: LGPL +Group: System Environment/Libraries +Packager: Eric Bourque <ericb@computer.org> +URL: http://libsigc.sourceforge.net/ +Source0: http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.0/%{name}-%{version}.tar.bz2 +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root + +%description + +This library implements a full callback system for use in widget +libraries, abstract interfaces, and general programming. Originally +part of the Gtk-- widget set, %name is now a seperate library to +provide for more general use. It is the most complete library of its +kind with the ablity to connect an abstract callback to a class +method, function, or function object. It contains adaptor classes for +connection of dissimilar callbacks and has an ease of use unmatched by +other C++ callback libraries. + +Package GTK-- (gtkmm), which is a C++ binding to the GTK+ library, +starting with version 1.1.2, uses %name. + +Due to C++ ABI changes, this will only work with the gcc version which +the distribution was supplied with. If you got your rpm from any +previous version, please rebuild from spec! + +%package devel +Summary: Development tools for the Typesafe Signal Framework for C++ +Group: Development/Libraries +Requires: %name = %version + +%description devel +The %name-devel package contains the static libraries and header files +needed for development with %name. + +%package examples +Summary: Examples and tests for the Typesafe Signal Framework for C++ +Group: Development/Libraries +Requires: %name-devel = %version + +%description examples +The %name-devel package contains source code of +example and test programs for %name. + + +%prep +%setup -q + +%build +./configure --prefix=/usr +make + +%install +rm -rf $RPM_BUILD_ROOT +make DESTDIR=$RPM_BUILD_ROOT install +mkdir -p -m 755 $RPM_BUILD_ROOT/%{_libdir}/sigc++-2.0 +cp -a examples tests $RPM_BUILD_ROOT/%{_libdir}/sigc++-2.0 + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%defattr(-,root,root,-) +%{_libdir}/libsigc*.so* +%doc /usr/share/doc/libsigc-2.0 + +%files devel +/usr/include/sigc++-2.0 +%{_libdir}/pkgconfig/* +%{_libdir}/libsigc*.a +%{_libdir}/libsigc*.la +%dir %{_libdir}/sigc++-2.0 +%dir %{_libdir}/sigc++-2.0/include +%{_libdir}/sigc++-2.0/include/sigc++config.h + +%files examples +%{_libdir}/sigc++-2.0/examples +%{_libdir}/sigc++-2.0/tests + +%changelog +* Tue Jun 29 2004 Eric Bourque <ericb@computer.org> - 2.0-1 +- Initial build. + diff --git a/libs/sigc++2/scripts/cxx.m4 b/libs/sigc++2/scripts/cxx.m4 new file mode 100644 index 0000000000..8753b53827 --- /dev/null +++ b/libs/sigc++2/scripts/cxx.m4 @@ -0,0 +1,94 @@ +dnl +dnl SIGC_CXX_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD() +dnl +dnl +AC_DEFUN([SIGC_CXX_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD],[ +AC_MSG_CHECKING([if C++ compiler supports the use of a particular specialization when calling operator() template methods.]) +AC_TRY_COMPILE( +[ + #include <iostream> + + class Thing + { + public: + Thing() + {} + + template <class T> + void operator()(T a, T b) + { + T c = a + b; + std::cout << c << std::endl; + } + }; + + template<class T2> + class OtherThing + { + public: + void do_something() + { + Thing thing_; + thing_.template operator()<T2>(1, 2); + //This fails with or without the template keyword, on SUN Forte C++ 5.3, 5.4, and 5.5: + } + }; +], +[ + OtherThing<int> thing; + thing.do_something(); +], +[ + sigcm_cxx_gcc_template_specialization_operator_overload=yes + AC_DEFINE([SIGC_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD],[1],[does the C++ compiler support the use of a particular specialization when calling operator() template methods.]) + AC_MSG_RESULT([$sigcm_cxx_gcc_template_specialization_operator_overload]) +],[ + sigcm_cxx_gcc_template_specialization_operator_overload=no + AC_MSG_RESULT([$sigcm_cxx_gcc_template_specialization_operator_overload]) +]) +]) +AC_DEFUN([SIGC_CXX_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD],[ +AC_MSG_CHECKING([if C++ compiler supports the use of a particular specialization when calling operator() template methods omitting the template keyword.]) +AC_TRY_COMPILE( +[ + #include <iostream> + + class Thing + { + public: + Thing() + {} + + template <class T> + void operator()(T a, T b) + { + T c = a + b; + std::cout << c << std::endl; + } + }; + + template<class T2> + class OtherThing + { + public: + void do_something() + { + Thing thing_; + thing_.operator()<T2>(1, 2); + //This fails with or without the template keyword, on SUN Forte C++ 5.3, 5.4, and 5.5: + } + }; +], +[ + OtherThing<int> thing; + thing.do_something(); +], +[ + sigcm_cxx_msvc_template_specialization_operator_overload=yes + AC_DEFINE([SIGC_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD],[1],[does the C++ compiler support the use of a particular specialization when calling operator() template methods omitting the template keyword.]) + AC_MSG_RESULT([$sigcm_cxx_msvc_template_specialization_operator_overload]) +],[ + sigcm_cxx_msvc_template_specialization_operator_overload=no + AC_MSG_RESULT([$sigcm_cxx_msvc_template_specialization_operator_overload]) +]) +]) diff --git a/libs/sigc++2/scripts/libtool.m4 b/libs/sigc++2/scripts/libtool.m4 new file mode 100644 index 0000000000..1ceda32823 --- /dev/null +++ b/libs/sigc++2/scripts/libtool.m4 @@ -0,0 +1,5767 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. +]) + +# serial 49 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_define([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# LT_INIT([OPTIONS]) +# -------------------------- +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([_LT_PROG_LTMAIN])dnl +AC_BEFORE([$0], [LT_LANG])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Set options +_LT_SET_OPTIONS([$1])dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# _LT_INIT + +# Old names: +AU_DEFUN([AC_PROG_LIBTOOL], [LT_INIT]) +AU_DEFUN([AM_PROG_LIBTOOL], [LT_INIT]) + + +# _LT_SETUP +# --------- +m4_define([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +AC_REQUIRE([AC_LIBTOOL_SYS_OLD_ARCHIVE])dnl +AC_REQUIRE([AC_LIBTOOL_SYS_MAX_CMD_LEN])dnl +AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl +AC_REQUIRE([AC_OBJEXT])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +AC_REQUIRE([AC_EXEEXT])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +ofile="$default_ofile" +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Use C for the default configuration in the libtool script +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# In libtool itself `ltmain.sh' is in the build tree, but everything else +# ships it in the source tree, for completeness, if we find a copy in the +# build tree use that before falling back to auxdir. +# +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +AC_DEFUN([_LT_PROG_LTMAIN], +[_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +case $ac_aux_dir in + $srcdir) ltmain=./ltmain.sh ;; + $srcdir/*) ltmain=`expr "$ac_aux_dir" : "$srcdir/\(.*\)"`/ltmain.sh ;; +esac +test -f "$ltmain" || ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# --------------------------------------------------- +m4_define([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([$1], [^ *], [# ])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [[, ]], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------- +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# ---------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# ---------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_quote(m4_if([$2], [], + m4_quote(lt_decl_tag_varnames), + m4_quote(m4_shift($@)))), + m4_split(m4_normalize(m4_quote(_LT_TAGS))))]) +m4_define([_lt_decl_varnames_tagged], [lt_combine([$1], [$2], [_], $3)]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$echo "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# <var>='`$echo "X$<var>" | $Xsed -e "$delay_single_quote_subst"`' +m4_define([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_define([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="[]_LT_TAGS[]"dnl +]) + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_define([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +m4_define([_LT_AC_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_define([_LT_CONFIG_COMMANDS], +[AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X${CDPATH+set}" = Xset; then CDPATH=${ZSH_VERSION+.}:; export CDPATH; fi + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ ]], lt_decl_quote_varnames); do + eval "lt_\$var=\\\\\\"\\\`\\\$echo \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ ]], lt_decl_dquote_varnames); do + eval "lt_\$var=\\\\\\"\\\`\\\$echo \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_echo in +*'\\\[$]0 --fallback-echo"')dnl " + lt_echo=\`\$echo "X\$lt_echo" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) +])#_LT_CONFIG_COMMANDS + + +# _LT_CONFIG(TAG) +# ---------------------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_define([_LT_CONFIG], +[_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by config.status (GNU $PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING + +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + rm='$rm' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + +# _LT_LANG(LANGNAME) +# ------------------ +m4_define([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_define([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java])]) + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler]) +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU C compiler?]) + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_define([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +m4_define([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_define([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string="`eval $cmd`") 2>/dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [echo], [1], + [An echo program that does not interpret backslashes]) +])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_REQUIRE([AC_OBJEXT])dnl +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_AC_LOCK + + +# AC_LIBTOOL_SYS_OLD_ARCHIVE +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# AC_LIBTOOL_SYS_OLD_ARCHIVE + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +m4_define([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring") >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +_LT_DECL([max_cmd_len], [lt_cv_sys_max_cmd_len], [0], + [What is the maximum length of a command?]) +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_REQUIRE([AC_OBJEXT])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +_LT_DECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([AC_LIBTOOL_PROG_CC_C_O])dnl +AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_AC_TAGVAR(runpath_var $1)" || + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_AC_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[AC_REQUIRE([LT_AC_PROG_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([LT_AC_PROG_EGREP]) +AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib<name>.so + # instead of lib<name>.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + if test "$host_cpu" = m68k; then + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + else + dynamic_linker=no + fi + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | $GREP "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]) +_LT_DECL([], [soname_spec], [1], + [The coded name of the library, if different from the real name]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [As "finish_cmds", except a single script fragment to be evaled but + not shown]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([LT_AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins "file"])dnl +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([LT_AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break + ;; + *) + test "$with_gnu_ld" != yes && break + ;; + esac + fi + done + IFS="$lt_save_ifs" +else + lt_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$lt_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_PROG_LD_GNU +AC_SUBST([LD]) + +_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) +])# AC_PROG_LD + +# Old name: +AU_DEFUN([AM_PROG_LD], [AC_PROG_LD]) + + +# AC_PROG_LD_GNU +# -------------- +AC_DEFUN([AC_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + lt_cv_prog_gnu_ld=yes + ;; +*) + lt_cv_prog_gnu_ld=no + ;; +esac]) +with_gnu_ld=$lt_cv_prog_gnu_ld +])# AC_PROG_LD_GNU + + +# AC_PROG_LD_RELOAD_FLAG +# ---------------------- +# find reload flag for linker +# -- PORTME Some linkers may need a different reload flag. +AC_DEFUN([AC_PROG_LD_RELOAD_FLAG], +[AC_CACHE_CHECK([for $LD option to reload object files], + lt_cv_ld_reload_flag, + [lt_cv_ld_reload_flag='-r']) +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac +_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl +_LT_DECL([], [reload_cmds], [2])dnl +])# AC_PROG_LD_RELOAD_FLAG + + +# AC_DEPLIBS_CHECK_METHOD +# ----------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +AC_DEFUN([AC_DEPLIBS_CHECK_METHOD], +[AC_REQUIRE([LT_AC_PROG_EGREP]) +AC_CACHE_CHECK([how to recognise dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. +mingw* | pw32*) + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + case $host_cpu in + alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD-compatible nm program])dnl +])# AC_PROG_NM + +# Old name: +AU_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'m4_if($#, 1,[$1], ['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'m4_if($#, 1, [$1], ['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided and an installed libltdl is not found, it is +# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' +# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single +# quotes!). If your package is not flat and you're not using automake, +# define top_builddir and top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'m4_if($#, 1, [$1], ['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'m4_if($#, 1, [$1], ['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([LT_AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_NM])dnl +AC_REQUIRE([AC_OBJEXT])dnl +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDRT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + if test "$host_cpu" = m68k; then + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + fi + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case "$cc_basename" in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + if test "$host_cpu" = m68k; then + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + fi + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case "$cc_basename" in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1)], + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# AC_LIBTOOL_PROG_COMPILER_PIC + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_REQUIRE([LT_AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_NM])dnl +AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(inherit_rpath, $1)=no + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + if test "$host_cpu" = m68k; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + fi + + # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + linux*) + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test "x$supports_anon_versioning" = xyes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~$echo "local: *; };" >> $output_objdir/$libname.ver~$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)=$_LT_AC_TAGVAR(archive_cmds, $1) + fi + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + if test "$host_cpu" = m68k; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + fi + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi4*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${Wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case "$cc_basename" in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(inherit_rpath, $1)=yes + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_define([_LT_LANG_C_CONFIG], +[AC_REQUIRE([LT_AC_PROG_EGREP]) +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_AC_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | $GREP "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) + AC_LIBTOOL_PROG_COMPILER_PIC($1) + AC_LIBTOOL_PROG_CC_C_O($1) + AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) + AC_LIBTOOL_PROG_LD_SHLIBS($1) + AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) + AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + AC_LIBTOOL_SYS_LIB_STRIP + AC_LIBTOOL_DLOPEN_SELF($1) + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case "$host_os" in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_define([_LT_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([LT_AC_PROG_EGREP]) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(inherit_rpath, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${Wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $GREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case "$cc_basename" in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(inherit_rpath, $1)=yes + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) + test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_AC_TAGVAR(GCC, $1)="$GXX" + _LT_AC_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + AC_LIBTOOL_POSTDEP_PREDEP($1) + AC_LIBTOOL_PROG_COMPILER_PIC($1) + AC_LIBTOOL_PROG_CC_C_O($1) + AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) + AC_LIBTOOL_PROG_LD_SHLIBS($1) + AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) + AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + AC_LIBTOOL_SYS_LIB_STRIP + AC_LIBTOOL_DLOPEN_SELF($1) + + _LT_CONFIG($1) +fi + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# _LT_LANG_CXX_CONFIG + + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then + _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then + _LT_AC_TAGVAR(predep_objects, $1)="$p" + else + _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then + _LT_AC_TAGVAR(postdep_objects, $1)="$p" + else + _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$rm -f confest.$objext + +case " $_LT_AC_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# AC_LIBTOOL_POSTDEP_PREDEP + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_define([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([AC_PROG_F77]) +AC_LANG_PUSH(Fortran 77) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(inherit_rpath, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case "$host_os" in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix4* | aix5*) + test "$enable_shared" = yes && enable_static=no + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_AC_TAGVAR(GCC, $1)="$G77" + _LT_AC_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + AC_LIBTOOL_PROG_COMPILER_PIC($1) + AC_LIBTOOL_PROG_CC_C_O($1) + AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) + AC_LIBTOOL_PROG_LD_SHLIBS($1) + AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) + AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + AC_LIBTOOL_SYS_LIB_STRIP + + _LT_CONFIG($1) +fi + +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_define([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ]) +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) + AC_LIBTOOL_PROG_COMPILER_PIC($1) + AC_LIBTOOL_PROG_CC_C_O($1) + AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) + AC_LIBTOOL_PROG_LD_SHLIBS($1) + AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) + AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + AC_LIBTOOL_SYS_LIB_STRIP + AC_LIBTOOL_DLOPEN_SELF($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_define([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC]) +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])dnl +]) +AU_DEFUN([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) + +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) +AU_DEFUN([LT_AC_PROG_RC], [LT_PROG_RC]) + + +# LT_AC_PROG_EGREP +# ---------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +AC_DEFUN([LT_AC_PROG_EGREP], +[AC_REQUIRE([AC_PROG_EGREP]) +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long line]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +]) + + +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# LT_AC_PROG_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_define([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED +AC_SUBST([SED]) +]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef diff --git a/libs/sigc++2/scripts/ltoptions.m4 b/libs/sigc++2/scripts/ltoptions.m4 new file mode 100644 index 0000000000..ea3089d330 --- /dev/null +++ b/libs/sigc++2/scripts/ltoptions.m4 @@ -0,0 +1,358 @@ +# Helper functions for option handling. -*- Autoconf -*- +# Written by Gary V. Vaughan <gary@gnu.org> + +# Copyright (C) 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 1 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(NAME) +# ----------------------- +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Other NAMEs are saved as a flag. +m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1]))]) + + +# _LT_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1]), [$2], [$3])]) + + +# _LT_UNLESS_OPTIONS(OPTIONS, IF-NOT-SET) +# --------------------------------------- +# Execute IF-NOT-SET if all OPTIONS are not set. +m4_define([_LT_UNLESS_OPTIONS], +[AC_FOREACH([_LT_Option], [$1], + [m4_ifdef(_LT_MANGLE_OPTION(_LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$2 +])[]dnl +]) + + +# _LT_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +# If any OPTION has a handler macro declared with LT_OPTION_DEFINE, +# despatch to that macro; otherwise complain about the unknown option +# and exit. +m4_define([_LT_SET_OPTIONS], +[AC_FOREACH([_LT_Option], [$1], + [_LT_SET_OPTION(_LT_Option) + m4_ifdef(_LT_MANGLE_DEFUN(_LT_Option), + _LT_MANGLE_DEFUN(_LT_Option), + [m4_fatal([Unknown option `]_LT_Option[' to LT][_INIT_LIBTOOL])]) + ])dnl +dnl +dnl Simply set some default values (i.e off) if boolean options were not +dnl specified: +_LT_UNLESS_OPTIONS([dlopen], enable_dlopen=no) +_LT_UNLESS_OPTIONS([win32-dll], enable_win32_dll=no) +dnl +dnl If no reference was made to various pairs of opposing options, then +dnl we run the default mode handler for the pair. For example, if neither +dnl `shared' nor `disable-shared' was passed, we enable building of shared +dnl archives by default: +_LT_UNLESS_OPTIONS([shared disable-shared], [_LT_ENABLE_SHARED]) +_LT_UNLESS_OPTIONS([static disable-static], [_LT_ENABLE_STATIC]) +_LT_UNLESS_OPTIONS([pic-only no-pic], [_LT_WITH_PIC]) +_LT_UNLESS_OPTIONS([fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) +])# _LT_SET_OPTIONS + + +## ----------------------------------------- ## +## Macros to handle LT_INIT_LIBTOOL options. ## +## ----------------------------------------- ## + +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(NAME, CODE) +# ---------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1]), [$2])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([dlopen], [enable_dlopen=yes]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_LIBTOOL_INIT's first parameter.]) +]) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[_LT_SET_OPTION([win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_LIBTOOL_INIT's first parameter.]) +]) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT_LIBTOOL options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([shared]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `shared' option into LT_LIBTOOL_INIT's first parameter.]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], +[_LT_SET_OPTION([shared]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `shared' option into LT_LIBTOOL_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([disable-shared]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-shared' option into LT_LIBTOOL_INIT's first parameter.]) +]) + +AU_DEFUN([AM_DISABLE_SHARED], +[_LT_SET_OPTION([disable-shared]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-shared' option into LT_LIBTOOL_INIT's first parameter.]) +]) + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT_LIBTOOL options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([static]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `static' option into LT_LIBTOOL_INIT's first parameter.]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], +[_LT_SET_OPTION([static]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `static' option into LT_LIBTOOL_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([disable-static]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-static' option into LT_LIBTOOL_INIT's first parameter.]) +]) + +AU_DEFUN([AM_DISABLE_STATIC], +[_LT_SET_OPTION([disable-static]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-static' option into LT_LIBTOOL_INIT's first parameter.]) +]) + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT_LIBTOOL options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_LIBTOOL_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_LIBTOOL_INIT's first parameter.]) +]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT_LIBTOOL options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_if($#, 1, $1, default) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PIC_MODE], +[_LT_SET_OPTION([pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_LIBTOOL_INIT's first parameter.]) +]) diff --git a/libs/sigc++2/scripts/ltsugar.m4 b/libs/sigc++2/scripts/ltsugar.m4 new file mode 100644 index 0000000000..c0f31aa63d --- /dev/null +++ b/libs/sigc++2/scripts/ltsugar.m4 @@ -0,0 +1,115 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Gary V. Vaughan. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# serial 1 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +m4_define([lt_join], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [], + [2], [[$2]], + [m4_ifval([$2], + [m4_ifval([$3], + [[$2][$1][]$0([$1], m4_shiftn(2, $@))], + [m4_if([$#], [3], + [$2], + [$0([$1], [$2], m4_shiftn(3, $@))])])], + [$0([$1], m4_shiftn(2, $@))])])[]dnl +]) + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +m4_define([lt_combine], +[m4_if([$2], [[]], [], + [lt_join(m4_quote(m4_default([$1], [, ])), + _$0([$1], m4_car($2)[$3], m4_shiftn(3, $@)), + $0([$1], m4_cdr($2), m4_shiftn(2, $@)))])]) +m4_define([_lt_combine], +[m4_if([$3], [], [], + [lt_join(m4_quote(m4_default([$1], [, ])), + [$2$3], + $0([$1], [$2], m4_shiftn(3, $@)))])[]dnl +]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_bmatch($3[]m4_defn([$1])$3, $3[]m4_re_escape([$2])$3, + [$5], + [m4_append([$1], [$2], [$3])$4])], + [m4_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$4])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# ------------------------------------------------------------ +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + m4_quote(lt_if_dict_fetch([$1], [$5], [$2], [$3], [$5])), + m4_quote($0([$1], [$2], [$3], [$4], m4_shiftn(5, $@))))])dnl +]) diff --git a/libs/sigc++2/scripts/ltversion.m4 b/libs/sigc++2/scripts/ltversion.m4 new file mode 100644 index 0000000000..8b8db37ad4 --- /dev/null +++ b/libs/sigc++2/scripts/ltversion.m4 @@ -0,0 +1,15 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# Generated from ltversion.in; do not edit by hand. + +# serial 1467 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], []) +m4_define([LT_PACKAGE_REVISION], [1.1467]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='' +macro_revision='1.1467' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/libs/sigc++2/sigc++-2.0.pc.in b/libs/sigc++2/sigc++-2.0.pc.in new file mode 100644 index 0000000000..7c55753531 --- /dev/null +++ b/libs/sigc++2/sigc++-2.0.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libsigc++ 2 +Description: Typesafe signal and callback system for C++ +Version: @VERSION@ +Libs: -L${libdir} -lsigc-2.0 +Cflags: -I${includedir}/sigc++-2.0 -I${libdir}/sigc++-2.0/include diff --git a/libs/sigc++2/sigc++/.cvsignore b/libs/sigc++2/sigc++/.cvsignore new file mode 100644 index 0000000000..051d1bd50b --- /dev/null +++ b/libs/sigc++2/sigc++/.cvsignore @@ -0,0 +1,3 @@ +Makefile +Makefile.in +.deps diff --git a/libs/sigc++2/sigc++/Makefile.am b/libs/sigc++2/sigc++/Makefile.am new file mode 100644 index 0000000000..45fe09d0c1 --- /dev/null +++ b/libs/sigc++2/sigc++/Makefile.am @@ -0,0 +1,96 @@ +# Base (./) +base_m4 = template.macros.m4 signal.h.m4 slot.h.m4 method_slot.h.m4 \ + object_slot.h.m4 class_slot.h.m4 hide.h.m4 retype.h.m4 +base_built_cc = +base_built_h = signal.h slot.h method_slot.h \ + object_slot.h class_slot.h hide.h retype.h + +signal.cc : signal.h signal_base.h functors/slot.h functors/slot_base.h functors/mem_fun.h functors/functor_trait.h + +# Functors (functors/) +functors_m4 = functor_trait.h.m4 slot.h.m4 ptr_fun.h.m4 mem_fun.h.m4 +functors_built_cc = +functors_built_h = functor_trait.h slot.h ptr_fun.h mem_fun.h + +functors/slot.cc : functors/slot.h functors/slot_base.h functors/functor_trait.h + +# Adaptors (adaptors/) +adaptors_m4 = deduce_result_type.h.m4 adaptor_trait.h.m4 bind.h.m4 bind_return.h.m4 \ + retype_return.h.m4 hide.h.m4 retype.h.m4 compose.h.m4 exception_catch.h.m4 +adaptors_built_cc = +adaptors_built_h = deduce_result_type.h adaptor_trait.h bind.h bind_return.h \ + retype_return.h hide.h retype.h compose.h exception_catch.h + +# Lambda (adaptors/lambda) +lambda_m4 = base.h.m4 select.h.m4 operator.h.m4 group.h.m4 lambda.cc.m4 +lambda_built_cc = lambda.cc +lambda_built_h = base.h select.h operator.h group.h + +adaptors/lambda/lambda.cc : adaptors/lambda/select.h adaptors/lambda/base.h \ + adaptors/adaptor_trait.h adaptors/deduce_result_type.h \ + functors/ptr_fun.h functors/mem_fun.h functors/functor_trait.h + +# Subdirectories needed also in the build dir +build_subdirs = functors adaptors adaptors/lambda + +# Combine all the above parts with right directories prefixed +sigc_m4 = $(base_m4:%=macros/%) \ + $(functors_m4:%=functors/macros/%) \ + $(adaptors_m4:%=adaptors/macros/%) \ + $(lambda_m4:%=adaptors/lambda/macros/%) +sigc_built_cc = $(base_built_cc) \ + $(functors_built_cc:%=functors/%) \ + $(adaptors_built_cc:%=adaptors/%) \ + $(lambda_built_cc:%=adaptors/lambda/%) +sigc_built_h = $(base_built_h) \ + $(functors_built_h:%=functors/%) \ + $(adaptors_built_h:%=adaptors/%) \ + $(lambda_built_h:%=adaptors/lambda/%) + +EXTRA_DIST = $(sigc_m4) $(sigc_built_h) $(sigc_built_cc) + +# install the headers +library_includedir = $(includedir)/sigc++-2.0/sigc++ +nobase_library_include_HEADERS = $(sigc_m4) $(sigc_built_h) \ + sigc++.h connection.h trackable.h reference_wrapper.h type_traits.h visit_each.h \ + object.h retype_return.h bind.h bind_return.h compatibility.h signal_base.h \ + functors/functors.h \ + functors/slot_base.h \ + adaptors/adaptors.h \ + adaptors/lambda/lambda.h + +# build the library +lib_LTLIBRARIES = libsigc-2.0.la +libsigc_2_0_la_SOURCES = signal.cc signal_base.cc trackable.cc connection.cc \ + functors/slot.cc functors/slot_base.cc \ + adaptors/lambda/lambda.cc +libsigc_2_0_la_LDFLAGS = +BUILT_SOURCES = $(sigc_built_h) $(sigc_built_cc) + +CLEANFILES = build-subdirs-stamp + +# Remove the generated sources during maintainer-clean: +MAINTAINERCLEANFILES = $(built_sources) + +M4_DIR = $(top_srcdir)/sigc++/macros + +# Rules to generate .h and .cc from .h.m4 and .cc.m4: +%.h: macros/%.h.m4 $(M4_DIR)/template.macros.m4 + $(M4) $(M4_INCLUDES) $(DEFINES) -I $(M4_DIR) -I macros $< > $@ + +%.cc: macros/%.cc.m4 $(M4_DIR)/template.macros.m4 + $(M4) $(M4_INCLUDES) $(DEFINES) -I $(M4_DIR) -I macros $< > $@ + +# This would be a necessary target for VPATH builds from a clean CVS checkout, +# but I'm not sure where to invoke it... [rotty] +build-subdirs-stamp: + for dir in $(build_subdirs); do \ + test -d $$dir || mkdir $$dir; \ + done + touch build-subdirs-stamp + +# Remove current directory from DEFAULT_INCLUDES because signal.h has +# the same name as a standard header: +DEFAULT_INCLUDES = +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir) + diff --git a/libs/sigc++2/sigc++/adaptors/adaptor_trait.h b/libs/sigc++2/sigc++/adaptors/adaptor_trait.h new file mode 100644 index 0000000000..8b618d7450 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/adaptor_trait.h @@ -0,0 +1,362 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_MACROS_ADAPTOR_TRAITHM4_ +#define _SIGC_ADAPTORS_MACROS_ADAPTOR_TRAITHM4_ +#include <sigc++config.h> //To get SIGC_TEMPLATE_KEYWORD_OPERATOR_OVERLOAD +#include <sigc++/visit_each.h> +#include <sigc++/functors/functor_trait.h> +#include <sigc++/functors/ptr_fun.h> +#include <sigc++/functors/mem_fun.h> +#include <sigc++/adaptors/deduce_result_type.h> + +namespace sigc { + +// Call either operator()<>() or sun_forte_workaround<>(), +// depending on the compiler: +#ifdef SIGC_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + #define SIGC_WORKAROUND_OPERATOR_PARENTHESES template operator() + #define SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD +#else + #ifdef SIGC_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + #define SIGC_WORKAROUND_OPERATOR_PARENTHESES operator() + #define SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + #else + #define SIGC_WORKAROUND_OPERATOR_PARENTHESES sun_forte_workaround + #endif +#endif + + +template <class T_functor> struct adapts; + +/** @defgroup adaptors Adaptors + * Adaptors are functors that alter the signature of a functor's + * operator()(). + * + * The adaptor types libsigc++ provides + * are created with bind(), bind_return(), hide(), hide_return(), + * retype_return(), retype(), compose(), exception_catch() and group(). + * + * You can easily derive your own adaptor type from sigc::adapts. + */ + +/** Converts an arbitrary functor into an adaptor type. + * All adaptor tyes in libsigc++ are unnumbered and have + * a <tt>template operator()</tt> member of every argument count + * they support. These functions in turn invoke a stored adaptor's + * <tt>template operator()</tt> processing the arguments and return + * value in a characteristic manner. Explicit function template + * instantiation is used to pass type hints thus saving copy costs. + * + * adaptor_functor is a glue between adaptors and arbitrary functors + * that just passes on the arguments. You won't use this type directly. + * + * The template argument @e T_functor determines the type of stored + * functor. + * + * @ingroup adaptors + */ +template <class T_functor> +struct adaptor_functor : public adaptor_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename sigc::deduce_result_type<T_functor, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; }; + typedef typename functor_trait<T_functor>::result_type result_type; + + /** Invokes the wrapped functor passing on the arguments. + * @return The return value of the functor invocation. + */ + result_type + operator()() const; + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + result_type sun_forte_workaround() const + { return operator(); } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) const + { return functor_(_A_arg1); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) const + { //Just calling operator() tries to copy the argument: + return functor_(_A_arg1); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) const + { return functor_(_A_arg1,_A_arg2); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) const + { //Just calling operator() tries to copy the argument: + return functor_(_A_arg1,_A_arg2); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) const + { return functor_(_A_arg1,_A_arg2,_A_arg3); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) const + { //Just calling operator() tries to copy the argument: + return functor_(_A_arg1,_A_arg2,_A_arg3); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) const + { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) const + { //Just calling operator() tries to copy the argument: + return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) const + { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) const + { //Just calling operator() tries to copy the argument: + return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) const + { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) const + { //Just calling operator() tries to copy the argument: + return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6,T_arg7 _A_arg7) const + { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6,_A_arg7); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6,T_arg7 _A_arg7) const + { //Just calling operator() tries to copy the argument: + return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6,_A_arg7); + } + #endif + + /// Constructs an invalid functor. + adaptor_functor() + {} + + /** Constructs an adaptor_functor object that wraps the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit adaptor_functor(const T_functor& _A_functor) + : functor_(_A_functor) + {} + + /** Constructs an adaptor_functor object that wraps the passed (member) + * function pointer. + * @param _A_type Pointer to function or class method to invoke from operator()(). + */ + template <class T_type> + explicit adaptor_functor(const T_type& _A_type) + : functor_(_A_type) + {} + + /// Functor that is invoked from operator()(). + mutable T_functor functor_; +}; + +template <class T_functor> +typename adaptor_functor<T_functor>::result_type +adaptor_functor<T_functor>::operator()() const + { return functor_(); } + + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::adaptor_functor performs a functor + * on the functor stored in the sigc::adaptor_functor object. + * + * @ingroup adaptors + */ +template <class T_action, class T_functor> +void visit_each(const T_action& _A_action, + const adaptor_functor<T_functor>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); +} + + +/** Trait that specifies what is the adaptor version of a functor type. + * Template specializations for sigc::adaptor_base derived functors, + * for function pointers and for class methods are provided. + * + * The template argument @e T_functor is the functor type to convert. + * @e I_isadaptor indicates whether @e T_functor inherits from sigc::adaptor_base. + * + * @ingroup adaptors + */ +template <class T_functor, bool I_isadaptor = is_base_and_derived<adaptor_base, T_functor>::value> struct adaptor_trait; + +/** Trait that specifies what is the adaptor version of a functor type. + * This template specialization is used for types that inherit from adaptor_base. + * adaptor_type is equal to @p T_functor in this case. + */ +template <class T_functor> +struct adaptor_trait<T_functor, true> +{ + typedef typename T_functor::result_type result_type; + typedef T_functor functor_type; + typedef T_functor adaptor_type; +}; + +/** Trait that specifies what is the adaptor version of a functor type. + * This template specialization is used for arbitrary functors, + * for function pointers and for class methods are provided. + * The latter are converted into @p pointer_functor or @p mem_functor types. + * adaptor_type is equal to @p adaptor_functor<functor_type>. + */ +template <class T_functor> +struct adaptor_trait<T_functor, false> +{ + typedef typename functor_trait<T_functor>::result_type result_type; + typedef typename functor_trait<T_functor>::functor_type functor_type; + typedef adaptor_functor<functor_type> adaptor_type; +}; + + +/** Base type for adaptors. + * adapts wraps adaptors, functors, function pointers and class methods. + * It contains a single member functor which is always a sigc::adaptor_base. + * The typedef adaptor_type defines the exact type that is used + * to store the adaptor, functor, function pointer or class method passed + * into the constructor. It differs from @e T_functor unless @e T_functor + * inherits from sigc::adaptor_base. + * + * @par Example of a simple adaptor: + * @code + * template <T_functor> + * struct my_adpator : public sigc::adapts<T_functor> + * { + * template <class T_arg1=void, class T_arg2=void> + * struct deduce_result_type + * { typedef typename sigc::deduce_result_type<T_functor, T_arg1, T_arg2>::type type; }; + * typedef typename sigc::functor_trait<T_functor>::result_type result_type; + * + * result_type + * operator()() const; + * + * template <class T_arg1> + * typename deduce_result_type<T_arg1>::type + * operator()(T_arg1 _A_arg1) const; + * + * template <class T_arg1, class T_arg2> + * typename deduce_result_type<T_arg1, T_arg2>::type + * operator()(T_arg1 _A_arg1, class T_arg2) const; + * + * explicit adaptor_functor(const T_functor& _A_functor) // Constructs a my_functor object that wraps the passed functor. + * : sigc::adapts<T_functor>(_A_functor) {} + * + * mutable T_functor functor_; // Functor that is invoked from operator()(). + * }; + * @endcode + * + * @ingroup adaptors + */ +template <class T_functor> +struct adapts : public adaptor_base +{ + typedef typename adaptor_trait<T_functor>::result_type result_type; + typedef typename adaptor_trait<T_functor>::adaptor_type adaptor_type; + + /** Constructs an adaptor that wraps the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit adapts(const T_functor& _A_functor) + : functor_(_A_functor) + {} + + /// Adaptor that is invoked from operator()(). + mutable adaptor_type functor_; +}; + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_ADAPTOR_TRAITHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/adaptors.h b/libs/sigc++2/sigc++/adaptors/adaptors.h new file mode 100644 index 0000000000..950063b122 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/adaptors.h @@ -0,0 +1,32 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_ADAPTOR_HPP_ +#define _SIGC_ADAPTOR_HPP_ + +#include <sigc++/adaptors/bind.h> +#include <sigc++/adaptors/bind_return.h> +#include <sigc++/adaptors/hide.h> +#include <sigc++/adaptors/retype_return.h> +#include <sigc++/adaptors/retype.h> +#include <sigc++/adaptors/compose.h> +#include <sigc++/adaptors/exception_catch.h> +#include <sigc++/adaptors/lambda/lambda.h> + +#endif /* _SIGC_ADAPTOR_HPP_ */ diff --git a/libs/sigc++2/sigc++/adaptors/bind.h b/libs/sigc++2/sigc++/adaptors/bind.h new file mode 100644 index 0000000000..81edaf7934 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/bind.h @@ -0,0 +1,2262 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_MACROS_BINDHM4_ +#define _SIGC_ADAPTORS_MACROS_BINDHM4_ +#include <sigc++/adaptors/adaptor_trait.h> + +namespace sigc { + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + +namespace internal { + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +struct count_void + { static const int value=0; }; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +struct count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,void> + { static const int value=1; }; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +struct count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,void,void> + { static const int value=2; }; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> +struct count_void<T_arg1,T_arg2,T_arg3,T_arg4,void,void,void> + { static const int value=3; }; +template <class T_arg1,class T_arg2,class T_arg3> +struct count_void<T_arg1,T_arg2,T_arg3,void,void,void,void> + { static const int value=4; }; +template <class T_arg1,class T_arg2> +struct count_void<T_arg1,T_arg2,void,void,void,void,void> + { static const int value=5; }; +template <class T_arg1> +struct count_void<T_arg1,void,void,void,void,void,void> + { static const int value=6; }; +template <> +struct count_void<void,void,void,void,void,void,void> + { static const int value=7; }; + +} /* namespace internal */ + +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + +/** @defgroup bind bind(), bind_return() + * sigc::bind() alters an arbitrary functor by fixing arguments to certain values. + * Up to 7 arguments can be bound at a time. + * For single argument binding overloads of sigc::bind() are provided that let you + * specify the zero-based position of the argument to fix with the first template parameter. + * (A value of @p -1 fixes the last argument so sigc::bind<-1>() gives the same result as sigc::bind().) + * The types of the arguments can optionally be specified if not deduced. + * + * @par Examples: + * @code + * void foo(int, int, int); + * // single argument binding ... + * sigc::bind(&foo,1)(2,3); //fixes the last (third) argument and calls foo(2,3,1) + * sigc::bind<-1>(&foo,1)(2,3); //same as bind(&foo,1)(2,3) (calls foo(2,3,1)) + * sigc::bind<0>(&foo,1)(2,3); //fixes the first argument and calls foo(1,2,3) + * sigc::bind<1>(&foo,1)(2,3); //fixes the second argument and calls foo(2,1,3) + * sigc::bind<2>(&foo,1)(2,3); //fixes the third argument and calls foo(2,3,1) + * // multi argument binding ... + * sigc::bind(&foo,1,2)(3); //fixes the last two arguments and calls foo(3,1,2) + * sigc::bind(&foo,1,2,3)(); //fixes all three arguments and calls foo(1,2,3) + * @endcode + * + * The functor sigc::bind() returns can be passed into + * sigc::signal::connect() directly. + * + * @par Example: + * @code + * sigc::signal<void> some_signal; + * void foo(int); + * some_signal.connect(sigc::bind(&foo,1)); + * @endcode + * + * sigc::bind_return() alters an arbitrary functor by + * fixing its return value to a certain value. + * + * @par Example: + * @code + * void foo(); + * std::cout << sigc::bind_return(&foo, 5)(); // calls foo() and returns 5 + * @endcode + * + * You can bind references to functors by passing the objects through + * the sigc::ref() helper function. + * + * @par Example: + * @code + * int some_int; + * sigc::signal<void> some_signal; + * void foo(int&); + * some_signal.connect(sigc::bind(&foo,sigc::ref(some_int))); + * @endcode + * + * If you bind an object of a sigc::trackable derived type to a functor + * by reference, a slot assigned to the bind adaptor is cleared automatically + * when the object goes out of scope. + * + * @par Example: + * @code + * struct bar : public sigc::trackable {} some_bar; + * sigc::signal<void> some_signal; + * void foo(bar&); + * some_signal.connect(sigc::bind(&foo,sigc::ref(some_bar))); + * // disconnected automatically if some_bar goes out of scope + * @endcode + * + * For a more powerful version of this functionality see the lambda + * library adaptor sigc::group() which can bind, hide and reorder + * arguments arbitrarily. Although sigc::group() is more flexible, + * sigc::bind() provides a means of binding parameters when then total + * number of parameters called is variable. + * + * @ingroup adaptors + */ + +/** Adaptor that binds an argument to the wrapped functor. + * Use the convenience function sigc::bind() to create an instance of sigc::bind_functor. + * + * The following template arguments are used: + * - @e I_location Zero-based position of the argument to fix (@p -1 for the last argument). + + * - @e T_type1 Type of the 1st bound argument. + * - @e T_type2 Type of the 2st bound argument. + * - @e T_type3 Type of the 3st bound argument. + * - @e T_type4 Type of the 4st bound argument. + * - @e T_type5 Type of the 5st bound argument. + * - @e T_type6 Type of the 6st bound argument. + * - @e T_type7 Type of the 7st bound argument. + * - @e T_functor Type of the functor to wrap. + * + * @ingroup bind + */ +template <int I_location, class T_functor, class T_type1=nil,class T_type2=nil,class T_type3=nil,class T_type4=nil,class T_type5=nil,class T_type6=nil,class T_type7=nil> +struct bind_functor; + +/** Adaptor that binds an argument to the wrapped functor. + * This template specialization fixes the 1th argument of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_bound> +struct bind_functor<0, T_functor, T_bound> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 1th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass> + (bound_, _A_arg1); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass> + (bound_, _A_arg1); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 1th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass> + (bound_, _A_arg1, _A_arg2); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass> + (bound_, _A_arg1, _A_arg2); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 1th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 1th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3, _A_arg4); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3, _A_arg4); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 1th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 1th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass, typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (bound_, _A_arg1, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_bound>::take _A_bound) + : adapts<T_functor>(_A_func), bound_(_A_bound) + {} + + /// The argument bound to the functor. + T_bound bound_; +}; + +template <class T_functor, class T_bound> +typename bind_functor<0, T_functor, T_bound>::result_type +bind_functor<0, T_functor, T_bound>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass> (bound_); } + +/** Adaptor that binds an argument to the wrapped functor. + * This template specialization fixes the 2th argument of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_bound> +struct bind_functor<1, T_functor, T_bound> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass> + (_A_arg1, bound_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass> + (_A_arg1, bound_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass> + (_A_arg1, bound_, _A_arg2); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass> + (_A_arg1, bound_, _A_arg2); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3, _A_arg4); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3, _A_arg4); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3, _A_arg4, _A_arg5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3, _A_arg4, _A_arg5); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1, bound_, _A_arg2, _A_arg3, _A_arg4, _A_arg5, _A_arg6); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_bound>::take _A_bound) + : adapts<T_functor>(_A_func), bound_(_A_bound) + {} + + /// The argument bound to the functor. + T_bound bound_; +}; + +template <class T_functor, class T_bound> +typename bind_functor<1, T_functor, T_bound>::result_type +bind_functor<1, T_functor, T_bound>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass> (bound_); } + +/** Adaptor that binds an argument to the wrapped functor. + * This template specialization fixes the 3th argument of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_bound> +struct bind_functor<2, T_functor, T_bound> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2, bound_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2, bound_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3, _A_arg4); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3, _A_arg4); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3, _A_arg4, _A_arg5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3, _A_arg4, _A_arg5); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3, _A_arg4, _A_arg5, _A_arg6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2, bound_, _A_arg3, _A_arg4, _A_arg5, _A_arg6); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_bound>::take _A_bound) + : adapts<T_functor>(_A_func), bound_(_A_bound) + {} + + /// The argument bound to the functor. + T_bound bound_; +}; + +template <class T_functor, class T_bound> +typename bind_functor<2, T_functor, T_bound>::result_type +bind_functor<2, T_functor, T_bound>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass> (bound_); } + +/** Adaptor that binds an argument to the wrapped functor. + * This template specialization fixes the 4th argument of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_bound> +struct bind_functor<3, T_functor, T_bound> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg4>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_, _A_arg4); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg4>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_, _A_arg4); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_, _A_arg4, _A_arg5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_, _A_arg4, _A_arg5); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_, _A_arg4, _A_arg5, _A_arg6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound_, _A_arg4, _A_arg5, _A_arg6); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_bound>::take _A_bound) + : adapts<T_functor>(_A_func), bound_(_A_bound) + {} + + /// The argument bound to the functor. + T_bound bound_; +}; + +template <class T_functor, class T_bound> +typename bind_functor<3, T_functor, T_bound>::result_type +bind_functor<3, T_functor, T_bound>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass> (bound_); } + +/** Adaptor that binds an argument to the wrapped functor. + * This template specialization fixes the 5th argument of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_bound> +struct bind_functor<4, T_functor, T_bound> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 5th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 5th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound_, _A_arg5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg5>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound_, _A_arg5); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 5th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound_, _A_arg5, _A_arg6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound_, _A_arg5, _A_arg6); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_bound>::take _A_bound) + : adapts<T_functor>(_A_func), bound_(_A_bound) + {} + + /// The argument bound to the functor. + T_bound bound_; +}; + +template <class T_functor, class T_bound> +typename bind_functor<4, T_functor, T_bound>::result_type +bind_functor<4, T_functor, T_bound>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass> (bound_); } + +/** Adaptor that binds an argument to the wrapped functor. + * This template specialization fixes the 6th argument of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_bound> +struct bind_functor<5, T_functor, T_bound> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 6th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 6th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound_, _A_arg6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_bound>::pass, typename type_trait<T_arg6>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound_, _A_arg6); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_bound>::take _A_bound) + : adapts<T_functor>(_A_func), bound_(_A_bound) + {} + + /// The argument bound to the functor. + T_bound bound_; +}; + +template <class T_functor, class T_bound> +typename bind_functor<5, T_functor, T_bound>::result_type +bind_functor<5, T_functor, T_bound>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass> (bound_); } + +/** Adaptor that binds an argument to the wrapped functor. + * This template specialization fixes the 7th argument of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_bound> +struct bind_functor<6, T_functor, T_bound> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass, typename type_trait<T_bound>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * bound_ is passed as the 7th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6, bound_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass, typename type_trait<T_bound>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6, bound_); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_bound>::take _A_bound) + : adapts<T_functor>(_A_func), bound_(_A_bound) + {} + + /// The argument bound to the functor. + T_bound bound_; +}; + +template <class T_functor, class T_bound> +typename bind_functor<6, T_functor, T_bound>::result_type +bind_functor<6, T_functor, T_bound>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_bound>::pass> (bound_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, int T_loc, class T_functor, class T_bound> +void visit_each(const T_action& _A_action, + const bind_functor<T_loc, T_functor, T_bound>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound_); +} + +/** Adaptor that binds 1 argument(s) to the wrapped functor. + * This template specialization fixes the last 1 argument(s) of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_type1> +struct bind_functor<-1, T_functor, T_type1> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + template <int count, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass, typename type_trait<T_type1>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_type1>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<3, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<4, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<5, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<6, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass>::type type; }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type { + typedef typename deduce_result_type_internal<internal::count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::value, + T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; + }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * The last 1 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass> + (_A_arg1, bound1_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass> + (_A_arg1, bound1_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 1 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2, bound1_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2, bound1_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 1 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 1 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound1_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound1_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 1 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound1_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound1_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 1 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6, bound1_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass, typename type_trait<T_type1>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6, bound1_); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_bound1) + : adapts<T_functor>(_A_func), bound1_(_A_bound1) + {} + + /// The argument bound to the functor. + T_type1 bound1_; +}; + +template <class T_functor, class T_type1> +typename bind_functor<-1, T_functor, T_type1>::result_type +bind_functor<-1, T_functor, T_type1>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::pass> (bound1_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_functor, class T_type1> +void visit_each(const T_action& _A_action, + const bind_functor<-1, T_functor, T_type1>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound1_); +} + +/** Adaptor that binds 2 argument(s) to the wrapped functor. + * This template specialization fixes the last 2 argument(s) of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_type1,class T_type2> +struct bind_functor<-1, T_functor, T_type1,T_type2> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + template <int count, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<3, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<4, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<5, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<6, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass>::type type; }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type { + typedef typename deduce_result_type_internal<internal::count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::value, + T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; + }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * The last 2 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1, bound1_,bound2_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1, bound1_,bound2_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 2 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 2 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_,bound2_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_,bound2_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 2 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound1_,bound2_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound1_,bound2_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 2 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound1_,bound2_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5, bound1_,bound2_); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_bound1,typename type_trait<T_type2>::take _A_bound2) + : adapts<T_functor>(_A_func), bound1_(_A_bound1),bound2_(_A_bound2) + {} + + /// The argument bound to the functor. + T_type1 bound1_; + T_type2 bound2_; +}; + +template <class T_functor, class T_type1,class T_type2> +typename bind_functor<-1, T_functor, T_type1,T_type2>::result_type +bind_functor<-1, T_functor, T_type1,T_type2>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass> (bound1_,bound2_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_functor, class T_type1,class T_type2> +void visit_each(const T_action& _A_action, + const bind_functor<-1, T_functor, T_type1,T_type2>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound1_); + visit_each(_A_action, _A_target.bound2_); +} + +/** Adaptor that binds 3 argument(s) to the wrapped functor. + * This template specialization fixes the last 3 argument(s) of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_type1,class T_type2,class T_type3> +struct bind_functor<-1, T_functor, T_type1,T_type2,T_type3> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + template <int count, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<4, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<5, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<6, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass>::type type; }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type { + typedef typename deduce_result_type_internal<internal::count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::value, + T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; + }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * The last 3 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1, bound1_,bound2_,bound3_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1, bound1_,bound2_,bound3_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 3 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_,bound3_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_,bound3_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 3 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_,bound2_,bound3_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_,bound2_,bound3_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 3 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound1_,bound2_,bound3_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> + (_A_arg1,_A_arg2,_A_arg3,_A_arg4, bound1_,bound2_,bound3_); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_bound1,typename type_trait<T_type2>::take _A_bound2,typename type_trait<T_type3>::take _A_bound3) + : adapts<T_functor>(_A_func), bound1_(_A_bound1),bound2_(_A_bound2),bound3_(_A_bound3) + {} + + /// The argument bound to the functor. + T_type1 bound1_; + T_type2 bound2_; + T_type3 bound3_; +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3> +typename bind_functor<-1, T_functor, T_type1,T_type2,T_type3>::result_type +bind_functor<-1, T_functor, T_type1,T_type2,T_type3>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass> (bound1_,bound2_,bound3_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3> +void visit_each(const T_action& _A_action, + const bind_functor<-1, T_functor, T_type1,T_type2,T_type3>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound1_); + visit_each(_A_action, _A_target.bound2_); + visit_each(_A_action, _A_target.bound3_); +} + +/** Adaptor that binds 4 argument(s) to the wrapped functor. + * This template specialization fixes the last 4 argument(s) of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4> +struct bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + template <int count, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<5, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<6, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass>::type type; }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type { + typedef typename deduce_result_type_internal<internal::count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::value, + T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; + }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * The last 4 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass> + (_A_arg1, bound1_,bound2_,bound3_,bound4_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass> + (_A_arg1, bound1_,bound2_,bound3_,bound4_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 4 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_,bound3_,bound4_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_,bound3_,bound4_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 4 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_,bound2_,bound3_,bound4_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass> + (_A_arg1,_A_arg2,_A_arg3, bound1_,bound2_,bound3_,bound4_); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_bound1,typename type_trait<T_type2>::take _A_bound2,typename type_trait<T_type3>::take _A_bound3,typename type_trait<T_type4>::take _A_bound4) + : adapts<T_functor>(_A_func), bound1_(_A_bound1),bound2_(_A_bound2),bound3_(_A_bound3),bound4_(_A_bound4) + {} + + /// The argument bound to the functor. + T_type1 bound1_; + T_type2 bound2_; + T_type3 bound3_; + T_type4 bound4_; +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4> +typename bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4>::result_type +bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass> (bound1_,bound2_,bound3_,bound4_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3,class T_type4> +void visit_each(const T_action& _A_action, + const bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound1_); + visit_each(_A_action, _A_target.bound2_); + visit_each(_A_action, _A_target.bound3_); + visit_each(_A_action, _A_target.bound4_); +} + +/** Adaptor that binds 5 argument(s) to the wrapped functor. + * This template specialization fixes the last 5 argument(s) of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5> +struct bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + template <int count, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass>::type type; }; + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal<6, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass>::type type; }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type { + typedef typename deduce_result_type_internal<internal::count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::value, + T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; + }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * The last 5 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass> + (_A_arg1, bound1_,bound2_,bound3_,bound4_,bound5_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass> + (_A_arg1, bound1_,bound2_,bound3_,bound4_,bound5_); + } + #endif + + /** Invokes the wrapped functor passing on the arguments. + * The last 5 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_,bound3_,bound4_,bound5_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass> + (_A_arg1,_A_arg2, bound1_,bound2_,bound3_,bound4_,bound5_); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_bound1,typename type_trait<T_type2>::take _A_bound2,typename type_trait<T_type3>::take _A_bound3,typename type_trait<T_type4>::take _A_bound4,typename type_trait<T_type5>::take _A_bound5) + : adapts<T_functor>(_A_func), bound1_(_A_bound1),bound2_(_A_bound2),bound3_(_A_bound3),bound4_(_A_bound4),bound5_(_A_bound5) + {} + + /// The argument bound to the functor. + T_type1 bound1_; + T_type2 bound2_; + T_type3 bound3_; + T_type4 bound4_; + T_type5 bound5_; +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5> +typename bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5>::result_type +bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass> (bound1_,bound2_,bound3_,bound4_,bound5_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5> +void visit_each(const T_action& _A_action, + const bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound1_); + visit_each(_A_action, _A_target.bound2_); + visit_each(_A_action, _A_target.bound3_); + visit_each(_A_action, _A_target.bound4_); + visit_each(_A_action, _A_target.bound5_); +} + +/** Adaptor that binds 6 argument(s) to the wrapped functor. + * This template specialization fixes the last 6 argument(s) of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6> +struct bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + template <int count, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass,typename type_trait<T_type6>::pass>::type type; }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type { + typedef typename deduce_result_type_internal<internal::count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::value, + T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; + }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Invokes the wrapped functor passing on the arguments. + * The last 6 argument(s) are fixed. + * @param _A_arg1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass,typename type_trait<T_type6>::pass> + (_A_arg1, bound1_,bound2_,bound3_,bound4_,bound5_,bound6_); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_arg1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass,typename type_trait<T_type6>::pass> + (_A_arg1, bound1_,bound2_,bound3_,bound4_,bound5_,bound6_); + } + #endif + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_bound1,typename type_trait<T_type2>::take _A_bound2,typename type_trait<T_type3>::take _A_bound3,typename type_trait<T_type4>::take _A_bound4,typename type_trait<T_type5>::take _A_bound5,typename type_trait<T_type6>::take _A_bound6) + : adapts<T_functor>(_A_func), bound1_(_A_bound1),bound2_(_A_bound2),bound3_(_A_bound3),bound4_(_A_bound4),bound5_(_A_bound5),bound6_(_A_bound6) + {} + + /// The argument bound to the functor. + T_type1 bound1_; + T_type2 bound2_; + T_type3 bound3_; + T_type4 bound4_; + T_type5 bound5_; + T_type6 bound6_; +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6> +typename bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6>::result_type +bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass,typename type_trait<T_type6>::pass> (bound1_,bound2_,bound3_,bound4_,bound5_,bound6_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6> +void visit_each(const T_action& _A_action, + const bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound1_); + visit_each(_A_action, _A_target.bound2_); + visit_each(_A_action, _A_target.bound3_); + visit_each(_A_action, _A_target.bound4_); + visit_each(_A_action, _A_target.bound5_); + visit_each(_A_action, _A_target.bound6_); +} + +/** Adaptor that binds 7 argument(s) to the wrapped functor. + * This template specialization fixes the last 7 argument(s) of the wrapped functor. + * + * @ingroup bind + */ +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +struct bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + template <int count, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + struct deduce_result_type_internal + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass,typename type_trait<T_type6>::pass,typename type_trait<T_type7>::pass>::type type; }; +#endif /*DOXYGEN_SHOULD_SKIP_THIS*/ + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type { + typedef typename deduce_result_type_internal<internal::count_void<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::value, + T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; + }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor passing on the bound argument only. + * @return The return value of the functor invocation. + */ + result_type + operator()(); + + /** Constructs a bind_functor object that binds an argument to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_bound Argument to bind to the functor. + */ + bind_functor(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_bound1,typename type_trait<T_type2>::take _A_bound2,typename type_trait<T_type3>::take _A_bound3,typename type_trait<T_type4>::take _A_bound4,typename type_trait<T_type5>::take _A_bound5,typename type_trait<T_type6>::take _A_bound6,typename type_trait<T_type7>::take _A_bound7) + : adapts<T_functor>(_A_func), bound1_(_A_bound1),bound2_(_A_bound2),bound3_(_A_bound3),bound4_(_A_bound4),bound5_(_A_bound5),bound6_(_A_bound6),bound7_(_A_bound7) + {} + + /// The argument bound to the functor. + T_type1 bound1_; + T_type2 bound2_; + T_type3 bound3_; + T_type4 bound4_; + T_type5 bound5_; + T_type6 bound6_; + T_type7 bound7_; +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +typename bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>::result_type +bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>::operator()() + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::pass,typename type_trait<T_type2>::pass,typename type_trait<T_type3>::pass,typename type_trait<T_type4>::pass,typename type_trait<T_type5>::pass,typename type_trait<T_type6>::pass,typename type_trait<T_type7>::pass> (bound1_,bound2_,bound3_,bound4_,bound5_,bound6_,bound7_); } + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_functor performs a functor on the + * functor and on the object instances stored in the sigc::bind_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +void visit_each(const T_action& _A_action, + const bind_functor<-1, T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.bound1_); + visit_each(_A_action, _A_target.bound2_); + visit_each(_A_action, _A_target.bound3_); + visit_each(_A_action, _A_target.bound4_); + visit_each(_A_action, _A_target.bound5_); + visit_each(_A_action, _A_target.bound6_); + visit_each(_A_action, _A_target.bound7_); +} + + +/** Creates an adaptor of type sigc::bind_functor which binds the passed argument to the passed functor. + * The optional template argument @e I_location specifies the zero-based + * position of the argument to be fixed (@p -1 stands for the last argument). + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @return Adaptor that executes @e _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <int I_location, class T_bound1, class T_functor> +inline bind_functor<I_location, T_functor, typename unwrap_reference<T_bound1>::type> +bind(const T_functor& _A_func, T_bound1 _A_b1) +{ + return bind_functor<I_location, T_functor, typename unwrap_reference<T_bound1>::type> + (_A_func, _A_b1); +} + +/** Creates an adaptor of type sigc::bind_functor which fixes the last 1 argument(s) of the passed functor. + * This function overload fixes the last 1 argument(s) of @e _A_func. + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @return Adaptor that executes _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <class T_type1, class T_functor> +inline bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type> +bind(const T_functor& _A_func, T_type1 _A_b1) +{ return bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type> + (_A_func, _A_b1); +} + +/** Creates an adaptor of type sigc::bind_functor which fixes the last 2 argument(s) of the passed functor. + * This function overload fixes the last 2 argument(s) of @e _A_func. + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @param _A_b2 Argument to bind to @e _A_func. + * @return Adaptor that executes _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <class T_type1,class T_type2, class T_functor> +inline bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type> +bind(const T_functor& _A_func, T_type1 _A_b1,T_type2 _A_b2) +{ return bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type> + (_A_func, _A_b1,_A_b2); +} + +/** Creates an adaptor of type sigc::bind_functor which fixes the last 3 argument(s) of the passed functor. + * This function overload fixes the last 3 argument(s) of @e _A_func. + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @param _A_b2 Argument to bind to @e _A_func. + * @param _A_b3 Argument to bind to @e _A_func. + * @return Adaptor that executes _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <class T_type1,class T_type2,class T_type3, class T_functor> +inline bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type> +bind(const T_functor& _A_func, T_type1 _A_b1,T_type2 _A_b2,T_type3 _A_b3) +{ return bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type> + (_A_func, _A_b1,_A_b2,_A_b3); +} + +/** Creates an adaptor of type sigc::bind_functor which fixes the last 4 argument(s) of the passed functor. + * This function overload fixes the last 4 argument(s) of @e _A_func. + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @param _A_b2 Argument to bind to @e _A_func. + * @param _A_b3 Argument to bind to @e _A_func. + * @param _A_b4 Argument to bind to @e _A_func. + * @return Adaptor that executes _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <class T_type1,class T_type2,class T_type3,class T_type4, class T_functor> +inline bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type> +bind(const T_functor& _A_func, T_type1 _A_b1,T_type2 _A_b2,T_type3 _A_b3,T_type4 _A_b4) +{ return bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type> + (_A_func, _A_b1,_A_b2,_A_b3,_A_b4); +} + +/** Creates an adaptor of type sigc::bind_functor which fixes the last 5 argument(s) of the passed functor. + * This function overload fixes the last 5 argument(s) of @e _A_func. + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @param _A_b2 Argument to bind to @e _A_func. + * @param _A_b3 Argument to bind to @e _A_func. + * @param _A_b4 Argument to bind to @e _A_func. + * @param _A_b5 Argument to bind to @e _A_func. + * @return Adaptor that executes _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <class T_type1,class T_type2,class T_type3,class T_type4,class T_type5, class T_functor> +inline bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type, + typename unwrap_reference<T_type5>::type> +bind(const T_functor& _A_func, T_type1 _A_b1,T_type2 _A_b2,T_type3 _A_b3,T_type4 _A_b4,T_type5 _A_b5) +{ return bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type, + typename unwrap_reference<T_type5>::type> + (_A_func, _A_b1,_A_b2,_A_b3,_A_b4,_A_b5); +} + +/** Creates an adaptor of type sigc::bind_functor which fixes the last 6 argument(s) of the passed functor. + * This function overload fixes the last 6 argument(s) of @e _A_func. + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @param _A_b2 Argument to bind to @e _A_func. + * @param _A_b3 Argument to bind to @e _A_func. + * @param _A_b4 Argument to bind to @e _A_func. + * @param _A_b5 Argument to bind to @e _A_func. + * @param _A_b6 Argument to bind to @e _A_func. + * @return Adaptor that executes _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6, class T_functor> +inline bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type, + typename unwrap_reference<T_type5>::type, + typename unwrap_reference<T_type6>::type> +bind(const T_functor& _A_func, T_type1 _A_b1,T_type2 _A_b2,T_type3 _A_b3,T_type4 _A_b4,T_type5 _A_b5,T_type6 _A_b6) +{ return bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type, + typename unwrap_reference<T_type5>::type, + typename unwrap_reference<T_type6>::type> + (_A_func, _A_b1,_A_b2,_A_b3,_A_b4,_A_b5,_A_b6); +} + +/** Creates an adaptor of type sigc::bind_functor which fixes the last 7 argument(s) of the passed functor. + * This function overload fixes the last 7 argument(s) of @e _A_func. + * + * @param _A_func Functor that should be wrapped. + * @param _A_b1 Argument to bind to @e _A_func. + * @param _A_b2 Argument to bind to @e _A_func. + * @param _A_b3 Argument to bind to @e _A_func. + * @param _A_b4 Argument to bind to @e _A_func. + * @param _A_b5 Argument to bind to @e _A_func. + * @param _A_b6 Argument to bind to @e _A_func. + * @param _A_b7 Argument to bind to @e _A_func. + * @return Adaptor that executes _A_func with the bound argument on invokation. + * + * @ingroup bind + */ +template <class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7, class T_functor> +inline bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type, + typename unwrap_reference<T_type5>::type, + typename unwrap_reference<T_type6>::type, + typename unwrap_reference<T_type7>::type> +bind(const T_functor& _A_func, T_type1 _A_b1,T_type2 _A_b2,T_type3 _A_b3,T_type4 _A_b4,T_type5 _A_b5,T_type6 _A_b6,T_type7 _A_b7) +{ return bind_functor<-1, T_functor, + typename unwrap_reference<T_type1>::type, + typename unwrap_reference<T_type2>::type, + typename unwrap_reference<T_type3>::type, + typename unwrap_reference<T_type4>::type, + typename unwrap_reference<T_type5>::type, + typename unwrap_reference<T_type6>::type, + typename unwrap_reference<T_type7>::type> + (_A_func, _A_b1,_A_b2,_A_b3,_A_b4,_A_b5,_A_b6,_A_b7); +} + + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_BINDHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/bind_return.h b/libs/sigc++2/sigc++/adaptors/bind_return.h new file mode 100644 index 0000000000..40e3524090 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/bind_return.h @@ -0,0 +1,204 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_MACROS_BIND_RETURNHM4_ +#define _SIGC_ADAPTORS_MACROS_BIND_RETURNHM4_ +#include <sigc++/adaptors/adaptor_trait.h> + +namespace sigc { + +/** Adaptor that fixes the return value of the wrapped functor. + * Use the convenience function sigc::bind_return() to create an instance of sigc::bind_return_functor. + * + * The following template arguments are used: + * - @e T_return Type of the fixed return value. + * - @e T_functor Type of the functor to wrap. + * + * @ingroup bind + */ +template <class T_return, class T_functor> +struct bind_return_functor : public adapts<T_functor> +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_return type; }; + typedef T_return result_type; + + /** Invokes the wrapped functor dropping its return value. + * @return The fixed return value. + */ + T_return operator()(); + + /** Invokes the wrapped functor passing on the arguments., + * @param _A_arg%1 Argument to be passed on to the functor.) + * @return The fixed return value. + */ + template <class T_arg1> + inline T_return operator()(T_arg1 _A_a1) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); return ret_value_; + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + inline T_return sun_forte_workaround(T_arg1 _A_a1) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); return ret_value_; + } + #endif + + /** Invokes the wrapped functor passing on the arguments., + * @param _A_arg%1 Argument to be passed on to the functor.) + * @return The fixed return value. + */ + template <class T_arg1,class T_arg2> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2); return ret_value_; + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2); return ret_value_; + } + #endif + + /** Invokes the wrapped functor passing on the arguments., + * @param _A_arg%1 Argument to be passed on to the functor.) + * @return The fixed return value. + */ + template <class T_arg1,class T_arg2,class T_arg3> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3); return ret_value_; + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3); return ret_value_; + } + #endif + + /** Invokes the wrapped functor passing on the arguments., + * @param _A_arg%1 Argument to be passed on to the functor.) + * @return The fixed return value. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4); return ret_value_; + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4); return ret_value_; + } + #endif + + /** Invokes the wrapped functor passing on the arguments., + * @param _A_arg%1 Argument to be passed on to the functor.) + * @return The fixed return value. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); return ret_value_; + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); return ret_value_; + } + #endif + + /** Invokes the wrapped functor passing on the arguments., + * @param _A_arg%1 Argument to be passed on to the functor.) + * @return The fixed return value. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); return ret_value_; + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); return ret_value_; + } + #endif + + /** Invokes the wrapped functor passing on the arguments., + * @param _A_arg%1 Argument to be passed on to the functor.) + * @return The fixed return value. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); return ret_value_; + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); return ret_value_; + } + #endif + + + /** Constructs a bind_return_functor object that fixes the return value to @p _A_ret_value. + * @param _A_functor Functor to invoke from operator()(). + * @param _A_ret_value Value to return from operator()(). + */ + bind_return_functor(typename type_trait<T_functor>::take _A_functor, typename type_trait<T_return>::take _A_ret_value) + : adapts<T_functor>(_A_functor), ret_value_(_A_ret_value) + {} + + /// The fixed return value. + T_return ret_value_; // public, so that visit_each() can access it +}; + +template <class T_return, class T_functor> +T_return bind_return_functor<T_return, T_functor>::operator()() + { this->functor_(); return ret_value_; } + + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bind_return_functor performs a functor on the + * functor and on the object instance stored in the sigc::bind_return_functor object. + * + * @ingroup bind + */ +template <class T_action, class T_return, class T_functor> +void visit_each(const T_action& _A_action, + const bind_return_functor<T_return, T_functor>& _A_target) +{ + visit_each(_A_action, _A_target.ret_value_); + visit_each(_A_action, _A_target.functor_); +} + + +/** Creates an adaptor of type sigc::bind_return_functor which fixes the return value of the passed functor to the passed argument. + * + * @param _A_functor Functor that should be wrapped. + * @param _A_ret_value Argument to fix the return value of @e _A_functor to. + * @return Adaptor that executes @e _A_functor on invokation and returns @e _A_ret_value. + * + * @ingroup bind + */ +template <class T_return, class T_functor> +inline bind_return_functor<typename unwrap_reference<T_return>::type, T_functor> +bind_return(const T_functor& _A_functor, T_return _A_ret_value) +{ return bind_return_functor<typename unwrap_reference<T_return>::type, T_functor>(_A_functor, _A_ret_value); } + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_BIND_RETURNHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/compose.h b/libs/sigc++2/sigc++/adaptors/compose.h new file mode 100644 index 0000000000..0f098ff2df --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/compose.h @@ -0,0 +1,294 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + +#ifndef _SIGC_ADAPTORS_MACROS_COMPOSEHM4_ +#define _SIGC_ADAPTORS_MACROS_COMPOSEHM4_ +#include <sigc++/adaptors/adaptor_trait.h> + +namespace sigc { + +/** @defgroup compose compose() + * sigc::compose() combines two or three arbitrary functors. + * On invokation parameters are passed on to one or two getter functor(s). + * The return value(s) are then passed on to the setter function. + * + * @par Examples: + * @code + * float square_root(float a) { return sqrtf(a); } + * float sum(float a, float b) { return a+b; } + * std::cout << sigc::compose(&square_root, &sum)(9, 16); // calls square_root(sum(3,6)) + * std::cout << sigc::compose(&sum, &square_root, &square_root)(9); // calls sum(square_root(9), square_root(9)) + * @endcode + * + * The functor sigc::compose() returns can be passed into + * sigc::signal::connect() directly. + * + * @par Example: + * @code + * sigc::signal<float,float,float> some_signal; + * some_signal.connect(sigc::compose(&square_root, &sum)); + * @endcode + * + * For a more powerful version of this functionality see the lambda + * library adaptor sigc::group() which can bind, hide and reorder + * arguments arbitrarily. Although sigc::group() is more flexible, + * sigc::bind() provides a means of binding parameters when then total + * number of parameters called is variable. + * + * @ingroup adaptors + */ + +/** Adaptor that combines two functors. + * Use the convenience function sigc::compose() to create an instance of sigc::compose1_functor. + * + * The following template arguments are used: + * - @e T_setter Type of the setter functor to wrap. + * - @e T_getter Type of the getter functor to wrap. + * + * @ingroup compose + */ +template <class T_setter, class T_getter> +struct compose1_functor : public adapts<T_setter> +{ + typedef typename adapts<T_setter>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type< + typename sigc::deduce_result_type<T_getter, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + >::type type; }; + typedef typename adaptor_type::result_type result_type; + + result_type + operator()(); + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_a1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter, T_arg1>::type> + (get_(_A_a1)); + } + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter, T_arg1,T_arg2>::type> + (get_(_A_a1,_A_a2)); + } + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter, T_arg1,T_arg2,T_arg3>::type> + (get_(_A_a1,_A_a2,_A_a3)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter, T_arg1,T_arg2,T_arg3,T_arg4>::type> + (get_(_A_a1,_A_a2,_A_a3,_A_a4)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type> + (get_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type> + (get_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type> + (get_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7)); + } + + + /** Constructs a compose1_functor object that combines the passed functors. + * @param _A_setter Functor that receives the return values of the invokation of @e _A_getter1 and @e _A_getter2. + * @param _A_getter1 Functor to invoke from operator()(). + * @param _A_getter2 Functor to invoke from operator()(). + */ + compose1_functor(const T_setter& _A_setter, const T_getter& _A_getter) + : adapts<T_setter>(_A_setter), get_(_A_getter) + {} + + T_getter get_; // public, so that visit_each() can access it +}; + +template <class T_setter, class T_getter> +typename compose1_functor<T_setter, T_getter>::result_type +compose1_functor<T_setter, T_getter>::operator()() + { return this->functor_(get_()); } + +/** Adaptor that combines three functors. + * Use the convenience function sigc::compose() to create an instance of sigc::compose2_functor. + * + * The following template arguments are used: + * - @e T_setter Type of the setter functor to wrap. + * - @e T_getter1 Type of the first getter functor to wrap. + * - @e T_getter2 Type of the second getter functor to wrap. + * + * @ingroup compose + */ +template <class T_setter, class T_getter1, class T_getter2> +struct compose2_functor : public adapts<T_setter> +{ + typedef typename adapts<T_setter>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type< + typename sigc::deduce_result_type<T_getter1, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + >::type result_type; }; + typedef typename adaptor_type::result_type result_type; + + result_type + operator()(); + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_a1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter1, T_arg1>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1>::type> + (get1_(_A_a1), get2_(_A_a1)); + } + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter1, T_arg1,T_arg2>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1,T_arg2>::type> + (get1_(_A_a1,_A_a2), get2_(_A_a1,_A_a2)); + } + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter1, T_arg1,T_arg2,T_arg3>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1,T_arg2,T_arg3>::type> + (get1_(_A_a1,_A_a2,_A_a3), get2_(_A_a1,_A_a2,_A_a3)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter1, T_arg1,T_arg2,T_arg3,T_arg4>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1,T_arg2,T_arg3,T_arg4>::type> + (get1_(_A_a1,_A_a2,_A_a3,_A_a4), get2_(_A_a1,_A_a2,_A_a3,_A_a4)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter1, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type> + (get1_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5), get2_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter1, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type> + (get1_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6), get2_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6)); + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename sigc::deduce_result_type<T_getter1, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename sigc::deduce_result_type<T_getter2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type> + (get1_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7), get2_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7)); + } + + + /** Constructs a compose2_functor object that combines the passed functors. + * @param _A_setter Functor that receives the return values of the invokation of @e _A_getter1 and @e _A_getter2. + * @param _A_getter1 Functor to invoke from operator()(). + * @param _A_getter2 Functor to invoke from operator()(). + */ + compose2_functor(const T_setter& _A_setter, + const T_getter1& _A_getter1, + const T_getter2& _A_getter2) + : adapts<T_setter>(_A_setter), get1_(_A_getter1), get2_(_A_getter2) + {} + + T_getter1 get1_; // public, so that visit_each() can access it + T_getter2 get2_; // public, so that visit_each() can access it +}; + +template <class T_setter, class T_getter1, class T_getter2> +typename compose2_functor<T_setter, T_getter1, T_getter2>::result_type +compose2_functor<T_setter, T_getter1, T_getter2>::operator()() + { return this->functor_(get1_(), get2_()); } + + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::compose1_functor performs a functor on the + * functors stored in the sigc::compose1_functor object. + * + * @ingroup compose + */ +template <class T_action, class T_setter, class T_getter> +void visit_each(const T_action& _A_action, + const compose1_functor<T_setter, T_getter>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.get_); +} + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::compose2_functor performs a functor on the + * functors stored in the sigc::compose2_functor object. + * + * @ingroup compose + */ +template <class T_action, class T_setter, class T_getter1, class T_getter2> +void visit_each(const T_action& _A_action, + const compose2_functor<T_setter, T_getter1, T_getter2>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.get1_); + visit_each(_A_action, _A_target.get2_); +} + + +/** Creates an adaptor of type sigc::compose1_functor which combines two functors. + * + * @param _A_setter Functor that receives the return value of the invokation of @e _A_getter. + * @param _A_getter Functor to invoke from operator()(). + * @return Adaptor that executes @e _A_setter with the value returned from invokation of @e _A_getter. + * + * @ingroup compose + */ +template <class T_setter, class T_getter> +inline compose1_functor<T_setter, T_getter> +compose(const T_setter& _A_setter, const T_getter& _A_getter) + { return compose1_functor<T_setter, T_getter>(_A_setter, _A_getter); } + +/** Creates an adaptor of type sigc::compose2_functor which combines three functors. + * + * @param _A_setter Functor that receives the return values of the invokation of @e _A_getter1 and @e _A_getter2. + * @param _A_getter1 Functor to invoke from operator()(). + * @param _A_getter2 Functor to invoke from operator()(). + * @return Adaptor that executes @e _A_setter with the values return from invokation of @e _A_getter1 and @e _A_getter2. + * + * @ingroup compose + */ +template <class T_setter, class T_getter1, class T_getter2> +inline compose2_functor<T_setter, T_getter1, T_getter2> +compose(const T_setter& _A_setter, const T_getter1& _A_getter1, const T_getter2& _A_getter2) + { return compose2_functor<T_setter, T_getter1, T_getter2>(_A_setter, _A_getter1, _A_getter2); } + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_COMPOSEHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/deduce_result_type.h b/libs/sigc++2/sigc++/adaptors/deduce_result_type.h new file mode 100644 index 0000000000..397bb50ff7 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/deduce_result_type.h @@ -0,0 +1,121 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +/* +*/ +#ifndef _SIGC_ADAPTORS_MACROS_DEDUCE_RESULT_TYPEHM4_ +#define _SIGC_ADAPTORS_MACROS_DEDUCE_RESULT_TYPEHM4_ +#include <sigc++/functors/functor_trait.h> + + +namespace sigc { + +/** A hint to the compiler. + * Functors which have all methods based on templates + * should publicly inherit from this hint and define + * a nested template class @p deduce_result_type that + * can be used to deduce the methods' return types. + * + * adaptor_base inherits from the functor_base hint so + * derived types should also have a result_type defined. + * + * Adaptors don't inherit from this type directly. They use + * use sigc::adapts as a base type instead. sigc::adaptors + * wraps arbitrary functor types as well as function pointers + * and class methods. + * + * @ingroup adaptors + */ +struct adaptor_base : public functor_base {}; + + +/** Deduce the return type of a functor. + * <tt>typename deduce_result_type<functor_type, list of arg_types>::type</tt> + * deduces a functor's result type if @p functor_type inherits from + * sigc::functor_base and defines @p result_type or if @p functor_type + * is actually a (member) function type. Multi-type functors are not + * supported. + * + * sigc++ adaptors use + * <tt>typename deduce_result_type<functor_type, list of arg_types>::type</tt> + * to determine the return type of their <tt>templated operator()</tt> overloads. + * + * Adaptors in turn define a nested template class @p deduce_result_type + * that is used by template specializations of the global deduce_result_type + * template to correctly deduce the return types of the adaptor's suitable + * <tt>template operator()</tt> overload. + * + * @ingroup adaptors + */ +template <class T_functor, + class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void, + bool I_derives_adaptor_base=is_base_and_derived<adaptor_base,T_functor>::value> +struct deduce_result_type + { typedef typename functor_trait<T_functor>::result_type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 0 arguments. + */ +template <class T_functor> +struct deduce_result_type<T_functor, void,void,void,void,void,void,void, true> + { typedef typename T_functor::template deduce_result_type<>::type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 1 arguments. + */ +template <class T_functor, class T_arg1> +struct deduce_result_type<T_functor, T_arg1, void,void,void,void,void,void, true> + { typedef typename T_functor::template deduce_result_type<T_arg1>::type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 2 arguments. + */ +template <class T_functor, class T_arg1,class T_arg2> +struct deduce_result_type<T_functor, T_arg1,T_arg2, void,void,void,void,void, true> + { typedef typename T_functor::template deduce_result_type<T_arg1,T_arg2>::type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 3 arguments. + */ +template <class T_functor, class T_arg1,class T_arg2,class T_arg3> +struct deduce_result_type<T_functor, T_arg1,T_arg2,T_arg3, void,void,void,void, true> + { typedef typename T_functor::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 4 arguments. + */ +template <class T_functor, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +struct deduce_result_type<T_functor, T_arg1,T_arg2,T_arg3,T_arg4, void,void,void, true> + { typedef typename T_functor::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 5 arguments. + */ +template <class T_functor, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +struct deduce_result_type<T_functor, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, void,void, true> + { typedef typename T_functor::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 6 arguments. + */ +template <class T_functor, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +struct deduce_result_type<T_functor, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, void, true> + { typedef typename T_functor::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type type; }; + +/** Deduce the return type of a functor. + * This is the template specialization of the sigc::deduce_result_type template + * for 7 arguments. + */ +template <class T_functor, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +struct deduce_result_type<T_functor, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, true> + { typedef typename T_functor::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; }; + + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_DEDUCE_RESULT_TYPEHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/exception_catch.h b/libs/sigc++2/sigc++/adaptors/exception_catch.h new file mode 100644 index 0000000000..cd7c41e67d --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/exception_catch.h @@ -0,0 +1,319 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_MACROS_EXCEPTION_CATCHHM4_ +#define _SIGC_ADAPTORS_MACROS_EXCEPTION_CATCHHM4_ +#include <sigc++/adaptors/adaptor_trait.h> + +namespace sigc { + +/* + functor adaptor: exception_catch(functor, catcher) + + usage: + + + Future directions: + The catcher should be told what type of return it needs to + return for multiple type functors, to do this the user + will need to derive from catcher_base. +*/ +/** @defgroup exception_catch exception_catch() + * sigc::exception_catch() catches an exception thrown from within + * the wrapped functor and directs it to a catcher functor. + * This catcher can then rethrow the exception and catch it with the proper type. + * + * Note that the catcher is expected to return the same type + * as the wrapped functor so that normal flow can continue. + * + * Catchers can be cascaded to catch multiple types because uncaught + * rethrown exceptions proceed to the next catcher adaptor. + * + * @par Examples: + * @code + * struct my_catch + * { + * int operator()() + * { + * try { throw; } + * catch (std::range_error e) // catch what types we know + * { std::cerr << "caught " << e.what() << std::endl; } + * return 1; + * } + * } + * int foo(); // throws std::range_error + * sigc::exception_catch(&foo, my_catch())(); + * @endcode + * + * The functor sigc::execption_catch() returns can be passed into + * sigc::signal::connect() directly. + * + * @par Example: + * @code + * sigc::signal<int> some_signal; + * some_signal.connect(sigc::exception_catch(&foo, my_catch)); + * @endcode + * + * @ingroup adaptors + */ + +template <class T_functor, class T_catcher, class T_return = typename adapts<T_functor>::result_type> +struct exception_catch_functor : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type type; }; + typedef T_return result_type; + + result_type + operator()(); + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_a1) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + } + catch (...) + { return catcher_(); } + } + + exception_catch_functor(const T_functor& _A_func, + const T_catcher& _A_catcher) + : adapts<T_functor>(_A_func), catcher_(_A_catcher) + {} + + protected: + T_catcher catcher_; +}; + +template <class T_functor, class T_catcher, class T_return> +typename exception_catch_functor<T_functor, T_catcher, T_return>::result_type +exception_catch_functor<T_functor, T_catcher, T_return>::operator()() + { + try + { return this->functor_(); } + catch (...) + { return catcher_(); } + } + +// void specialization +template <class T_functor, class T_catcher> +struct exception_catch_functor<T_functor, T_catcher, void> : public adapts<T_functor> +{ + typedef void result_type; + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + void + operator()(); + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_a1) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + } + catch (...) + { return catcher_(); } + } + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { + try + { + return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + } + catch (...) + { return catcher_(); } + } + + exception_catch_functor() {} + exception_catch_functor(const T_functor& _A_func, + const T_catcher& _A_catcher) + : adapts<T_functor>(_A_func), catcher_(_A_catcher) + {} + ~exception_catch_functor() {} + + protected: + T_catcher catcher_; +}; + +template <class T_functor, class T_catcher> +void exception_catch_functor<T_functor, T_catcher, void>::operator()() + { + try + { this->functor_(); } // I don't understand why void return doesn't work here (Martin) + catch (...) + { this->catcher_(); } + } + + +template <class T_action, class T_functor, class T_catcher, class T_return> +void visit_each(const T_action& _A_action, + const exception_catch_functor<T_functor, T_catcher, T_return>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); + visit_each(_A_action, _A_target.catcher_); +} + + +template <class T_functor, class T_catcher> +inline exception_catch_functor<T_functor, T_catcher> +exception_catch(const T_functor& _A_func, const T_catcher& _A_catcher) + { return exception_catch_functor<T_functor, T_catcher>(_A_func, _A_catcher); } + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_EXCEPTION_CATCHHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/hide.h b/libs/sigc++2/sigc++/adaptors/hide.h new file mode 100644 index 0000000000..1b820fea6b --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/hide.h @@ -0,0 +1,1063 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_MACROS_HIDEHM4_ +#define _SIGC_ADAPTORS_MACROS_HIDEHM4_ +#include <sigc++/adaptors/adaptor_trait.h> + +namespace sigc { + +/** @defgroup hide hide(), hide_return() + * sigc::hide() alters an arbitrary functor in that it adds a parameter + * whose value is ignored on invocation of the returned functor. + * Thus you can discard one or more of the arguments of a signal. + * + * You may optionally specify the zero-based position of the parameter + * to ignore as a template argument. The default is to ignore the last + * parameter. + * (A value of @p -1 adds a parameter at the end so sigc::hide<-1>() gives the same result as sigc::hide().) + * + * The type of the parameter can optionally be specified if not deduced. + * + * @par Examples: + * @code + * void foo(int, int); + * // single argument hiding ... + * sigc::hide(&foo)(1,2,3); // adds a dummy parameter at the back and calls foo(1,2) + * sigc::hide<-1>(&foo)(1,2,3); // same as sigc::hide(&foo)(1,2,3) (calls foo(1,2)) + * sigc::hide<0>(&foo)(1,2,3); // adds a dummy parameter at the beginning and calls foo(2,3) + * sigc::hide<1>(&foo)(1,2,3); // adds a dummy parameter in the middle and calls foo(1,3) + * sigc::hide<2>(&foo)(1,2,3); // adds a dummy parameter at the back and calls foo(1,2) + * // multiple argument hiding ... + * sigc::hide(sigc::hide(&foo))(1,2,3,4); // adds two dummy parameters at the back and calls foo(1,2) + * @endcode + * + * The functor sigc::hide() returns can be passed into + * sigc::signal::connect() directly. + * + * @par Example: + * @code + * sigc::signal<void,int> some_signal; + * void foo(); + * some_signal.connect(sigc::hide(&foo)); + * @endcode + * + * sigc::hide_return() alters an arbitrary functor by + * dropping its return value, thus converting it to a void functor. + * + * For a more powerful version of this functionality see the lambda + * library adaptor sigc::group() which can bind, hide and reorder + * arguments arbitrarily. Although sigc::group() is more flexible, + * sigc::hide() provides a means of hiding parameters when then total + * number of parameters called is variable. + * + * @ingroup adaptors + */ + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * Use the convenience function sigc::hide() to create an instance of sigc::hide_functor. + * + * The following template arguments are used: + * - @e I_location Zero-based position of the dummy parameter (@p -1 for the last parameter). + * - @e T_type Type of the dummy parameter. + * - @e T_functor Type of the functor to wrap. + * + * @ingroup hide + */ +template <int I_location, class T_functor> +struct hide_functor; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the last parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <-1, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the only argument. + * @param _A_arg%1 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_a1) + { return this->functor_(); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_a1) + { return this->functor_(); } + #endif + + /** Invokes the wrapped functor ignoring the last argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); } + #endif + + /** Invokes the wrapped functor ignoring the last argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass> + (_A_a1, _A_a2); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass> + (_A_a1, _A_a2); } + #endif + + /** Invokes the wrapped functor ignoring the last argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_a1, _A_a2, _A_a3); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_a1, _A_a2, _A_a3); } + #endif + + /** Invokes the wrapped functor ignoring the last argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4); } + #endif + + /** Invokes the wrapped functor ignoring the last argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5); } + #endif + + /** Invokes the wrapped functor ignoring the last argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a6); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the 0th parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <0, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the only argument. + * @param _A_arg%1 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_a1) + { return this->functor_(); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_a1) + { return this->functor_(); } + #endif + + /** Invokes the wrapped functor ignoring the 1th argument. + * @param _A_arg1 Argument to be ignored. + * @param _A_arg2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass> + (_A_a2); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass> + (_A_a2); } + #endif + + /** Invokes the wrapped functor ignoring the 1th argument. + * @param _A_arg1 Argument to be ignored. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_a2, _A_a3); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_a2, _A_a3); } + #endif + + /** Invokes the wrapped functor ignoring the 1th argument. + * @param _A_arg1 Argument to be ignored. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a2, _A_a3, _A_a4); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a2, _A_a3, _A_a4); } + #endif + + /** Invokes the wrapped functor ignoring the 1th argument. + * @param _A_arg1 Argument to be ignored. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a2, _A_a3, _A_a4, _A_a5); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a2, _A_a3, _A_a4, _A_a5); } + #endif + + /** Invokes the wrapped functor ignoring the 1th argument. + * @param _A_arg1 Argument to be ignored. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a2, _A_a3, _A_a4, _A_a5, _A_a6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a2, _A_a3, _A_a4, _A_a5, _A_a6); } + #endif + + /** Invokes the wrapped functor ignoring the 1th argument. + * @param _A_arg1 Argument to be ignored. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a2, _A_a3, _A_a4, _A_a5, _A_a6, _A_a7); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a2, _A_a3, _A_a4, _A_a5, _A_a6, _A_a7); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the 1th parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <1, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); } + #endif + + /** Invokes the wrapped functor ignoring the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be ignored. + * @param _A_arg3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass> + (_A_a1, _A_a3); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass> + (_A_a1, _A_a3); } + #endif + + /** Invokes the wrapped functor ignoring the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be ignored. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a3, _A_a4); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a3, _A_a4); } + #endif + + /** Invokes the wrapped functor ignoring the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be ignored. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a3, _A_a4, _A_a5); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a3, _A_a4, _A_a5); } + #endif + + /** Invokes the wrapped functor ignoring the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be ignored. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a3, _A_a4, _A_a5, _A_a6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a3, _A_a4, _A_a5, _A_a6); } + #endif + + /** Invokes the wrapped functor ignoring the 2th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be ignored. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a3, _A_a4, _A_a5, _A_a6, _A_a7); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a3, _A_a4, _A_a5, _A_a6, _A_a7); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the 2th parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <2, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass> + (_A_a1, _A_a2); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass> + (_A_a1, _A_a2); } + #endif + + /** Invokes the wrapped functor ignoring the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be ignored. + * @param _A_arg4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a2, _A_a4); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a2, _A_a4); } + #endif + + /** Invokes the wrapped functor ignoring the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be ignored. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a4, _A_a5); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a4, _A_a5); } + #endif + + /** Invokes the wrapped functor ignoring the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be ignored. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a4, _A_a5, _A_a6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a4, _A_a5, _A_a6); } + #endif + + /** Invokes the wrapped functor ignoring the 3th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be ignored. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a4, _A_a5, _A_a6, _A_a7); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a4, _A_a5, _A_a6, _A_a7); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the 3th parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <3, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_a1, _A_a2, _A_a3); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass> + (_A_a1, _A_a2, _A_a3); } + #endif + + /** Invokes the wrapped functor ignoring the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be ignored. + * @param _A_arg5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a3, _A_a5); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a3, _A_a5); } + #endif + + /** Invokes the wrapped functor ignoring the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be ignored. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a5, _A_a6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a5, _A_a6); } + #endif + + /** Invokes the wrapped functor ignoring the 4th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be ignored. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a3, _A_a5, _A_a6, _A_a7); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a3, _A_a5, _A_a6, _A_a7); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the 4th parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <4, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the 5th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4); } + #endif + + /** Invokes the wrapped functor ignoring the 5th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be ignored. + * @param _A_arg6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a6); } + #endif + + /** Invokes the wrapped functor ignoring the 5th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be ignored. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a6, _A_a7); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg6>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a6, _A_a7); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the 5th parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <5, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass, typename type_trait<T_arg7>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the 6th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5); } + #endif + + /** Invokes the wrapped functor ignoring the 6th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be ignored. + * @param _A_arg7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a7); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg7>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a7); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + +/** Adaptor that adds a dummy parameter to the wrapped functor. + * This template specialization ignores the value of the 6th parameter in operator()(). + * + * @ingroup hide + */ +template <class T_functor> +struct hide_functor <6, T_functor> : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::type type; }; + typedef typename adaptor_type::result_type result_type; + + /** Invokes the wrapped functor ignoring the 7th argument. + * @param _A_arg1 Argument to be passed on to the functor. + * @param _A_arg2 Argument to be passed on to the functor. + * @param _A_arg3 Argument to be passed on to the functor. + * @param _A_arg4 Argument to be passed on to the functor. + * @param _A_arg5 Argument to be passed on to the functor. + * @param _A_arg6 Argument to be passed on to the functor. + * @param _A_arg7 Argument to be ignored. + * @return The return value of the functor invocation. + */ + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a6); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass, typename type_trait<T_arg2>::pass, typename type_trait<T_arg3>::pass, typename type_trait<T_arg4>::pass, typename type_trait<T_arg5>::pass, typename type_trait<T_arg6>::pass> + (_A_a1, _A_a2, _A_a3, _A_a4, _A_a5, _A_a6); } + #endif + + + /** Constructs a hide_functor object that adds a dummy parameter to the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit hide_functor(const T_functor& _A_func) + : adapts<T_functor>(_A_func) + {} +}; + + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::hide_functor performs a functor on the + * functor stored in the sigc::hide_functor object. + * + * @ingroup hide + */ +template <class T_action, int I_location, class T_functor> +void visit_each(const T_action& _A_action, + const hide_functor<I_location, T_functor>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); +} + + +/** Creates an adaptor of type sigc::hide_functor which adds a dummy parameter to the passed functor. + * The optional template argument @e I_location specifies the zero-based + * position of the dummy parameter in the returned functor (@p -1 stands for the last parameter). + * + * @param _A_func Functor that should be wrapped. + * @return Adaptor that executes @e _A_func ignoring the value of the dummy parameter. + * + * @ingroup hide + */ +template <int I_location, class T_functor> +inline hide_functor<I_location, T_functor> +hide(const T_functor& _A_func) + { return hide_functor<I_location, T_functor>(_A_func); } + +/** Creates an adaptor of type sigc::hide_functor which adds a dummy parameter to the passed functor. + * This overload adds a dummy parameter at the back of the functor's parameter list. + * + * @param _A_func Functor that should be wrapped. + * @return Adaptor that executes @e _A_func ignoring the value of the last parameter. + * + * @ingroup hide + */ +template <class T_functor> +inline hide_functor<-1, T_functor> +hide(const T_functor& _A_func) + { return hide_functor<-1, T_functor> (_A_func); } + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_HIDEHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/lambda/base.h b/libs/sigc++2/sigc++/adaptors/lambda/base.h new file mode 100644 index 0000000000..6a2c402c89 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/lambda/base.h @@ -0,0 +1,392 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_LAMBDA_BASE_HPP_ +#define _SIGC_LAMBDA_BASE_HPP_ +#include <sigc++/adaptors/adaptor_trait.h> + +namespace sigc { + +/** @defgroup lambdas Lambdas + * libsigc++ ships with basic lambda functionality and the sigc::group adaptor that uses lambdas to transform a functor's parameter list. + * + * The lambda selectors sigc::_1, sigc::_2, ..., sigc::_9 are used to select the + * first, second, ..., nineth argument from a list. + * + * @par Examples: + * @code + * std::cout << sigc::_1(10,20,30); // returns 10 + * std::cout << sigc::_2(10,20,30); // returns 20 + * ... + * @endcode + * + * Operators are defined so that lambda selectors can be used e.g. as placeholders in + * arithmetic expressions. + * + * @par Examples: + * @code + * std::cout << (sigc::_1 + 5)(3); // returns (3 + 5) + * std::cout << (sigc::_1 * sigc::_2)(7,10); // returns (7 * 10) + * @endcode + */ + +/** A hint to the compiler. + * All lambda types publically inherit from this hint. + * + * @ingroup lambdas + */ +struct lambda_base : public adaptor_base {}; + +// Forward declaration of lambda. +template <class T_type> struct lambda; + + +namespace internal { + +/** Abstracts lambda functionality. + * Objects of this type store a value that may be of type lambda itself. + * In this case, operator()() executes the lambda (a lambda is always a functor at the same time). + * Otherwise, operator()() simply returns the stored value. + */ +template <class T_type, bool I_islambda = is_base_and_derived<lambda_base, T_type>::value> struct lambda_core; + +/// Abstracts lambda functionality (template specialization for lambda values). +template <class T_type> +struct lambda_core<T_type, true> : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename T_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type type; }; + typedef typename T_type::result_type result_type; + typedef T_type lambda_type; + + result_type + operator()() const; + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator ()(T_arg1 _A_1) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_1) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return value_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + lambda_core() {} + + explicit lambda_core(const T_type& v) + : value_(v) {} + + T_type value_; +}; + +template <class T_type> +typename lambda_core<T_type, true>::result_type +lambda_core<T_type, true>::operator()() const + { return value_(); } + + +/// Abstracts lambda functionality (template specialization for other value types). +template <class T_type> +struct lambda_core<T_type, false> : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_type type; }; + typedef T_type result_type; // all operator() overloads return T_type. + typedef lambda<T_type> lambda_type; + + result_type operator()() const; + + template <class T_arg1> + result_type operator ()(T_arg1 _A_1) const + { return value_; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + result_type sun_forte_workaround(T_arg1 _A_1) const + { return value_; } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2> + result_type operator ()(T_arg1 _A_1,T_arg2 _A_2) const + { return value_; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const + { return value_; } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3> + result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return value_; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return value_; } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return value_; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return value_; } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return value_; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return value_; } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return value_; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return value_; } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + result_type operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return value_; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + result_type sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return value_; } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + explicit lambda_core(typename type_trait<T_type>::take v) + : value_(v) {} + + T_type value_; +}; + +template <class T_type> +typename lambda_core<T_type, false>::result_type lambda_core<T_type, false>::operator()() const + { return value_; } + +} /* namespace internal */ + + +template <class T_action, class T_functor, bool I_islambda> +void visit_each(const T_action& _A_action, + const internal::lambda_core<T_functor, I_islambda>& _A_target) +{ + visit_each(_A_action, _A_target.value_); +} + + +// forward declarations for lambda operators other<subscript> and other<assign> +template <class T_type> +struct other; +struct subscript; +struct assign; + +template <class T_action, class T_type1, class T_type2> +struct lambda_operator; + +template <class T_type> +struct unwrap_lambda_type; + + +/** Lambda type. + * Objects of this type store a value that may be of type lambda itself. + * In this case, operator()() executes the lambda (a lambda is always a functor at the same time). + * Otherwise, operator()() simply returns the stored value. + * The assign and subscript operators are defined to return a lambda operator. + * + * @ingroup lambdas + */ +template <class T_type> +struct lambda : public internal::lambda_core<T_type> +{ + typedef lambda<T_type> self; + + lambda() + {} + + lambda(typename type_trait<T_type>::take v) + : internal::lambda_core<T_type>(v) + {} + + // operators for other<subscript> + template <class T_arg> + lambda<lambda_operator<other<subscript>, self, typename unwrap_lambda_type<T_arg>::type> > + operator [] (const T_arg& a) const + { typedef lambda_operator<other<subscript>, self, typename unwrap_lambda_type<T_arg>::type> lambda_operator_type; + return lambda<lambda_operator_type>(lambda_operator_type(this->value_, unwrap_lambda_value(a))); } + + // operators for other<assign> + template <class T_arg> + lambda<lambda_operator<other<assign>, self, typename unwrap_lambda_type<T_arg>::type> > + operator = (const T_arg& a) const + { typedef lambda_operator<other<assign>, self, typename unwrap_lambda_type<T_arg>::type> lambda_operator_type; + return lambda<lambda_operator_type>(lambda_operator_type(this->value_, unwrap_lambda_value(a))); } +}; + + +template <class T_action, class T_type> +void visit_each(const T_action& _A_action, + const lambda<T_type>& _A_target) +{ + visit_each(_A_action, _A_target.value_); +} + + +/// Converts a reference into a lambda object. +template <class T_type> +lambda<T_type&> var(T_type& v) +{ return lambda<T_type&>(v); } + +/// Converts a constant reference into a lambda object. +template <class T_type> +lambda<const T_type&> var(const T_type& v) +{ return lambda<const T_type&>(v); } + + +/** Deduces the type of the object stored in an object of the passed lambda type. + * If the type passed as template argument is no lambda type, + * type is defined to unwrap_reference<T_type>::type. + */ +template <class T_type> +struct unwrap_lambda_type +{ typedef typename unwrap_reference<T_type>::type type; }; + +template <class T_type> +struct unwrap_lambda_type<lambda<T_type> > +{ typedef T_type type; }; + + +/** Gets the object stored inside a lambda object. + * Returns the object passed as argument if it is not of type lambda. + */ +template <class T_type> +T_type& unwrap_lambda_value(T_type& a) +{ return a; } + +template <class T_type> +const T_type& unwrap_lambda_value(const T_type& a) +{ return a; } + +template <class T_type> +const T_type& unwrap_lambda_value(const lambda<T_type>& a) +{ return a.value_; } + +} /* namespace sigc */ + +#endif /* _SIGC_LAMBDA_BASE_HPP_ */ diff --git a/libs/sigc++2/sigc++/adaptors/lambda/group.h b/libs/sigc++2/sigc++/adaptors/lambda/group.h new file mode 100644 index 0000000000..7b7525dc41 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/lambda/group.h @@ -0,0 +1,734 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_LAMBDA_MACROS_GROUPHM4_ +#define _SIGC_ADAPTORS_LAMBDA_MACROS_GROUPHM4_ +#include <sigc++/adaptors/lambda/base.h> + +/** @defgroup group_ group() + * sigc::group() alters an arbitrary functor by rebuilding its arguments from one or more lambda expressions. + * For each parameter that should be passed to the wrapped functor one lambda expression + * has to be passed into group(). Lambda selectors can be used as placeholders for the + * arguments passed into the new functor. Arguments that don't have a placeholder in one + * of the lambda expressions are dropped. + * + * @par Examples: + * @code + * void foo(int, int); + * int bar(int); + * // argument binding ... + * sigc::group(&foo,10,sigc::_1)(20); //fixes the first argument and calls foo(10,20) + * sigc::group(&foo,sigc::_1,30)(40); //fixes the second argument and calls foo(40,30) + * // argument reordering ... + * sigc::group(&foo,sigc::_2,sigc::_1)(1,2); //calls foo(2,1) + * // argument hiding ... + * sigc::group(&foo,sigc::_1,sigc::_2)(1,2,3); //calls foo(1,2) + * // functor composition ... + * sigc::group(&foo,sigc::_1,sigc::group(&bar,sigc::_2))(1,2); //calls foo(1,bar(2)) + * // algebraic expressions ... + * sigc::group(&foo,sigc::_1*sigc::_2,sigc::_1/sigc::_2)(6,3); //calls foo(6*3,6/3) + * @endcode + * + * The functor sigc::group() returns can be passed into + * sigc::signal::connect() directly. + * + * @par Example: + * @code + * sigc::signal<void,int,int> some_signal; + * void foo(int); + * some_signal.connect(sigc::group(&foo,sigc::_2)); + * @endcode + * + * Like in sigc::bind() you can bind references to functors by passing the objects + * through the sigc::ref() helper function. + * + * @par Example: + * @code + * int some_int; + * sigc::signal<void> some_signal; + * void foo(int&); + * some_signal.connect(sigc::group(&foo,sigc::ref(some_int))); + * @endcode + * + * If you bind an object of a sigc::trackable derived type to a functor + * by reference, a slot assigned to the group adaptor is cleared automatically + * when the object goes out of scope. + * + * @par Example: + * @code + * struct bar : public sigc::trackable {} some_bar; + * sigc::signal<void> some_signal; + * void foo(bar&); + * some_signal.connect(sigc::group(&foo,sigc::ref(some_bar))); + * // disconnected automatically if some_bar goes out of scope + * @endcode + * + * @ingroup adaptors, lambdas + */ + +namespace sigc { + +template <class T_functor, class T_type1> +struct lambda_group1 : public lambda_base +{ + typedef typename functor_trait<T_functor>::result_type result_type; + typedef typename lambda<T_type1>::lambda_type value1_type; + typedef typename adaptor_trait<T_functor>::adaptor_type functor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename functor_type::template deduce_result_type< + typename value1_type::template deduce_result_type< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type + >::type type; }; + + result_type + operator ()() const; + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator() (T_arg1 _A_1) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround (T_arg1 _A_1) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator() (T_arg1 _A_1,T_arg2 _A_2) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + lambda_group1(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_1) + : value1_(_A_1), func_(_A_func) {} + + value1_type value1_; + mutable functor_type func_; +}; + +template <class T_functor, class T_type1> +typename lambda_group1<T_functor, T_type1>::result_type +lambda_group1<T_functor, T_type1>::operator ()() const + { return func_(value1_()); } + + +template <class T_action, class T_functor, class T_type1> +void visit_each(const T_action& _A_action, + const lambda_group1<T_functor, T_type1>& _A_target) +{ + visit_each(_A_action, _A_target.value1_); + visit_each(_A_action, _A_target.func_); +} + + +template <class T_functor, class T_type1,class T_type2> +struct lambda_group2 : public lambda_base +{ + typedef typename functor_trait<T_functor>::result_type result_type; + typedef typename lambda<T_type1>::lambda_type value1_type; + typedef typename lambda<T_type2>::lambda_type value2_type; + typedef typename adaptor_trait<T_functor>::adaptor_type functor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename functor_type::template deduce_result_type< + typename value1_type::template deduce_result_type< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type, + typename value2_type::template deduce_result_type< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type + >::type type; }; + + result_type + operator ()() const; + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator() (T_arg1 _A_1) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1>::type, + typename value2_type::template deduce_result_type<T_arg1>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround (T_arg1 _A_1) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1>::type, + typename value2_type::template deduce_result_type<T_arg1>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator() (T_arg1 _A_1,T_arg2 _A_2) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + lambda_group2(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_1,typename type_trait<T_type2>::take _A_2) + : value1_(_A_1),value2_(_A_2), func_(_A_func) {} + + value1_type value1_; + value2_type value2_; + mutable functor_type func_; +}; + +template <class T_functor, class T_type1,class T_type2> +typename lambda_group2<T_functor, T_type1,T_type2>::result_type +lambda_group2<T_functor, T_type1,T_type2>::operator ()() const + { return func_(value1_(),value2_()); } + + +template <class T_action, class T_functor, class T_type1,class T_type2> +void visit_each(const T_action& _A_action, + const lambda_group2<T_functor, T_type1,T_type2>& _A_target) +{ + visit_each(_A_action, _A_target.value1_); + visit_each(_A_action, _A_target.value2_); + visit_each(_A_action, _A_target.func_); +} + + +template <class T_functor, class T_type1,class T_type2,class T_type3> +struct lambda_group3 : public lambda_base +{ + typedef typename functor_trait<T_functor>::result_type result_type; + typedef typename lambda<T_type1>::lambda_type value1_type; + typedef typename lambda<T_type2>::lambda_type value2_type; + typedef typename lambda<T_type3>::lambda_type value3_type; + typedef typename adaptor_trait<T_functor>::adaptor_type functor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename functor_type::template deduce_result_type< + typename value1_type::template deduce_result_type< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type, + typename value2_type::template deduce_result_type< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type, + typename value3_type::template deduce_result_type< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type + >::type type; }; + + result_type + operator ()() const; + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator() (T_arg1 _A_1) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1>::type, + typename value2_type::template deduce_result_type<T_arg1>::type, + typename value3_type::template deduce_result_type<T_arg1>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround (T_arg1 _A_1) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1>::type, + typename value2_type::template deduce_result_type<T_arg1>::type, + typename value3_type::template deduce_result_type<T_arg1>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass>(_A_1)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator() (T_arg1 _A_1,T_arg2 _A_2) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>(_A_1,_A_2)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>(_A_1,_A_2,_A_3)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>(_A_1,_A_2,_A_3,_A_4)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator() (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround (T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { return this->func_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename value1_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename value2_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type, + typename value3_type::template deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type>( + this->value1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + this->value2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + this->value3_.SIGC_WORKAROUND_OPERATOR_PARENTHESES< + typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>(_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + lambda_group3(typename type_trait<T_functor>::take _A_func, typename type_trait<T_type1>::take _A_1,typename type_trait<T_type2>::take _A_2,typename type_trait<T_type3>::take _A_3) + : value1_(_A_1),value2_(_A_2),value3_(_A_3), func_(_A_func) {} + + value1_type value1_; + value2_type value2_; + value3_type value3_; + mutable functor_type func_; +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3> +typename lambda_group3<T_functor, T_type1,T_type2,T_type3>::result_type +lambda_group3<T_functor, T_type1,T_type2,T_type3>::operator ()() const + { return func_(value1_(),value2_(),value3_()); } + + +template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3> +void visit_each(const T_action& _A_action, + const lambda_group3<T_functor, T_type1,T_type2,T_type3>& _A_target) +{ + visit_each(_A_action, _A_target.value1_); + visit_each(_A_action, _A_target.value2_); + visit_each(_A_action, _A_target.value3_); + visit_each(_A_action, _A_target.func_); +} + + + +template <class T_functor, class T_type1> +lambda<lambda_group1<T_functor, typename unwrap_reference<T_type1>::type> > +group(const T_functor& _A_func, T_type1 _A_1) +{ + typedef lambda_group1<T_functor, typename unwrap_reference<T_type1>::type> T_lambda; + return lambda<T_lambda>(T_lambda(_A_func, _A_1)); +} + +template <class T_functor, class T_type1,class T_type2> +lambda<lambda_group2<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type> > +group(const T_functor& _A_func, T_type1 _A_1,T_type2 _A_2) +{ + typedef lambda_group2<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type> T_lambda; + return lambda<T_lambda>(T_lambda(_A_func, _A_1,_A_2)); +} + +template <class T_functor, class T_type1,class T_type2,class T_type3> +lambda<lambda_group3<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type,typename unwrap_reference<T_type3>::type> > +group(const T_functor& _A_func, T_type1 _A_1,T_type2 _A_2,T_type3 _A_3) +{ + typedef lambda_group3<T_functor, typename unwrap_reference<T_type1>::type,typename unwrap_reference<T_type2>::type,typename unwrap_reference<T_type3>::type> T_lambda; + return lambda<T_lambda>(T_lambda(_A_func, _A_1,_A_2,_A_3)); +} + + + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_LAMBDA_MACROS_GROUPHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/lambda/lambda.cc b/libs/sigc++2/sigc++/adaptors/lambda/lambda.cc new file mode 100644 index 0000000000..78fd516df2 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/lambda/lambda.cc @@ -0,0 +1,15 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#include <sigc++/adaptors/lambda/select.h> + +namespace sigc { + +const lambda<internal::lambda_select1> _1; +const lambda<internal::lambda_select2> _2; +const lambda<internal::lambda_select3> _3; +const lambda<internal::lambda_select4> _4; +const lambda<internal::lambda_select5> _5; +const lambda<internal::lambda_select6> _6; +const lambda<internal::lambda_select7> _7; + +} /* namespace sigc */ diff --git a/libs/sigc++2/sigc++/adaptors/lambda/lambda.h b/libs/sigc++2/sigc++/adaptors/lambda/lambda.h new file mode 100644 index 0000000000..487522ad10 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/lambda/lambda.h @@ -0,0 +1,28 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_LAMBDA_HPP_ +#define _SIGC_LAMBDA_HPP_ + +#include <sigc++/adaptors/lambda/base.h> +#include <sigc++/adaptors/lambda/select.h> +#include <sigc++/adaptors/lambda/operator.h> +#include <sigc++/adaptors/lambda/group.h> + +#endif /* _SIGC_LAMBDA_HPP_ */ diff --git a/libs/sigc++2/sigc++/adaptors/lambda/operator.h b/libs/sigc++2/sigc++/adaptors/lambda/operator.h new file mode 100644 index 0000000000..5d9e00bcde --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/lambda/operator.h @@ -0,0 +1,1697 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_LAMBDA_OPERATOR_HPP_ +#define _SIGC_LAMBDA_OPERATOR_HPP_ +#include <sigc++/adaptors/lambda/base.h> + +namespace sigc { + +/** Deduces the base type of a reference or a pointer. + * @ingroup internal + */ +template <class T_type> +struct dereference_trait + { typedef void type; }; + +template <class T_type> +struct dereference_trait<T_type*> + { typedef T_type type; }; + +template <class T_type> +struct dereference_trait<const T_type*> + { typedef const T_type type; }; + +template <class T_type> +struct dereference_trait<T_type*&> + { typedef T_type type; }; + +template <class T_type> +struct dereference_trait<const T_type*&> + { typedef const T_type type; }; + +template <class T_type> +struct dereference_trait<T_type* const&> + { typedef T_type type; }; + +template <class T_type> +struct dereference_trait<const T_type* const&> + { typedef const T_type type; }; + +template <class T_type> +struct arithmetic {}; + +template <class T_type> +struct bitwise {}; + +template <class T_type> +struct logical {}; + +template <class T_type> +struct relational {}; + +template <class T_type> +struct arithmetic_assign {}; + +template <class T_type> +struct bitwise_assign {}; + +template <class T_type> +struct other {}; + +template <class T_type> +struct unary_arithmetic {}; + +template <class T_type> +struct unary_bitwise {}; + +template <class T_type> +struct unary_logical {}; + +template <class T_type> +struct unary_other {}; + +template <class T_type> +struct cast_ {}; + +struct plus {}; +struct minus {}; +struct multiplies {}; +struct divides {}; +struct modulus {}; +struct leftshift {}; +struct rightshift {}; +struct and_ {}; +struct or_ {}; +struct xor_ {}; +struct less {}; +struct greater {}; +struct less_equal {}; +struct greater_equal {}; +struct equal_to {}; +struct not_equal_to {}; +struct subscript {}; +struct assign {}; +struct pre_increment {}; +struct pre_decrement {}; +struct negate {}; +struct not_ {}; +struct address {}; +struct dereference {}; +struct reinterpret_ {}; +struct static_ {}; +struct dynamic_ {}; + +template <class T_action, class T_test1, class T_test2> +struct lambda_action_deduce_result_type + { typedef typename type_trait<T_test1>::type type; }; // TODO: e.g. T_test1=int, T_test2=double yields int but it should yield double ! + +template <class T_action, class T_test1, class T_test2> +struct lambda_action_deduce_result_type<logical<T_action>, T_test1, T_test2> + { typedef bool type; }; + +template <class T_action, class T_test1, class T_test2> +struct lambda_action_deduce_result_type<relational<T_action>, T_test1, T_test2> + { typedef bool type; }; + +template <class T_action, class T_test1, class T_test2> +struct lambda_action_deduce_result_type<arithmetic_assign<T_action>, T_test1, T_test2> + { typedef T_test1 type; }; + +template <class T_action, class T_test1, class T_test2> +struct lambda_action_deduce_result_type<bitwise_assign<T_action>, T_test1, T_test2> + { typedef T_test1 type; }; + +template <class T_test1, class T_test2> +struct lambda_action_deduce_result_type<other<subscript>, T_test1, T_test2> + { typedef typename type_trait<typename dereference_trait<T_test1>::type>::pass type; }; + +template <class T_action, class T_test> +struct lambda_action_unary_deduce_result_type + { typedef typename type_trait<T_test>::type type; }; + +template <class T_action, class T_type, class T_test> +struct lambda_action_convert_deduce_result_type + { typedef typename type_trait<T_type>::type type; }; + +template <class T_action, class T_test> +struct lambda_action_unary_deduce_result_type<unary_logical<T_action>, T_test> + { typedef bool type; }; + +template <class T_test> +struct lambda_action_unary_deduce_result_type<unary_other<address>, T_test> + { typedef typename type_trait<T_test>::pointer type; }; + +template <class T_test> +struct lambda_action_unary_deduce_result_type<unary_other<dereference>, T_test> + { typedef typename type_trait<typename dereference_trait<T_test>::type>::pass type; }; + + + +template <class T_action> +struct lambda_action {}; + +template <class T_action> +struct lambda_action_unary {}; + +template <class T_action, class T_type> +struct lambda_action_convert {}; + +template <> +struct lambda_action<arithmetic<plus> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic<plus>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 + _A_2; } +}; + +template <> +struct lambda_action<arithmetic<minus> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic<minus>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 - _A_2; } +}; + +template <> +struct lambda_action<arithmetic<multiplies> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic<multiplies>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 * _A_2; } +}; + +template <> +struct lambda_action<arithmetic<divides> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic<divides>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 / _A_2; } +}; + +template <> +struct lambda_action<arithmetic<modulus> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic<modulus>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 % _A_2; } +}; + +template <> +struct lambda_action<bitwise<leftshift> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise<leftshift>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 << _A_2; } +}; + +template <> +struct lambda_action<bitwise<rightshift> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise<rightshift>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 >> _A_2; } +}; + +template <> +struct lambda_action<bitwise<and_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise<and_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 & _A_2; } +}; + +template <> +struct lambda_action<bitwise<or_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise<or_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 | _A_2; } +}; + +template <> +struct lambda_action<bitwise<xor_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise<xor_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 ^ _A_2; } +}; + +template <> +struct lambda_action<logical<and_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<logical<and_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 && _A_2; } +}; + +template <> +struct lambda_action<logical<or_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<logical<or_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 || _A_2; } +}; + +template <> +struct lambda_action<relational<less> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<relational<less>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 < _A_2; } +}; + +template <> +struct lambda_action<relational<greater> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<relational<greater>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 > _A_2; } +}; + +template <> +struct lambda_action<relational<less_equal> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<relational<less_equal>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 <= _A_2; } +}; + +template <> +struct lambda_action<relational<greater_equal> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<relational<greater_equal>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 >= _A_2; } +}; + +template <> +struct lambda_action<relational<equal_to> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<relational<equal_to>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 == _A_2; } +}; + +template <> +struct lambda_action<relational<not_equal_to> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<relational<not_equal_to>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 != _A_2; } +}; + +template <> +struct lambda_action<arithmetic_assign<plus> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic_assign<plus>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 += _A_2; } +}; + +template <> +struct lambda_action<arithmetic_assign<minus> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic_assign<minus>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 -= _A_2; } +}; + +template <> +struct lambda_action<arithmetic_assign<multiplies> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic_assign<multiplies>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 *= _A_2; } +}; + +template <> +struct lambda_action<arithmetic_assign<divides> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic_assign<divides>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 /= _A_2; } +}; + +template <> +struct lambda_action<arithmetic_assign<modulus> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<arithmetic_assign<modulus>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 %= _A_2; } +}; + +template <> +struct lambda_action<bitwise_assign<leftshift> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise_assign<leftshift>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 <<= _A_2; } +}; + +template <> +struct lambda_action<bitwise_assign<rightshift> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise_assign<rightshift>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 >>= _A_2; } +}; + +template <> +struct lambda_action<bitwise_assign<and_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise_assign<and_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 &= _A_2; } +}; + +template <> +struct lambda_action<bitwise_assign<or_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise_assign<or_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 |= _A_2; } +}; + +template <> +struct lambda_action<bitwise_assign<xor_> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<bitwise_assign<xor_>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 ^= _A_2; } +}; + +template <> +struct lambda_action<other<subscript> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<other<subscript>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1[_A_2]; } +}; + +template <> +struct lambda_action<other<assign> > +{ + template <class T_arg1, class T_arg2> + static typename lambda_action_deduce_result_type<other<assign>, T_arg1, T_arg2>::type + do_action(T_arg1 _A_1, T_arg2 _A_2) + { return _A_1 = _A_2; } +}; + +template <> +struct lambda_action_unary<unary_arithmetic<pre_increment> > +{ + template <class T_arg> + static typename lambda_action_unary_deduce_result_type<unary_arithmetic<pre_increment>, T_arg>::type + do_action(T_arg _Aa) + { return ++_Aa; } +}; + +template <> +struct lambda_action_unary<unary_arithmetic<pre_decrement> > +{ + template <class T_arg> + static typename lambda_action_unary_deduce_result_type<unary_arithmetic<pre_decrement>, T_arg>::type + do_action(T_arg _Aa) + { return --_Aa; } +}; + +template <> +struct lambda_action_unary<unary_arithmetic<negate> > +{ + template <class T_arg> + static typename lambda_action_unary_deduce_result_type<unary_arithmetic<negate>, T_arg>::type + do_action(T_arg _Aa) + { return -_Aa; } +}; + +template <> +struct lambda_action_unary<unary_bitwise<not_> > +{ + template <class T_arg> + static typename lambda_action_unary_deduce_result_type<unary_bitwise<not_>, T_arg>::type + do_action(T_arg _Aa) + { return ~_Aa; } +}; + +template <> +struct lambda_action_unary<unary_logical<not_> > +{ + template <class T_arg> + static typename lambda_action_unary_deduce_result_type<unary_logical<not_>, T_arg>::type + do_action(T_arg _Aa) + { return !_Aa; } +}; + +template <> +struct lambda_action_unary<unary_other<address> > +{ + template <class T_arg> + static typename lambda_action_unary_deduce_result_type<unary_other<address>, T_arg>::type + do_action(T_arg _Aa) + { return &_Aa; } +}; + +template <> +struct lambda_action_unary<unary_other<dereference> > +{ + template <class T_arg> + static typename lambda_action_unary_deduce_result_type<unary_other<dereference>, T_arg>::type + do_action(T_arg _Aa) + { return *_Aa; } +}; + +template <class T_type> +struct lambda_action_convert<cast_<reinterpret_>, T_type> +{ + template <class T_arg> + static typename lambda_action_convert_deduce_result_type<cast_<reinterpret_>, T_type, T_arg>::type + do_action(T_arg _Aa) + { return reinterpret_cast<T_type>(_Aa); } +}; + +template <class T_type> +struct lambda_action_convert<cast_<static_>, T_type> +{ + template <class T_arg> + static typename lambda_action_convert_deduce_result_type<cast_<static_>, T_type, T_arg>::type + do_action(T_arg _Aa) + { return static_cast<T_type>(_Aa); } +}; + +template <class T_type> +struct lambda_action_convert<cast_<dynamic_>, T_type> +{ + template <class T_arg> + static typename lambda_action_convert_deduce_result_type<cast_<dynamic_>, T_type, T_arg>::type + do_action(T_arg _Aa) + { return dynamic_cast<T_type>(_Aa); } +}; + + + +template <class T_action, class T_type1, class T_type2> +struct lambda_operator : public lambda_base +{ + typedef typename lambda<T_type1>::lambda_type arg1_type; + typedef typename lambda<T_type2>::lambda_type arg2_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename arg1_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type left_type; + typedef typename arg2_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type right_type; + typedef typename lambda_action_deduce_result_type<T_action, left_type, right_type>::type type; + }; + typedef typename lambda_action_deduce_result_type< + T_action, + typename arg1_type::result_type, + typename arg2_type::result_type + >::type result_type; + + result_type + operator ()() const; + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator ()(T_arg1 _A_1) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_1) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1)); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2)); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3)); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4)); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5)); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { + return lambda_action<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::left_type, + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::right_type> + (arg1_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7), + arg2_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); + } + #endif //SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + + lambda_operator(typename type_trait<T_type1>::take a1, typename type_trait<T_type2>::take a2 ) + : arg1_(a1), arg2_(a2) {} + + arg1_type arg1_; + arg2_type arg2_; +}; + +template <class T_action, class T_type1, class T_type2> +typename lambda_operator<T_action, T_type1, T_type2>::result_type +lambda_operator<T_action, T_type1, T_type2>::operator ()() const + { return lambda_action<T_action>::template do_action< + typename arg1_type::result_type, + typename arg2_type::result_type> + (arg1_(), arg2_()); } + +template <class T_action, class T_lambda_action, class T_arg1, class T_arg2> +void visit_each(const T_action& _A_action, + const lambda_operator<T_lambda_action, T_arg1, T_arg2>& _A_target) +{ + visit_each(_A_action, _A_target.arg1_); + visit_each(_A_action, _A_target.arg2_); +} + + +template <class T_action, class T_type> +struct lambda_operator_unary : public lambda_base +{ + typedef typename lambda<T_type>::lambda_type arg_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename arg_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type operand_type; + typedef typename lambda_action_unary_deduce_result_type<T_action, operand_type>::type type; + }; + typedef typename lambda_action_unary_deduce_result_type< + T_action, + typename arg_type::result_type + >::type result_type; + + result_type + operator ()() const; + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator ()(T_arg1 _A_1) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_1) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1)); + } + #endif + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { + return lambda_action_unary<T_action>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); + } + #endif + + lambda_operator_unary(typename type_trait<T_type>::take a) + : arg_(a) {} + + arg_type arg_; +}; + +template <class T_action, class T_type> +typename lambda_operator_unary<T_action, T_type>::result_type +lambda_operator_unary<T_action, T_type>::operator ()() const + { return lambda_action_unary<T_action>::template do_action< + typename arg_type::result_type> + (arg_()); } + +template <class T_action, class T_lambda_action, class T_arg> +void visit_each(const T_action& _A_action, + const lambda_operator_unary<T_lambda_action, T_arg>& _A_target) +{ + visit_each(_A_action, _A_target.arg_); +} + + +template <class T_action, class T_type, class T_arg> +struct lambda_operator_convert : public lambda_base +{ + typedef typename lambda<T_arg>::lambda_type arg_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename arg_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type operand_type; + typedef typename lambda_action_convert_deduce_result_type<T_action, T_type, operand_type>::type type; + }; + typedef typename lambda_action_convert_deduce_result_type< + T_action, T_type, + typename arg_type::result_type + >::type result_type; + + result_type + operator ()() const; + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator ()(T_arg1 _A_1) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_1) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_1)); + } + #endif + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_1,_A_2)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_1,_A_2,_A_3)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_1,_A_2,_A_3,_A_4)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const + { + return lambda_action_convert<T_action, T_type>::template do_action< + typename deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::operand_type> + (arg_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7)); + } + #endif + + lambda_operator_convert(typename type_trait<T_arg>::take a) + : arg_(a) {} + + arg_type arg_; +}; + +template <class T_action, class T_type, class T_arg> +typename lambda_operator_convert<T_action, T_type, T_arg>::result_type +lambda_operator_convert<T_action, T_type, T_arg>::operator ()() const + { return lambda_action_convert<T_action, T_type>::template do_action< + typename arg_type::result_type> + (arg_()); } + +template <class T_action, class T_lambda_action, class T_type, class T_arg> +void visit_each(const T_action& _A_action, + const lambda_operator_convert<T_lambda_action, T_type, T_arg>& _A_target) +{ + visit_each(_A_action, _A_target.arg_); +} + + +// Operators for lambda action arithmetic<plus>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<plus>, T_arg1, T_arg2> > +operator + (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<plus>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<plus>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator + (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic<plus>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<plus>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator + (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<plus>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic<minus>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<minus>, T_arg1, T_arg2> > +operator - (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<minus>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<minus>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator - (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic<minus>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<minus>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator - (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<minus>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic<multiplies>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<multiplies>, T_arg1, T_arg2> > +operator * (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<multiplies>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<multiplies>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator * (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic<multiplies>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<multiplies>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator * (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<multiplies>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic<divides>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<divides>, T_arg1, T_arg2> > +operator / (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<divides>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<divides>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator / (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic<divides>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<divides>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator / (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<divides>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic<modulus>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<modulus>, T_arg1, T_arg2> > +operator % (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<modulus>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<modulus>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator % (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic<modulus>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic<modulus>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator % (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic<modulus>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise<leftshift>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<leftshift>, T_arg1, T_arg2> > +operator << (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<leftshift>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<leftshift>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator << (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise<leftshift>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<leftshift>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator << (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<leftshift>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise<rightshift>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<rightshift>, T_arg1, T_arg2> > +operator >> (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<rightshift>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<rightshift>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator >> (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise<rightshift>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<rightshift>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator >> (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<rightshift>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise<and_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<and_>, T_arg1, T_arg2> > +operator & (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<and_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<and_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator & (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise<and_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<and_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator & (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<and_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise<or_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<or_>, T_arg1, T_arg2> > +operator | (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<or_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<or_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator | (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise<or_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<or_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator | (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<or_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise<xor_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<xor_>, T_arg1, T_arg2> > +operator ^ (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<xor_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<xor_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator ^ (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise<xor_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise<xor_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator ^ (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise<xor_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action logical<and_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<logical<and_>, T_arg1, T_arg2> > +operator && (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<logical<and_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<logical<and_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator && (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<logical<and_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<logical<and_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator && (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<logical<and_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action logical<or_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<logical<or_>, T_arg1, T_arg2> > +operator || (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<logical<or_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<logical<or_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator || (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<logical<or_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<logical<or_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator || (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<logical<or_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action relational<less>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<less>, T_arg1, T_arg2> > +operator < (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<less>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<less>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator < (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<relational<less>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<less>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator < (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<less>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action relational<greater>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<greater>, T_arg1, T_arg2> > +operator > (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<greater>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<greater>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator > (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<relational<greater>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<greater>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator > (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<greater>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action relational<less_equal>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<less_equal>, T_arg1, T_arg2> > +operator <= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<less_equal>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<less_equal>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator <= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<relational<less_equal>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<less_equal>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator <= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<less_equal>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action relational<greater_equal>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<greater_equal>, T_arg1, T_arg2> > +operator >= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<greater_equal>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<greater_equal>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator >= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<relational<greater_equal>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<greater_equal>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator >= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<greater_equal>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action relational<equal_to>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<equal_to>, T_arg1, T_arg2> > +operator == (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<equal_to>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<equal_to>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator == (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<relational<equal_to>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<equal_to>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator == (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<equal_to>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action relational<not_equal_to>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<not_equal_to>, T_arg1, T_arg2> > +operator != (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<not_equal_to>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<not_equal_to>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator != (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<relational<not_equal_to>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<relational<not_equal_to>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator != (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<relational<not_equal_to>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic_assign<plus>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<plus>, T_arg1, T_arg2> > +operator += (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<plus>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<plus>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator += (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic_assign<plus>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<plus>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator += (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<plus>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic_assign<minus>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<minus>, T_arg1, T_arg2> > +operator -= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<minus>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<minus>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator -= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic_assign<minus>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<minus>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator -= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<minus>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic_assign<multiplies>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<multiplies>, T_arg1, T_arg2> > +operator *= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<multiplies>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<multiplies>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator *= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic_assign<multiplies>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<multiplies>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator *= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<multiplies>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic_assign<divides>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<divides>, T_arg1, T_arg2> > +operator /= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<divides>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<divides>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator /= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic_assign<divides>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<divides>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator /= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<divides>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action arithmetic_assign<modulus>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<modulus>, T_arg1, T_arg2> > +operator %= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<modulus>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<modulus>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator %= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<arithmetic_assign<modulus>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<arithmetic_assign<modulus>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator %= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<arithmetic_assign<modulus>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise_assign<leftshift>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<leftshift>, T_arg1, T_arg2> > +operator <<= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<leftshift>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<leftshift>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator <<= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise_assign<leftshift>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<leftshift>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator <<= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<leftshift>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise_assign<rightshift>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<rightshift>, T_arg1, T_arg2> > +operator >>= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<rightshift>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<rightshift>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator >>= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise_assign<rightshift>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<rightshift>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator >>= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<rightshift>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise_assign<and_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<and_>, T_arg1, T_arg2> > +operator &= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<and_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<and_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator &= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise_assign<and_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<and_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator &= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<and_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise_assign<or_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<or_>, T_arg1, T_arg2> > +operator |= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<or_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<or_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator |= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise_assign<or_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<or_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator |= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<or_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operators for lambda action bitwise_assign<xor_>. At least one of the arguments needs to be of type lamdba, hence the overloads. +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<xor_>, T_arg1, T_arg2> > +operator ^= (const lambda<T_arg1>& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<xor_>, T_arg1, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2.value_)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<xor_>, T_arg1, typename unwrap_reference<T_arg2>::type> > +operator ^= (const lambda<T_arg1>& a1, const T_arg2& a2) +{ typedef lambda_operator<bitwise_assign<xor_>, T_arg1, typename unwrap_reference<T_arg2>::type> operator_type; + return lambda<operator_type>(operator_type(a1.value_,a2)); } +template <class T_arg1, class T_arg2> +lambda<lambda_operator<bitwise_assign<xor_>, typename unwrap_reference<T_arg1>::type, T_arg2> > +operator ^= (const T_arg1& a1, const lambda<T_arg2>& a2) +{ typedef lambda_operator<bitwise_assign<xor_>, typename unwrap_reference<T_arg1>::type, T_arg2> operator_type; + return lambda<operator_type>(operator_type(a1,a2.value_)); } + +// Operator for lambda action unary_arithmetic<pre_increment>. +template <class T_arg> +lambda<lambda_operator_unary<unary_arithmetic<pre_increment>, T_arg> > +operator ++ (const lambda<T_arg>& a) +{ typedef lambda_operator_unary<unary_arithmetic<pre_increment>, T_arg> operator_type; + return lambda<operator_type>(operator_type(a.value_)); } + +// Operator for lambda action unary_arithmetic<pre_decrement>. +template <class T_arg> +lambda<lambda_operator_unary<unary_arithmetic<pre_decrement>, T_arg> > +operator -- (const lambda<T_arg>& a) +{ typedef lambda_operator_unary<unary_arithmetic<pre_decrement>, T_arg> operator_type; + return lambda<operator_type>(operator_type(a.value_)); } + +// Operator for lambda action unary_arithmetic<negate>. +template <class T_arg> +lambda<lambda_operator_unary<unary_arithmetic<negate>, T_arg> > +operator - (const lambda<T_arg>& a) +{ typedef lambda_operator_unary<unary_arithmetic<negate>, T_arg> operator_type; + return lambda<operator_type>(operator_type(a.value_)); } + +// Operator for lambda action unary_bitwise<not_>. +template <class T_arg> +lambda<lambda_operator_unary<unary_bitwise<not_>, T_arg> > +operator ~ (const lambda<T_arg>& a) +{ typedef lambda_operator_unary<unary_bitwise<not_>, T_arg> operator_type; + return lambda<operator_type>(operator_type(a.value_)); } + +// Operator for lambda action unary_logical<not_>. +template <class T_arg> +lambda<lambda_operator_unary<unary_logical<not_>, T_arg> > +operator ! (const lambda<T_arg>& a) +{ typedef lambda_operator_unary<unary_logical<not_>, T_arg> operator_type; + return lambda<operator_type>(operator_type(a.value_)); } + +// Operator for lambda action unary_other<address>. +template <class T_arg> +lambda<lambda_operator_unary<unary_other<address>, T_arg> > +operator & (const lambda<T_arg>& a) +{ typedef lambda_operator_unary<unary_other<address>, T_arg> operator_type; + return lambda<operator_type>(operator_type(a.value_)); } + +// Operator for lambda action unary_other<dereference>. +template <class T_arg> +lambda<lambda_operator_unary<unary_other<dereference>, T_arg> > +operator * (const lambda<T_arg>& a) +{ typedef lambda_operator_unary<unary_other<dereference>, T_arg> operator_type; + return lambda<operator_type>(operator_type(a.value_)); } + +// Creators for lambda action cast_<reinterpret_>. +template <class T_type, class T_arg> +lambda<lambda_operator_convert<cast_<reinterpret_>, T_type, typename unwrap_lambda_type<T_arg>::type> > +reinterpret_cast_(const T_arg& a) +{ typedef lambda_operator_convert<cast_<reinterpret_>, T_type, typename unwrap_lambda_type<T_arg>::type> operator_type; + return lambda<operator_type>(operator_type(unwrap_lambda_value(a))); } + +// Creators for lambda action cast_<static_>. +template <class T_type, class T_arg> +lambda<lambda_operator_convert<cast_<static_>, T_type, typename unwrap_lambda_type<T_arg>::type> > +static_cast_(const T_arg& a) +{ typedef lambda_operator_convert<cast_<static_>, T_type, typename unwrap_lambda_type<T_arg>::type> operator_type; + return lambda<operator_type>(operator_type(unwrap_lambda_value(a))); } + +// Creators for lambda action cast_<dynamic_>. +template <class T_type, class T_arg> +lambda<lambda_operator_convert<cast_<dynamic_>, T_type, typename unwrap_lambda_type<T_arg>::type> > +dynamic_cast_(const T_arg& a) +{ typedef lambda_operator_convert<cast_<dynamic_>, T_type, typename unwrap_lambda_type<T_arg>::type> operator_type; + return lambda<operator_type>(operator_type(unwrap_lambda_value(a))); } + + +} /* namespace sigc */ + +#endif /* _SIGC_LAMBDA_OPERATOR_HPP_ */ diff --git a/libs/sigc++2/sigc++/adaptors/lambda/select.h b/libs/sigc++2/sigc++/adaptors/lambda/select.h new file mode 100644 index 0000000000..7cbf3eccfb --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/lambda/select.h @@ -0,0 +1,346 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_LAMBDA_SELECT_HPP_ +#define _SIGC_LAMBDA_SELECT_HPP_ +#include <sigc++/adaptors/lambda/base.h> + +namespace sigc { + +namespace internal { +struct lambda_select1 : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_arg1 type; }; + typedef void result_type; // no operator ()() overload + + void operator ()() const; // not implemented + template <class T_arg1> + T_arg1 operator ()(T_arg1 _A_1) const { return _A_1; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + //Does not work: T_arg1 sun_forte_workaround(T_arg1 _A_1) const { return operator()( _A_1 ); } + T_arg1 sun_forte_workaround(T_arg1 _A_1) const { return _A_1; } + #endif + + template <class T_arg1,class T_arg2> + T_arg1 operator ()(T_arg1 _A_1,T_arg2 _A_2) const { return _A_1; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + //Does not work: T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const { return operator()( _A_1,_A_2 ); } + T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const { return _A_1; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + T_arg1 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return _A_1; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + //Does not work: T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return operator()( _A_1,_A_2,_A_3 ); } + T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return _A_1; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + T_arg1 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_1; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + //Does not work: T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return operator()( _A_1,_A_2,_A_3,_A_4 ); } + T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_1; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + T_arg1 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_1; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + //Does not work: T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5 ); } + T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_1; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + T_arg1 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_1; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + //Does not work: T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6 ); } + T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_1; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + T_arg1 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_1; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + //Does not work: T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7 ); } + T_arg1 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_1; } + #endif + +}; + +struct lambda_select2 : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_arg2 type; }; + typedef void result_type; // no operator ()() overload + + void operator ()() const; // not implemented + template <class T_arg1,class T_arg2> + T_arg2 operator ()(T_arg1 _A_1,T_arg2 _A_2) const { return _A_2; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + //Does not work: T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const { return operator()( _A_1,_A_2 ); } + T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2) const { return _A_2; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + T_arg2 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return _A_2; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + //Does not work: T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return operator()( _A_1,_A_2,_A_3 ); } + T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return _A_2; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + T_arg2 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_2; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + //Does not work: T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return operator()( _A_1,_A_2,_A_3,_A_4 ); } + T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_2; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + T_arg2 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_2; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + //Does not work: T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5 ); } + T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_2; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + T_arg2 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_2; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + //Does not work: T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6 ); } + T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_2; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + T_arg2 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_2; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + //Does not work: T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7 ); } + T_arg2 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_2; } + #endif + +}; + +struct lambda_select3 : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_arg3 type; }; + typedef void result_type; // no operator ()() overload + + void operator ()() const; // not implemented + template <class T_arg1,class T_arg2,class T_arg3> + T_arg3 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return _A_3; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + //Does not work: T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return operator()( _A_1,_A_2,_A_3 ); } + T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3) const { return _A_3; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + T_arg3 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_3; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + //Does not work: T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return operator()( _A_1,_A_2,_A_3,_A_4 ); } + T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_3; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + T_arg3 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_3; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + //Does not work: T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5 ); } + T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_3; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + T_arg3 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_3; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + //Does not work: T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6 ); } + T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_3; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + T_arg3 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_3; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + //Does not work: T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7 ); } + T_arg3 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_3; } + #endif + +}; + +struct lambda_select4 : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_arg4 type; }; + typedef void result_type; // no operator ()() overload + + void operator ()() const; // not implemented + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + T_arg4 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_4; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + //Does not work: T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return operator()( _A_1,_A_2,_A_3,_A_4 ); } + T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4) const { return _A_4; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + T_arg4 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_4; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + //Does not work: T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5 ); } + T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_4; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + T_arg4 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_4; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + //Does not work: T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6 ); } + T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_4; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + T_arg4 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_4; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + //Does not work: T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7 ); } + T_arg4 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_4; } + #endif + +}; + +struct lambda_select5 : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_arg5 type; }; + typedef void result_type; // no operator ()() overload + + void operator ()() const; // not implemented + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + T_arg5 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_5; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + //Does not work: T_arg5 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5 ); } + T_arg5 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5) const { return _A_5; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + T_arg5 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_5; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + //Does not work: T_arg5 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6 ); } + T_arg5 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_5; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + T_arg5 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_5; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + //Does not work: T_arg5 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7 ); } + T_arg5 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_5; } + #endif + +}; + +struct lambda_select6 : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_arg6 type; }; + typedef void result_type; // no operator ()() overload + + void operator ()() const; // not implemented + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + T_arg6 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_6; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + //Does not work: T_arg6 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6 ); } + T_arg6 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6) const { return _A_6; } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + T_arg6 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_6; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + //Does not work: T_arg6 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7 ); } + T_arg6 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_6; } + #endif + +}; + +struct lambda_select7 : public lambda_base +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_arg7 type; }; + typedef void result_type; // no operator ()() overload + + void operator ()() const; // not implemented + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + T_arg7 operator ()(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_7; } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + //Does not work: T_arg7 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return operator()( _A_1,_A_2,_A_3,_A_4,_A_5,_A_6,_A_7 ); } + T_arg7 sun_forte_workaround(T_arg1 _A_1,T_arg2 _A_2,T_arg3 _A_3,T_arg4 _A_4,T_arg5 _A_5,T_arg6 _A_6,T_arg7 _A_7) const { return _A_7; } + #endif + +}; + + +} /* namespace internal */ + +extern SIGC_API const lambda<internal::lambda_select1> _1; +extern SIGC_API const lambda<internal::lambda_select2> _2; +extern SIGC_API const lambda<internal::lambda_select3> _3; +extern SIGC_API const lambda<internal::lambda_select4> _4; +extern SIGC_API const lambda<internal::lambda_select5> _5; +extern SIGC_API const lambda<internal::lambda_select6> _6; +extern SIGC_API const lambda<internal::lambda_select7> _7; + + +} /* namespace sigc */ + +#endif /* _SIGC_LAMBDA_SELECT_HPP_ */ diff --git a/libs/sigc++2/sigc++/adaptors/retype.h b/libs/sigc++2/sigc++/adaptors/retype.h new file mode 100644 index 0000000000..502959d3cd --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/retype.h @@ -0,0 +1,1247 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_MACROS_RETYPEHM4_ +#define _SIGC_ADAPTORS_MACROS_RETYPEHM4_ +#include <sigc++/adaptors/adaptor_trait.h> +#include <sigc++/functors/ptr_fun.h> +#include <sigc++/functors/mem_fun.h> +#include <sigc++/functors/slot.h> + +namespace sigc { + +/** @defgroup retype retype(), retype_return() + * sigc::retype() alters a sigc::pointer_functor, a sigc::mem_functor or a sigc::slot + * in that it makes C-style casts to the functor's parameter types + * of all parameters passed through operator()(). + * + * Use this adaptor for inline conversion between numeric or other simple types. + * @par Example: + * @code + * void foo(int); + * sigc::retype(sigc::ptr_fun(&foo))(5.7F); // calls foo(5) + * @endcode + * + * The functor sigc::retype() returns can be passed into + * sigc::signal::connect() directly. + * + * @par Example: + * @code + * sigc::signal<void,float> some_signal; + * void foo(int); + * some_signal.connect(sigc::retype(sigc::ptr_fun(&foo))); + * @endcode + * + * This adaptor builds an exception in that it only works on sig::pointer_functor, + * sigc::mem_functor and sigc::slot because it needs sophisticated information about + * the parameter types that cannot be deduced from arbitrary functor types. + * + * sigc::retype_return() alters the return type of an arbitrary functor. + * Like in sigc::retype() a C-style cast is preformed. Usage sigc::retype_return() is + * not restricted to libsigc++ functor types but you need to + * specify the new return type as a template parameter. + * + * @par Example: + * @code + * float foo(); + * std::cout << sigc::retype_return<int>(&foo)(); // converts foo's return value to an integer + * @endcode + * + * @ingroup adaptors + */ + +/** Adaptor that performs C-style casts on the parameters passed on to the functor. + * Use the convenience function sigc::retype() to create an instance of retype_functor. + * + * The following template arguments are used: + * - @e T_functor Type of the functor to wrap. + * - @e T_type1 Type of @e T_functor's 1th argument. + * - @e T_type2 Type of @e T_functor's 2th argument. + * - @e T_type3 Type of @e T_functor's 3th argument. + * - @e T_type4 Type of @e T_functor's 4th argument. + * - @e T_type5 Type of @e T_functor's 5th argument. + * - @e T_type6 Type of @e T_functor's 6th argument. + * - @e T_type7 Type of @e T_functor's 7th argument. + * + * @ingroup retype + */ +template <class T_functor, class T_type1=nil,class T_type2=nil,class T_type3=nil,class T_type4=nil,class T_type5=nil,class T_type6=nil,class T_type7=nil> +struct retype_functor + : public adapts<T_functor> +{ + typedef typename adapts<T_functor>::adaptor_type adaptor_type; + + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef typename adaptor_type::template deduce_result_type<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>::type type; }; + typedef typename adapts<T_functor>::result_type result_type; + + result_type operator()(); + + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + operator()(T_arg1 _A_a1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take> + ((T_type1)_A_a1); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + typename deduce_result_type<T_arg1>::type + sun_forte_workaround(T_arg1 _A_a1) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take> + ((T_type1)_A_a1); + } + #endif + + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take> + ((T_type1)_A_a1,(T_type2)_A_a2); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + typename deduce_result_type<T_arg1,T_arg2>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take> + ((T_type1)_A_a1,(T_type2)_A_a2); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take,typename type_trait<T_type5>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take,typename type_trait<T_type5>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take,typename type_trait<T_type5>::take,typename type_trait<T_type6>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take,typename type_trait<T_type5>::take,typename type_trait<T_type6>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take,typename type_trait<T_type5>::take,typename type_trait<T_type6>::take,typename type_trait<T_type7>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6,(T_type7)_A_a7); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type + sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_type1>::take,typename type_trait<T_type2>::take,typename type_trait<T_type3>::take,typename type_trait<T_type4>::take,typename type_trait<T_type5>::take,typename type_trait<T_type6>::take,typename type_trait<T_type7>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6,(T_type7)_A_a7); + } + #endif + + + /** Constructs a retype_functor object that performs C-style casts on the parameters passed on to the functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit retype_functor(typename type_trait<T_functor>::take _A_functor) + : adapts<T_functor>(_A_functor) + {} +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +typename retype_functor<T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>::result_type +retype_functor<T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>::operator()() + { return this->functor_(); } + + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::retype_functor performs a functor on the + * functor stored in the sigc::retype_functor object. + * + * @ingroup retype + */ +template <class T_action, class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +void visit_each(const T_action& _A_action, + const retype_functor<T_functor, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); +} + + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::slot. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return> +inline retype_functor<pointer_functor0<T_return> > +retype(const pointer_functor0<T_return>& _A_functor) +{ return retype_functor<pointer_functor0<T_return> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_arg1, class T_return> +inline retype_functor<pointer_functor1<T_arg1, T_return>, T_arg1 > +retype(const pointer_functor1<T_arg1, T_return>& _A_functor) +{ return retype_functor<pointer_functor1<T_arg1, T_return>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_arg1,class T_arg2, class T_return> +inline retype_functor<pointer_functor2<T_arg1, T_arg2, T_return>, T_arg1,T_arg2 > +retype(const pointer_functor2<T_arg1,T_arg2, T_return>& _A_functor) +{ return retype_functor<pointer_functor2<T_arg1, T_arg2, T_return>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return> +inline retype_functor<pointer_functor3<T_arg1, T_arg2, T_arg3, T_return>, T_arg1,T_arg2,T_arg3 > +retype(const pointer_functor3<T_arg1,T_arg2,T_arg3, T_return>& _A_functor) +{ return retype_functor<pointer_functor3<T_arg1, T_arg2, T_arg3, T_return>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return> +inline retype_functor<pointer_functor4<T_arg1, T_arg2, T_arg3, T_arg4, T_return>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const pointer_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return>& _A_functor) +{ return retype_functor<pointer_functor4<T_arg1, T_arg2, T_arg3, T_arg4, T_return>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return> +inline retype_functor<pointer_functor5<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_return>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const pointer_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return>& _A_functor) +{ return retype_functor<pointer_functor5<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_return>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return> +inline retype_functor<pointer_functor6<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_return>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const pointer_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return>& _A_functor) +{ return retype_functor<pointer_functor6<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_return>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::pointer_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return> +inline retype_functor<pointer_functor7<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7, T_return>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const pointer_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return>& _A_functor) +{ return retype_functor<pointer_functor7<T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7, T_return>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<mem_functor0<T_return, T_obj> > +retype(const mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<const_mem_functor0<T_return, T_obj> > +retype(const const_mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<const_mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<const_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const const_mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<const_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<const_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<const_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<const_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<const_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<const_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<const_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<const_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<const_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<const_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<const_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<const_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<const_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<volatile_mem_functor0<T_return, T_obj> > +retype(const volatile_mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<volatile_mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const volatile_mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<const_volatile_mem_functor0<T_return, T_obj> > +retype(const const_volatile_mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<const_volatile_mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<const_volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const const_volatile_mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<const_volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<const_volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<const_volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<const_volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<const_volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<const_volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<const_volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<const_volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<const_volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<const_volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<const_volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<const_volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<const_volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<bound_mem_functor0<T_return, T_obj> > +retype(const bound_mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<bound_mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<bound_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const bound_mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<bound_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<bound_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<bound_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<bound_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<bound_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<bound_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<bound_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<bound_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<bound_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<bound_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<bound_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<bound_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<bound_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<bound_const_mem_functor0<T_return, T_obj> > +retype(const bound_const_mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<bound_const_mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<bound_const_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const bound_const_mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<bound_const_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<bound_const_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<bound_const_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<bound_const_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<bound_const_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<bound_const_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<bound_const_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<bound_const_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<bound_const_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<bound_const_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<bound_const_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<bound_const_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<bound_const_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<bound_volatile_mem_functor0<T_return, T_obj> > +retype(const bound_volatile_mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<bound_volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const bound_volatile_mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<bound_volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<bound_volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<bound_volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<bound_volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<bound_volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<bound_volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<bound_volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj> +inline retype_functor<bound_const_volatile_mem_functor0<T_return, T_obj> > +retype(const bound_const_volatile_mem_functor0<T_return, T_obj>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor0<T_return, T_obj> > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1> +inline retype_functor<bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > +retype(const bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>, T_arg1 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +inline retype_functor<bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > +retype(const bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1, T_arg2>, T_arg1,T_arg2 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +inline retype_functor<bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > +retype(const bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1, T_arg2, T_arg3>, T_arg1,T_arg2,T_arg3 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline retype_functor<bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > +retype(const bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4>, T_arg1,T_arg2,T_arg3,T_arg4 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline retype_functor<bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > +retype(const bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline retype_functor<bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > +retype(const bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6 > + (_A_functor); } + +/** Creates an adaptor of type sigc::retype_functor which performs C-style casts on the parameters passed on to the functor. + * This function template specialization works on sigc::bound_const_volatile_mem_functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing C-style casts on the paramters passed on. + * + * @ingroup retype + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline retype_functor<bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > +retype(const bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_functor) +{ return retype_functor<bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7 > + (_A_functor); } + + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_RETYPEHM4_ */ diff --git a/libs/sigc++2/sigc++/adaptors/retype_return.h b/libs/sigc++2/sigc++/adaptors/retype_return.h new file mode 100644 index 0000000000..ea413a0b30 --- /dev/null +++ b/libs/sigc++2/sigc++/adaptors/retype_return.h @@ -0,0 +1,308 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_ +#define _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_ +#include <sigc++/adaptors/adaptor_trait.h> + +namespace sigc { + +/** Adaptor that perform a C-style cast on the return value of a functor. + * Use the convenience function sigc::retype_return() to create an instance of retype_return_functor. + * + * The following template arguments are used: + * - @e T_return Target type of the C-style cast. + * - @e T_functor Type of the functor to wrap. + * + * @ingroup retype + */ +template <class T_return, class T_functor> +struct retype_return_functor : public adapts<T_functor> +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_return type; }; + typedef T_return result_type; + + T_return operator()(); + + template <class T_arg1> + inline T_return operator()(T_arg1 _A_a1) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + inline T_return sun_forte_workaround(T_arg1 _A_a1) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1)); + } + #endif + + template <class T_arg1,class T_arg2> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7)); + } + #endif + + retype_return_functor() {} + + /** Constructs a retype_return_functor object that perform a C-style cast on the return value of the passed functor. + * @param _A_functor Functor to invoke from operator()(). + */ + explicit retype_return_functor(typename type_trait<T_functor>::take _A_functor) + : adapts<T_functor>(_A_functor) + {} +}; + +template <class T_return, class T_functor> +T_return retype_return_functor<T_return, T_functor>::operator()() + { return T_return(this->functor_()); } + + +/** Adaptor that perform a C-style cast on the return value of a functor. + * This template specialization is for a void return. It drops the return value of the functor it invokes. + * Use the convenience function sigc::hide_return() to create an instance of sigc::retype_return_functor<void>. + * + * @ingroup retype + */ +/* The void specialization needed because of explicit cast to T_return. + */ +template <class T_functor> +struct retype_return_functor<void, T_functor> : public adapts<T_functor> +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef void type; }; + typedef void result_type; + + void operator()(); + + template <class T_arg1> + inline void operator()(T_arg1 _A_a1) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + inline void sun_forte_workaround(T_arg1 _A_a1) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass> + (_A_a1); + } + #endif + + template <class T_arg1,class T_arg2> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass> + (_A_a1,_A_a2); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass> + (_A_a1,_A_a2,_A_a3); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass> + (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + } + #endif + + retype_return_functor() {} + retype_return_functor(typename type_trait<T_functor>::take _A_functor) + : adapts<T_functor>(_A_functor) + {} +}; + +template <class T_functor> +void retype_return_functor<void, T_functor>::operator()() + { this->functor_(); } + + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::retype_return_functor performs a functor on the + * functor stored in the sigc::retype_return_functor object. + * + * @ingroup retype + */ +template <class T_action, class T_return, class T_functor> +void visit_each(const T_action& _A_action, + const retype_return_functor<T_return, T_functor>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); +} + + +/** Creates an adaptor of type sigc::retype_return_functor which performs a C-style cast on the return value of the passed functor. + * The template argument @e T_return specifies the target type of the cast. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor performing a C-style casts on the return value. + * + * @ingroup retype + */ +template <class T_return, class T_functor> +inline retype_return_functor<T_return, T_functor> +retype_return(const T_functor& _A_functor) + { return retype_return_functor<T_return, T_functor>(_A_functor); } + +/** Creates an adaptor of type sigc::retype_return_functor which drops the return value of the passed functor. + * + * @param _A_functor Functor that should be wrapped. + * @return Adaptor that executes @e _A_functor dropping its return value. + * + * @ingroup hide + */ +template <class T_functor> +inline retype_return_functor<void, T_functor> +hide_return(const T_functor& _A_functor) + { return retype_return_functor<void, T_functor>(_A_functor); } + +} /* namespace sigc */ +#endif /* _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_ */ diff --git a/libs/sigc++2/sigc++/bind.h b/libs/sigc++2/sigc++/bind.h new file mode 100644 index 0000000000..bebf08b58b --- /dev/null +++ b/libs/sigc++2/sigc++/bind.h @@ -0,0 +1,65 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_BIND_HPP_ +#define _SIGC_BIND_HPP_ + +#include <sigc++/adaptors/bind.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +template <class T_bound1, class T_functor> +inline ::sigc::bind_functor<-1, T_functor, + typename ::sigc::unwrap_reference<T_bound1>::type> +bind(const T_functor& _A_functor, T_bound1 _A_b1) +{ return ::sigc::bind_functor<-1, T_functor, + typename ::sigc::unwrap_reference<T_bound1>::type> + (_A_functor, _A_b1); +} + +template <class T_bound1, class T_bound2, class T_functor> +inline ::sigc::bind_functor<-1, T_functor, + typename ::sigc::unwrap_reference<T_bound1>::type, + typename ::sigc::unwrap_reference<T_bound2>::type> +bind(const T_functor& _A_functor, T_bound1 _A_b1, T_bound2 _A_b2) +{ return ::sigc::bind_functor<-1, T_functor, + typename ::sigc::unwrap_reference<T_bound1>::type, + typename ::sigc::unwrap_reference<T_bound2>::type> + (_A_functor, _A_b1, _A_b2); +} + +template <class T_bound1, class T_bound2, class T_bound3, class T_functor> +inline ::sigc::bind_functor<-1, T_functor, + typename ::sigc::unwrap_reference<T_bound1>::type, + typename ::sigc::unwrap_reference<T_bound2>::type, + typename ::sigc::unwrap_reference<T_bound3>::type> +bind(const T_functor& _A_functor, T_bound1 _A_b1, T_bound2 _A_b2,T_bound3 _A_b3) +{ return ::sigc::bind_functor<-1, T_functor, + typename ::sigc::unwrap_reference<T_bound1>::type, + typename ::sigc::unwrap_reference<T_bound2>::type, + typename ::sigc::unwrap_reference<T_bound3>::type> + (_A_functor, _A_b1, _A_b2, _A_b3); +} + +} + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ + +#endif /* _SIGC_BIND_HPP_ */ diff --git a/libs/sigc++2/sigc++/bind_return.h b/libs/sigc++2/sigc++/bind_return.h new file mode 100644 index 0000000000..a0796cf2c3 --- /dev/null +++ b/libs/sigc++2/sigc++/bind_return.h @@ -0,0 +1,34 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_BIND_RETURN_HPP_ +#define _SIGC_BIND_RETURN_HPP_ + +#include <sigc++/adaptors/bind_return.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +using ::sigc::bind_return; + +} + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ + +#endif /* _SIGC_BIND_RETURN_HPP_ */ diff --git a/libs/sigc++2/sigc++/class_slot.h b/libs/sigc++2/sigc++/class_slot.h new file mode 100644 index 0000000000..df644bfd04 --- /dev/null +++ b/libs/sigc++2/sigc++/class_slot.h @@ -0,0 +1,568 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + + +#ifndef _SIGC_MACROS_CLASS_SLOTHM4_ +#define _SIGC_MACROS_CLASS_SLOTHM4_ + +#include <sigc++/slot.h> +#include <sigc++/functors/mem_fun.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +// slot_class() +/** Creates a functor of type SigC::Slot0 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot0<T_return> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)() ) +{ return ::sigc::bound_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot1<T_return, T_arg1> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1) ) +{ return ::sigc::bound_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot2<T_return, T_arg1,T_arg2> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2) ) +{ return ::sigc::bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return ::sigc::bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return ::sigc::bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return ::sigc::bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return ::sigc::bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ return ::sigc::bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +/** Creates a functor of type SigC::Slot0 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot0<T_return> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)() const) +{ return ::sigc::bound_const_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot1<T_return, T_arg1> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1) const) +{ return ::sigc::bound_const_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot2<T_return, T_arg1,T_arg2> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2) const) +{ return ::sigc::bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return ::sigc::bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return ::sigc::bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return ::sigc::bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return ::sigc::bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a const method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ return ::sigc::bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +/** Creates a functor of type SigC::Slot0 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot0<T_return> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)() volatile) +{ return ::sigc::bound_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot1<T_return, T_arg1> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1) volatile) +{ return ::sigc::bound_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot2<T_return, T_arg1,T_arg2> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2) volatile) +{ return ::sigc::bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return ::sigc::bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return ::sigc::bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return ::sigc::bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return ::sigc::bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot_class( T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ return ::sigc::bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +/** Creates a functor of type SigC::Slot0 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot0<T_return> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)() const volatile) +{ return ::sigc::bound_const_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot1<T_return, T_arg1> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1) const volatile) +{ return ::sigc::bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot2<T_return, T_arg1,T_arg2> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2) const volatile) +{ return ::sigc::bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return ::sigc::bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return ::sigc::bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return ::sigc::bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return ::sigc::bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a const volatile method and an object instance. + * + * This function is part of the compatibility module and therefore deprecated. + * Use sigc::mem_fun() instead. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot_class(const T_obj& _A_obj, T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ return ::sigc::bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + + +} + +#endif +#endif /* _SIGC_MACROS_CLASS_SLOTHM4_ */ diff --git a/libs/sigc++2/sigc++/compatibility.h b/libs/sigc++2/sigc++/compatibility.h new file mode 100644 index 0000000000..3c5006c0f0 --- /dev/null +++ b/libs/sigc++2/sigc++/compatibility.h @@ -0,0 +1,42 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_COMPATIBILITY_HPP_ +#define _SIGC_COMPATIBILITY_HPP_ + +#include <sigc++/signal.h> +#include <sigc++/connection.h> +#include <sigc++/object_slot.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +/** @defgroup compat Compatibility module + * This set of types and functions provides an API that is compatible to + * libsigc++-1.2. Some internal structures of libsigc++-1.2 are not available. + * + * All types and functions that are defined in namespace SigC are deprecated. + * Use the new libsigc++2 API that is defined in namespace sigc. + */ + +} + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ + +#endif /* _SIGC_COMPATIBILITY_HPP_ */ diff --git a/libs/sigc++2/sigc++/connection.cc b/libs/sigc++2/sigc++/connection.cc new file mode 100644 index 0000000000..8f4363482f --- /dev/null +++ b/libs/sigc++2/sigc++/connection.cc @@ -0,0 +1,111 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <sigc++/connection.h> +using namespace std; + +namespace sigc { + +connection::connection() +: slot_(0) +{} + +connection::connection(const connection& c) +: slot_(c.slot_) +{ + //Let the connection forget about the signal handler when the handler object dies: + if (slot_) + slot_->add_destroy_notify_callback(this, ¬ify); +} + +connection::connection(slot_base& sl) +: slot_(&sl) +{ + //Let the connection forget about the signal handler when the handler object dies: + slot_->add_destroy_notify_callback(this, ¬ify); +} + +connection& connection::operator=(const connection& c) +{ + set_slot(c.slot_); + return *this; +} + +connection::~connection() +{ + if (slot_) + slot_->remove_destroy_notify_callback(this); +} + +bool connection::empty() const +{ + return (!slot_ || slot_->empty()); +} + +bool connection::connected() const +{ + return !empty(); +} + +bool connection::blocked() const +{ + return (slot_ ? slot_->blocked() : false); +} + +bool connection::block(bool should_block) +{ + return (slot_ ? slot_->block(should_block) : false); +} + +bool connection::unblock() +{ + return (slot_ ? slot_->unblock() : false); +} + +void connection::disconnect() +{ + if (slot_) + slot_->disconnect(); // This notifies slot_'s parent. +} + +connection::operator bool() +{ + return !empty(); +} + +void connection::set_slot(slot_base* sl) +{ + if (slot_) + slot_->remove_destroy_notify_callback(this); + + slot_ = sl; + + if (slot_) + slot_->add_destroy_notify_callback(this, ¬ify); +} + +void* connection::notify(void* data) +{ + connection* self = (connection*)data; + self->slot_ = 0; + return 0; +} + +} /* namespace sigc */ diff --git a/libs/sigc++2/sigc++/connection.h b/libs/sigc++2/sigc++/connection.h new file mode 100644 index 0000000000..170db55618 --- /dev/null +++ b/libs/sigc++2/sigc++/connection.h @@ -0,0 +1,154 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_CONNECTION_HPP_ +#define _SIGC_CONNECTION_HPP_ +#include <sigc++config.h> +#include <sigc++/signal.h> + +namespace sigc { + +/** Convinience class for safe disconnection. + * Iterators must not be used beyond the lifetime of the list + * they work on. A connection object can be created from a + * slot list iterator and may safely be used to disconnect + * the referred slot at any time (disconnect()). If the slot + * has already been destroyed, disconnect() does nothing. empty() or + * operator bool() can be used to test whether the connection is + * still active. The connection can be blocked (block(), unblock()). + * + * This is possible because the connection object gets notified + * when the referred slot dies (notify()). + * + * @ingroup signal + */ +struct SIGC_API connection +{ + /** Constructs an empty connection object. */ + connection(); + + /** Constructs a connection object copying an existing one. + * @param c The connection object to make a copy from. + */ + connection(const connection& c); + + /** Constructs a connection object from a slot list iterator. + * @param it The slot list iterator to take the slot from. + */ + template <typename T_slot> + connection(const slot_iterator<T_slot>& it) : slot_(&(*it)) + { if (slot_) slot_->add_destroy_notify_callback(this, ¬ify); } + + /** Constructs a connection object from a slot object. + * This is only useful if you create your own slot list. + * @param sl The slot to operate on. + */ + explicit connection(slot_base& sl); + + /** Overrides this connection object copying another one. + * @param c The connection object to make a copy from. + */ + connection& operator=(const connection& c); + + /** Overrides this connection object with another slot list iterator. + * @param it The new slot list iterator to take the slot from. + */ + template <typename T_slot> + connection& operator=(const slot_iterator<T_slot>& it) + { set_slot(&(*it)); return *this; } + + ~connection(); + + /** Returns whether the connection is still active. + * @return @p false if the connection is still active. + */ + bool empty() const; + + /** Returns whether the connection is still active. + * @return @p true if the connection is still active. + */ + bool connected() const; + + /** Returns whether the connection is blocked. + * @return @p true if the connection is blocked. + */ + bool blocked() const; + + /** Sets or unsets the blocking state of this connection. + * See slot_base::block() for details. + * @param should_block Indicates whether the blocking state should be set or unset. + * @return @p true if the connection has been in blocking state before. + */ + bool block(bool should_block = true); + + /** Unsets the blocking state of this connection. + * @return @p true if the connection has been in blocking state before. + */ + bool unblock(); + + /// Disconnects the referred slot. + void disconnect(); + + /** Returns whether the connection is still active. + * @return @p true if the connection is still active. + */ + operator bool(); + + /** Callback that is executed when the referred slot is destroyed. + * @param d The connection object notified (@p this). + */ + static void* notify(void* data); + +private: + void set_slot(slot_base* sl); + + /* Referred slot. Set to zero from notify(). + * A value of zero indicates an "empty" connection. + */ + slot_base* slot_; +}; + +} /* namespace sigc */ + + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +/** Convinience class for safe disconnection. + * Iterators must not be used beyond the lifetime of the list + * they work on. A connection object can be created from a + * slot list iterator and may safely be used to disconnect + * the referred slot at any time (disconnect()). If the slot + * has already been destroyed, disconnect() does nothing. empty() or + * operator bool() can be used to test whether the connection is + * still active. The connection can be blocked (block(), unblock()). + * + * This is possible because the connection object gets notified + * when the referred slot dies (notify()). + * + * @deprecated Use sigc::connection instead. + * @ingroup compat + */ +typedef ::sigc::connection Connection; + +} + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ + +#endif /* _SIGC_TRACKABLE_HPP_ */ diff --git a/libs/sigc++2/sigc++/functors/functor_trait.h b/libs/sigc++2/sigc++/functors/functor_trait.h new file mode 100644 index 0000000000..656d010414 --- /dev/null +++ b/libs/sigc++2/sigc++/functors/functor_trait.h @@ -0,0 +1,307 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +/* + Trait functor_trait<functor>: + + This trait allows the user to specific what is the return type + of any type. It has been overloaded to detect the return type and + the functor version of function pointers and class methods as well. + + To populate the return type of user defined and third party functors + use the macro SIGC_FUNCTOR_TRAIT(T_functor,T_return) in + namespace sigc. Multi-type functors are only partly supported. + Try specifying the return type of the functor's operator()() overload. + + Alternatively, you can derive your functors from functor_base and + place "typedef T_return result_type;" in the class definition. + + Use SIGC_FUNCTORS_HAVE_RESULT_TYPE if you want sigc++ to assume that + result_type is defined in all user defined or 3rd-party functors + (except those you specify a return type explicitly with SIGC_FUNCTOR_TRAIT()). + +*/ +#ifndef _SIGC_FUNCTORS_MACROS_FUNCTOR_TRAITHM4_ +#define _SIGC_FUNCTORS_MACROS_FUNCTOR_TRAITHM4_ +#include <sigc++/type_traits.h> + + +namespace sigc { + +/** nil struct type. + * The nil struct type is used as default template argument in the + * unnumbered sigc::signal and sigc::slot templates. + * + * @ingroup signal + * @ingroup slot + */ +struct nil; + + +/** @defgroup functors Functors + * Functors are copyable types that define operator()(). + * + * Types that define operator()() overloads with different return types are referred to + * as multi-type functors. Multi-type functors are only partly supported in libsigc++. + * + * Closures are functors that store all information needed to invoke a callback from operator()(). + * + * Adaptors are functors that alter the signature of a functor's operator()(). + * + * libsigc++ defines numerous functors, closures and adaptors. + * Since libsigc++ is a callback libaray, most functors are also closures. + * The documentation doesn't distinguish between functors and closures. + * + * The basic functor types libsigc++ provides are created with ptr_fun() and mem_fun() + * and can be converted into slots implicitly. + * The set of adaptors that ships with libsigc++ is documented in the equally named module. + */ + +/** A hint to the compiler. + * All functors which define @p result_type should publically inherit from this hint. + * + * @ingroup functors + */ +struct functor_base {}; + + +template <class T_functor, bool I_derives_functor_base=is_base_and_derived<functor_base,T_functor>::value> +struct functor_trait +{ + typedef void result_type; + typedef T_functor functor_type; +}; + +template <class T_functor> +struct functor_trait<T_functor,true> +{ + typedef typename T_functor::result_type result_type; + typedef T_functor functor_type; +}; + +/** If you want to mix functors from a different library with libsigc++ and + * these functors define @p result_type simply use this macro inside namespace sigc like so: + * @code + * namespace sigc { SIGC_FUNCTORS_HAVE_RESULT_TYPE } + * @endcode + * + * @ingroup functors + */ +#define SIGC_FUNCTORS_HAVE_RESULT_TYPE \ +template <class T_functor> \ +struct functor_trait<T_functor,false> \ +{ \ + typedef typename T_functor::result_type result_type; \ + typedef T_functor functor_type; \ +}; + +/** If you want to mix functors from a different library with libsigc++ and + * these functors don't define @p result_type use this macro inside namespace sigc + * to expose the return type of the functors like so: + * @code + * namespace sigc { + * SIGC_FUNCTOR_TRAIT(first_functor_type, return_type_of_first_functor_type) + * SIGC_FUNCTOR_TRAIT(second_functor_type, return_type_of_second_functor_type) + * ... + * } + * @endcode + * + * @ingroup functors + */ +#define SIGC_FUNCTOR_TRAIT(T_functor,T_return) \ +template <> \ +struct functor_trait<T_functor,false> \ +{ \ + typedef T_return result_type; \ + typedef T_functor functor_type; \ +}; + +// detect the return type and the functor version of non-functor types. +template <class T_return> class pointer_functor0; +template <class T_return> +struct functor_trait<T_return (*)(), false> +{ + typedef T_return result_type; + typedef pointer_functor0<T_return> functor_type; +}; + +template <class T_arg1, class T_return> class pointer_functor1; +template <class T_arg1, class T_return> +struct functor_trait<T_return (*)(T_arg1), false> +{ + typedef T_return result_type; + typedef pointer_functor1<T_arg1, T_return> functor_type; +}; + +template <class T_arg1,class T_arg2, class T_return> class pointer_functor2; +template <class T_arg1,class T_arg2, class T_return> +struct functor_trait<T_return (*)(T_arg1,T_arg2), false> +{ + typedef T_return result_type; + typedef pointer_functor2<T_arg1,T_arg2, T_return> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3, class T_return> class pointer_functor3; +template <class T_arg1,class T_arg2,class T_arg3, class T_return> +struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3), false> +{ + typedef T_return result_type; + typedef pointer_functor3<T_arg1,T_arg2,T_arg3, T_return> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return> class pointer_functor4; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return> +struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4), false> +{ + typedef T_return result_type; + typedef pointer_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return> class pointer_functor5; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return> +struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5), false> +{ + typedef T_return result_type; + typedef pointer_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return> class pointer_functor6; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return> +struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6), false> +{ + typedef T_return result_type; + typedef pointer_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return> class pointer_functor7; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return> +struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7), false> +{ + typedef T_return result_type; + typedef pointer_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return> functor_type; +}; + + +template <class T_return, class T_obj> class mem_functor0; +template <class T_return, class T_obj> class const_mem_functor0; +template <class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(), false> +{ + typedef T_return result_type; + typedef mem_functor0<T_return, T_obj> functor_type; +}; +template <class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)() const, false> +{ + typedef T_return result_type; + typedef const_mem_functor0<T_return, T_obj> functor_type; +}; + +template <class T_arg1, class T_return, class T_obj> class mem_functor1; +template <class T_arg1, class T_return, class T_obj> class const_mem_functor1; +template <class T_arg1, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1), false> +{ + typedef T_return result_type; + typedef mem_functor1<T_arg1, T_return, T_obj> functor_type; +}; +template <class T_arg1, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1) const, false> +{ + typedef T_return result_type; + typedef const_mem_functor1<T_arg1, T_return, T_obj> functor_type; +}; + +template <class T_arg1,class T_arg2, class T_return, class T_obj> class mem_functor2; +template <class T_arg1,class T_arg2, class T_return, class T_obj> class const_mem_functor2; +template <class T_arg1,class T_arg2, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2), false> +{ + typedef T_return result_type; + typedef mem_functor2<T_arg1,T_arg2, T_return, T_obj> functor_type; +}; +template <class T_arg1,class T_arg2, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2) const, false> +{ + typedef T_return result_type; + typedef const_mem_functor2<T_arg1,T_arg2, T_return, T_obj> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> class mem_functor3; +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> class const_mem_functor3; +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3), false> +{ + typedef T_return result_type; + typedef mem_functor3<T_arg1,T_arg2,T_arg3, T_return, T_obj> functor_type; +}; +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3) const, false> +{ + typedef T_return result_type; + typedef const_mem_functor3<T_arg1,T_arg2,T_arg3, T_return, T_obj> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> class mem_functor4; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> class const_mem_functor4; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4), false> +{ + typedef T_return result_type; + typedef mem_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return, T_obj> functor_type; +}; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4) const, false> +{ + typedef T_return result_type; + typedef const_mem_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return, T_obj> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> class mem_functor5; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> class const_mem_functor5; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5), false> +{ + typedef T_return result_type; + typedef mem_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return, T_obj> functor_type; +}; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const, false> +{ + typedef T_return result_type; + typedef const_mem_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return, T_obj> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> class mem_functor6; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> class const_mem_functor6; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6), false> +{ + typedef T_return result_type; + typedef mem_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return, T_obj> functor_type; +}; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const, false> +{ + typedef T_return result_type; + typedef const_mem_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return, T_obj> functor_type; +}; + +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> class mem_functor7; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> class const_mem_functor7; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7), false> +{ + typedef T_return result_type; + typedef mem_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return, T_obj> functor_type; +}; +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const, false> +{ + typedef T_return result_type; + typedef const_mem_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return, T_obj> functor_type; +}; + + + +} /* namespace sigc */ +#endif /* _SIGC_FUNCTORS_MACROS_FUNCTOR_TRAITHM4_ */ diff --git a/libs/sigc++2/sigc++/functors/functors.h b/libs/sigc++2/sigc++/functors/functors.h new file mode 100644 index 0000000000..3a9619c21d --- /dev/null +++ b/libs/sigc++2/sigc++/functors/functors.h @@ -0,0 +1,27 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_FUNCTOR_HPP_ +#define _SIGC_FUNCTOR_HPP_ + +#include <sigc++/functors/slot.h> +#include <sigc++/functors/ptr_fun.h> +#include <sigc++/functors/mem_fun.h> + +#endif /* _SIGC_FUNCTOR_HPP_ */ diff --git a/libs/sigc++2/sigc++/functors/mem_fun.h b/libs/sigc++2/sigc++/functors/mem_fun.h new file mode 100644 index 0000000000..2bd7cde67f --- /dev/null +++ b/libs/sigc++2/sigc++/functors/mem_fun.h @@ -0,0 +1,5976 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + + +// implementation notes: +// - we do not use bind here, because it would introduce +// an extra copy and complicate the header include order if bind is +// to have automatic conversion for member pointers. +#ifndef _SIGC_FUNCTORS_MACROS_MEM_FUNHM4_ +#define _SIGC_FUNCTORS_MACROS_MEM_FUNHM4_ +#include <sigc++/type_traits.h> +#include <sigc++/functors/functor_trait.h> + +namespace sigc { + +/** @defgroup mem_fun mem_fun() + * mem_fun() is used to convert a pointer to a method to a functor. + * + * Optionally a reference or pointer to an object can be bound to the functor. + * Note that only if the object type inherits from sigc::trackable + * the slot is cleared automatically when the object goes out of scope! + * + * If the member function pointer is to an overloaded type, you must specify + * the types using template arguments starting with the first argument. + * It is not necessary to supply the return type. + * + * @par Example: + * @code + * struct foo : public sigc::trackable + * { + * void bar(int) {} + * }; + * foo my_foo; + * sigc::slot<void, int> sl = sigc::mem_fun(my_foo, &foo::bar); + * @endcode + * + * For const methods mem_fun() takes a const reference or pointer to an object. + * + * @par Example: + * @code + * struct foo : public sigc::trackable + * { + * void bar(int) const {} + * }; + * const foo my_foo; + * sigc::slot<void, int> sl = sigc::mem_fun(my_foo, &foo::bar); + * @endcode + * + * Use mem_fun#() if there is an abiguity as to the number of arguments. + * + * @par Example: + * @code + * struct foo : public sigc::trackable + * { + * void bar(int) {} + * void bar(float) {} + * void bar(int, int) {} + * }; + * foo my_foo; + * sigc::slot<void, int> sl = sigc::mem_fun1<int>(my_foo, &foo::bar); + * @endcode + * + * @ingroup functors + */ + +/** mem_functor0 wraps methods with 0 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class mem_functor0 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)() ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor0() : func_ptr_(0) {} + + /** Constructs a mem_functor0 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor0(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj) const + { return (_A_obj->*(this->func_ptr_))(); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj) const + { return (_A_obj.*func_ptr_)(); } + +protected: + function_type func_ptr_; +}; + +/** mem_functor1 wraps methods with 1 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class mem_functor1 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1) ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor1() : func_ptr_(0) {} + + /** Constructs a mem_functor1 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor1(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj->*(this->func_ptr_))(_A_a1); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj.*func_ptr_)(_A_a1); } + +protected: + function_type func_ptr_; +}; + +/** mem_functor2 wraps methods with 2 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class mem_functor2 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2) ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor2() : func_ptr_(0) {} + + /** Constructs a mem_functor2 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor2(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2); } + +protected: + function_type func_ptr_; +}; + +/** mem_functor3 wraps methods with 3 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class mem_functor3 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3) ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor3() : func_ptr_(0) {} + + /** Constructs a mem_functor3 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor3(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3); } + +protected: + function_type func_ptr_; +}; + +/** mem_functor4 wraps methods with 4 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class mem_functor4 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4) ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor4() : func_ptr_(0) {} + + /** Constructs a mem_functor4 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor4(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4); } + +protected: + function_type func_ptr_; +}; + +/** mem_functor5 wraps methods with 5 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class mem_functor5 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor5() : func_ptr_(0) {} + + /** Constructs a mem_functor5 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor5(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +protected: + function_type func_ptr_; +}; + +/** mem_functor6 wraps methods with 6 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class mem_functor6 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor6() : func_ptr_(0) {} + + /** Constructs a mem_functor6 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor6(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +protected: + function_type func_ptr_; +}; + +/** mem_functor7 wraps methods with 7 argument(s). + * Use the convenience function mem_fun() to create an instance of mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class mem_functor7 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ; + typedef T_return result_type; + + /// Constructs an invalid functor. + mem_functor7() : func_ptr_(0) {} + + /** Constructs a mem_functor7 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit mem_functor7(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor0 wraps const methods with 0 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class const_mem_functor0 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)() const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor0() : func_ptr_(0) {} + + /** Constructs a const_mem_functor0 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor0(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj) const + { return (_A_obj->*(this->func_ptr_))(); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj) const + { return (_A_obj.*func_ptr_)(); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor1 wraps const methods with 1 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class const_mem_functor1 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1) const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor1() : func_ptr_(0) {} + + /** Constructs a const_mem_functor1 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor1(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj->*(this->func_ptr_))(_A_a1); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj.*func_ptr_)(_A_a1); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor2 wraps const methods with 2 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class const_mem_functor2 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2) const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor2() : func_ptr_(0) {} + + /** Constructs a const_mem_functor2 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor2(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor3 wraps const methods with 3 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class const_mem_functor3 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3) const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor3() : func_ptr_(0) {} + + /** Constructs a const_mem_functor3 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor3(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor4 wraps const methods with 4 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class const_mem_functor4 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4) const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor4() : func_ptr_(0) {} + + /** Constructs a const_mem_functor4 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor4(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor5 wraps const methods with 5 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class const_mem_functor5 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor5() : func_ptr_(0) {} + + /** Constructs a const_mem_functor5 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor5(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor6 wraps const methods with 6 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class const_mem_functor6 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor6() : func_ptr_(0) {} + + /** Constructs a const_mem_functor6 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor6(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +protected: + function_type func_ptr_; +}; + +/** const_mem_functor7 wraps const methods with 7 argument(s). + * Use the convenience function mem_fun() to create an instance of const_mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class const_mem_functor7 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_mem_functor7() : func_ptr_(0) {} + + /** Constructs a const_mem_functor7 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_mem_functor7(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor0 wraps volatile methods with 0 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class volatile_mem_functor0 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)() volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor0() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor0 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor0(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj) const + { return (_A_obj->*(this->func_ptr_))(); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj) const + { return (_A_obj.*func_ptr_)(); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor1 wraps volatile methods with 1 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class volatile_mem_functor1 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1) volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor1() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor1 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor1(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj->*(this->func_ptr_))(_A_a1); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj.*func_ptr_)(_A_a1); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor2 wraps volatile methods with 2 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class volatile_mem_functor2 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2) volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor2() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor2 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor2(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor3 wraps volatile methods with 3 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class volatile_mem_functor3 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3) volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor3() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor3 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor3(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor4 wraps volatile methods with 4 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class volatile_mem_functor4 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4) volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor4() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor4 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor4(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor5 wraps volatile methods with 5 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class volatile_mem_functor5 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor5() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor5 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor5(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor6 wraps volatile methods with 6 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class volatile_mem_functor6 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor6() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor6 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor6(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +protected: + function_type func_ptr_; +}; + +/** volatile_mem_functor7 wraps volatile methods with 7 argument(s). + * Use the convenience function mem_fun() to create an instance of volatile_mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class volatile_mem_functor7 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + volatile_mem_functor7() : func_ptr_(0) {} + + /** Constructs a volatile_mem_functor7 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit volatile_mem_functor7(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor0 wraps const volatile methods with 0 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class const_volatile_mem_functor0 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)() const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor0() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor0 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor0(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj) const + { return (_A_obj->*(this->func_ptr_))(); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj) const + { return (_A_obj.*func_ptr_)(); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor1 wraps const volatile methods with 1 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class const_volatile_mem_functor1 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1) const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor1() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor1 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor1(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj->*(this->func_ptr_))(_A_a1); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1) const + { return (_A_obj.*func_ptr_)(_A_a1); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor2 wraps const volatile methods with 2 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class const_volatile_mem_functor2 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2) const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor2() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor2 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor2(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor3 wraps const volatile methods with 3 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class const_volatile_mem_functor3 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3) const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor3() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor3 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor3(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor4 wraps const volatile methods with 4 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class const_volatile_mem_functor4 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor4() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor4 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor4(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor5 wraps const volatile methods with 5 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class const_volatile_mem_functor5 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor5() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor5 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor5(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor6 wraps const volatile methods with 6 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class const_volatile_mem_functor6 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor6() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor6 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor6(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +protected: + function_type func_ptr_; +}; + +/** const_volatile_mem_functor7 wraps const volatile methods with 7 argument(s). + * Use the convenience function mem_fun() to create an instance of const_volatile_mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class const_volatile_mem_functor7 : public functor_base +{ +public: + typedef T_return (T_obj::*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile; + typedef T_return result_type; + + /// Constructs an invalid functor. + const_volatile_mem_functor7() : func_ptr_(0) {} + + /** Constructs a const_volatile_mem_functor7 object that wraps the passed method. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + explicit const_volatile_mem_functor7(function_type _A_func) : func_ptr_(_A_func) {} + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Pointer to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj* _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + + /** Execute the wrapped method operating on the passed instance. + * @param _A_obj Reference to instance the method should operate on. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(const T_obj& _A_obj, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (_A_obj.*func_ptr_)(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +protected: + function_type func_ptr_; +}; + +/** bound_mem_functor0 encapsulates a method with 0 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class bound_mem_functor0 + : public mem_functor0<T_return, T_obj> +{ + typedef mem_functor0<T_return, T_obj> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor0 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor0( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor0 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor0( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @return The return value of the method invocation. + */ + T_return operator()() const + { return (obj_ptr_->*(this->func_ptr_))(); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj> +void visit_each(const T_action& _A_action, + const bound_mem_functor0<T_return, T_obj>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_mem_functor1 encapsulates a method with 1 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class bound_mem_functor1 + : public mem_functor1<T_return, T_obj, T_arg1> +{ + typedef mem_functor1<T_return, T_obj, T_arg1> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor1 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor1( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor1 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor1( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1> +void visit_each(const T_action& _A_action, + const bound_mem_functor1<T_return, T_obj, T_arg1>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_mem_functor2 encapsulates a method with 2 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class bound_mem_functor2 + : public mem_functor2<T_return, T_obj, T_arg1,T_arg2> +{ + typedef mem_functor2<T_return, T_obj, T_arg1,T_arg2> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor2 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor2( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor2 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor2( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2> +void visit_each(const T_action& _A_action, + const bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_mem_functor3 encapsulates a method with 3 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class bound_mem_functor3 + : public mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +{ + typedef mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor3 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor3( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor3 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor3( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +void visit_each(const T_action& _A_action, + const bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_mem_functor4 encapsulates a method with 4 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class bound_mem_functor4 + : public mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +{ + typedef mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor4 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor4( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor4 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor4( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +void visit_each(const T_action& _A_action, + const bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_mem_functor5 encapsulates a method with 5 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class bound_mem_functor5 + : public mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +{ + typedef mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor5 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor5( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor5 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor5( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +void visit_each(const T_action& _A_action, + const bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_mem_functor6 encapsulates a method with 6 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class bound_mem_functor6 + : public mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +{ + typedef mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor6 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor6( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor6 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor6( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +void visit_each(const T_action& _A_action, + const bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_mem_functor7 encapsulates a method with 7 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class bound_mem_functor7 + : public mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +{ + typedef mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_mem_functor7 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor7( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_mem_functor7 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_mem_functor7( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_mem_functor performs a functor + * on the object instance stored in the sigc::bound_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +void visit_each(const T_action& _A_action, + const bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor0 encapsulates a const method with 0 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class bound_const_mem_functor0 + : public const_mem_functor0<T_return, T_obj> +{ + typedef const_mem_functor0<T_return, T_obj> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor0 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor0(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor0 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor0(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @return The return value of the method invocation. + */ + T_return operator()() const + { return (obj_ptr_->*(this->func_ptr_))(); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor0<T_return, T_obj>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor1 encapsulates a const method with 1 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class bound_const_mem_functor1 + : public const_mem_functor1<T_return, T_obj, T_arg1> +{ + typedef const_mem_functor1<T_return, T_obj, T_arg1> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor1 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor1(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor1 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor1(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor1<T_return, T_obj, T_arg1>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor2 encapsulates a const method with 2 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class bound_const_mem_functor2 + : public const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +{ + typedef const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor2 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor2(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor2 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor2(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor3 encapsulates a const method with 3 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class bound_const_mem_functor3 + : public const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +{ + typedef const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor3 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor3(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor3 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor3(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor4 encapsulates a const method with 4 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class bound_const_mem_functor4 + : public const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +{ + typedef const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor4 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor4(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor4 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor4(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor5 encapsulates a const method with 5 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class bound_const_mem_functor5 + : public const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +{ + typedef const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor5 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor5(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor5 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor5(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor6 encapsulates a const method with 6 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class bound_const_mem_functor6 + : public const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +{ + typedef const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor6 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor6(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor6 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor6(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_mem_functor7 encapsulates a const method with 7 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class bound_const_mem_functor7 + : public const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +{ + typedef const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_mem_functor7 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor7(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_mem_functor7 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_mem_functor7(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +void visit_each(const T_action& _A_action, + const bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor0 encapsulates a volatile method with 0 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class bound_volatile_mem_functor0 + : public volatile_mem_functor0<T_return, T_obj> +{ + typedef volatile_mem_functor0<T_return, T_obj> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor0 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor0( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor0 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor0( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @return The return value of the method invocation. + */ + T_return operator()() const + { return (obj_ptr_->*(this->func_ptr_))(); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor0<T_return, T_obj>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor1 encapsulates a volatile method with 1 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class bound_volatile_mem_functor1 + : public volatile_mem_functor1<T_return, T_obj, T_arg1> +{ + typedef volatile_mem_functor1<T_return, T_obj, T_arg1> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor1 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor1( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor1 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor1( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor1<T_return, T_obj, T_arg1>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor2 encapsulates a volatile method with 2 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class bound_volatile_mem_functor2 + : public volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +{ + typedef volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor2 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor2( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor2 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor2( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor3 encapsulates a volatile method with 3 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class bound_volatile_mem_functor3 + : public volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +{ + typedef volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor3 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor3( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor3 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor3( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor4 encapsulates a volatile method with 4 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class bound_volatile_mem_functor4 + : public volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +{ + typedef volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor4 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor4( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor4 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor4( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor5 encapsulates a volatile method with 5 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class bound_volatile_mem_functor5 + : public volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +{ + typedef volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor5 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor5( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor5 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor5( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor6 encapsulates a volatile method with 6 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class bound_volatile_mem_functor6 + : public volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +{ + typedef volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor6 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor6( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor6 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor6( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_volatile_mem_functor7 encapsulates a volatile method with 7 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_volatile_mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class bound_volatile_mem_functor7 + : public volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +{ + typedef volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_volatile_mem_functor7 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor7( T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_volatile_mem_functor7 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_volatile_mem_functor7( T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +//protected: + /// Pointer to stored object instance. + T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +void visit_each(const T_action& _A_action, + const bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor0 encapsulates a const volatile method with 0 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +class bound_const_volatile_mem_functor0 + : public const_volatile_mem_functor0<T_return, T_obj> +{ + typedef const_volatile_mem_functor0<T_return, T_obj> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor0 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor0(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor0 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor0(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @return The return value of the method invocation. + */ + T_return operator()() const + { return (obj_ptr_->*(this->func_ptr_))(); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor0<T_return, T_obj>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor1 encapsulates a const volatile method with 1 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1> +class bound_const_volatile_mem_functor1 + : public const_volatile_mem_functor1<T_return, T_obj, T_arg1> +{ + typedef const_volatile_mem_functor1<T_return, T_obj, T_arg1> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor1 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor1(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor1 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor1(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor2 encapsulates a const volatile method with 2 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2> +class bound_const_volatile_mem_functor2 + : public const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +{ + typedef const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor2 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor2(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor2 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor2(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor3 encapsulates a const volatile method with 3 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +class bound_const_volatile_mem_functor3 + : public const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +{ + typedef const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor3 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor3(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor3 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor3(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor4 encapsulates a const volatile method with 4 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class bound_const_volatile_mem_functor4 + : public const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +{ + typedef const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor4 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor4(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor4 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor4(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor5 encapsulates a const volatile method with 5 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class bound_const_volatile_mem_functor5 + : public const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +{ + typedef const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor5 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor5(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor5 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor5(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor6 encapsulates a const volatile method with 6 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class bound_const_volatile_mem_functor6 + : public const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +{ + typedef const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor6 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor6(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor6 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor6(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + +/** bound_const_volatile_mem_functor7 encapsulates a const volatile method with 7 arguments and an object instance. + * Use the convenience function mem_fun() to create an instance of bound_const_volatile_mem_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * - @e T_obj The object type. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class bound_const_volatile_mem_functor7 + : public const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +{ + typedef const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> base_type_; +public: + typedef typename base_type_::function_type function_type; + + /** Constructs a bound_const_volatile_mem_functor7 object that wraps the passed method. + * @param _A_obj Pointer to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor7(const T_obj* _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(_A_obj) {} + + /** Constructs a bound_const_volatile_mem_functor7 object that wraps the passed method. + * @param _A_obj Reference to instance the method will operate on. + * @param _A_func Pointer to method will be invoked from operator()(). + */ + bound_const_volatile_mem_functor7(const T_obj& _A_obj, function_type _A_func) + : base_type_(_A_func), obj_ptr_(&_A_obj) {} + + /** Execute the wrapped method operating on the stored instance. + * @param _A_a1 Argument to be passed on to the method. + * @param _A_a2 Argument to be passed on to the method. + * @param _A_a3 Argument to be passed on to the method. + * @param _A_a4 Argument to be passed on to the method. + * @param _A_a5 Argument to be passed on to the method. + * @param _A_a6 Argument to be passed on to the method. + * @param _A_a7 Argument to be passed on to the method. + * @return The return value of the method invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return (obj_ptr_->*(this->func_ptr_))(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + +//protected: + /// Pointer to stored object instance. + const T_obj *obj_ptr_; +}; + +/** Performs a functor on each of the targets of a functor. + * The function overload for sigc::bound_const_volatile_mem_functor performs a functor + * on the object instance stored in the sigc::bound_const_volatile_mem_functor object. + * + * @ingroup mem_fun + */ +template <class T_action, class T_return, class T_obj, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +void visit_each(const T_action& _A_action, + const bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>& _A_target) +{ + visit_each(_A_action, *_A_target.obj_ptr_); +} + + +// numbered +/** Creates a functor of type sigc::mem_functor0 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline mem_functor0<T_return, T_obj> +mem_fun0(T_return (T_obj::*_A_func)() ) +{ return mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::mem_functor1 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(T_return (T_obj::*_A_func)(T_arg1) ) +{ return mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::mem_functor2 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(T_return (T_obj::*_A_func)(T_arg1,T_arg2) ) +{ return mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::mem_functor3 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::mem_functor4 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::mem_functor5 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::mem_functor6 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::mem_functor7 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ return mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor0 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline const_mem_functor0<T_return, T_obj> +mem_fun0(T_return (T_obj::*_A_func)() const) +{ return const_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor1 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline const_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(T_return (T_obj::*_A_func)(T_arg1) const) +{ return const_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor2 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(T_return (T_obj::*_A_func)(T_arg1,T_arg2) const) +{ return const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor3 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor4 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor5 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor6 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor7 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ return const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor0 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline volatile_mem_functor0<T_return, T_obj> +mem_fun0(T_return (T_obj::*_A_func)() volatile) +{ return volatile_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor1 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(T_return (T_obj::*_A_func)(T_arg1) volatile) +{ return volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor2 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(T_return (T_obj::*_A_func)(T_arg1,T_arg2) volatile) +{ return volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor3 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor4 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor5 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor6 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor7 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ return volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor0 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline const_volatile_mem_functor0<T_return, T_obj> +mem_fun0(T_return (T_obj::*_A_func)() const volatile) +{ return const_volatile_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor1 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline const_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(T_return (T_obj::*_A_func)(T_arg1) const volatile) +{ return const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor2 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(T_return (T_obj::*_A_func)(T_arg1,T_arg2) const volatile) +{ return const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor3 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor4 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor5 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor6 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor7 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ return const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::bound_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_mem_functor0<T_return, T_obj> +mem_fun0(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() ) +{ return bound_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_mem_functor0<T_return, T_obj> +mem_fun0(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() ) +{ return bound_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) ) +{ return bound_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) ) +{ return bound_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) ) +{ return bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) ) +{ return bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ return bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ return bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor0<T_return, T_obj> +mem_fun0(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() const) +{ return bound_const_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor0<T_return, T_obj> +mem_fun0(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() const) +{ return bound_const_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const) +{ return bound_const_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const) +{ return bound_const_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const) +{ return bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const) +{ return bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ return bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ return bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor0<T_return, T_obj> +mem_fun0(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() volatile) +{ return bound_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor0<T_return, T_obj> +mem_fun0(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() volatile) +{ return bound_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) volatile) +{ return bound_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) volatile) +{ return bound_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) volatile) +{ return bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) volatile) +{ return bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ return bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ return bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor0<T_return, T_obj> +mem_fun0(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() const volatile) +{ return bound_const_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor0<T_return, T_obj> +mem_fun0(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() const volatile) +{ return bound_const_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const volatile) +{ return bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun1(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const volatile) +{ return bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const volatile) +{ return bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun2(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const volatile) +{ return bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun3(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun4(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun5(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun6(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ return bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun7(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ return bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +// unnumbered +/** Creates a functor of type sigc::mem_functor0 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline mem_functor0<T_return, T_obj> +mem_fun(T_return (T_obj::*_A_func)() ) +{ return mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::mem_functor1 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline mem_functor1<T_return, T_obj, T_arg1> +mem_fun(T_return (T_obj::*_A_func)(T_arg1) ) +{ return mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::mem_functor2 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2) ) +{ return mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::mem_functor3 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::mem_functor4 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::mem_functor5 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::mem_functor6 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::mem_functor7 which wraps a method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ return mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor0 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline const_mem_functor0<T_return, T_obj> +mem_fun(T_return (T_obj::*_A_func)() const) +{ return const_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor1 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline const_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(T_return (T_obj::*_A_func)(T_arg1) const) +{ return const_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor2 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2) const) +{ return const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor3 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor4 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor5 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor6 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::const_mem_functor7 which wraps a const method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ return const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor0 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline volatile_mem_functor0<T_return, T_obj> +mem_fun(T_return (T_obj::*_A_func)() volatile) +{ return volatile_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor1 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(T_return (T_obj::*_A_func)(T_arg1) volatile) +{ return volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor2 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2) volatile) +{ return volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor3 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor4 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor5 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor6 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::volatile_mem_functor7 which wraps a volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ return volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor0 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj> +inline const_volatile_mem_functor0<T_return, T_obj> +mem_fun(T_return (T_obj::*_A_func)() const volatile) +{ return const_volatile_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor1 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj> +inline const_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(T_return (T_obj::*_A_func)(T_arg1) const volatile) +{ return const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor2 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj> +inline const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2) const volatile) +{ return const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor3 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> +inline const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor4 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> +inline const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor5 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> +inline const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor6 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> +inline const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type sigc::const_volatile_mem_functor7 which wraps a const volatile method. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> +inline const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ return const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + +/** Creates a functor of type sigc::bound_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_mem_functor0<T_return, T_obj> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() ) +{ return bound_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_mem_functor0<T_return, T_obj> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() ) +{ return bound_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) ) +{ return bound_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) ) +{ return bound_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) ) +{ return bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) ) +{ return bound_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return bound_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return bound_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return bound_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return bound_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ return bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ return bound_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor0<T_return, T_obj> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() const) +{ return bound_const_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor0<T_return, T_obj> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() const) +{ return bound_const_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const) +{ return bound_const_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const) +{ return bound_const_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const) +{ return bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const) +{ return bound_const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return bound_const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return bound_const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return bound_const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return bound_const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ return bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ return bound_const_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor0<T_return, T_obj> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() volatile) +{ return bound_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor0<T_return, T_obj> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() volatile) +{ return bound_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) volatile) +{ return bound_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) volatile) +{ return bound_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) volatile) +{ return bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) volatile) +{ return bound_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return bound_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return bound_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return bound_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return bound_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/**/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ return bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/**/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ return bound_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor0<T_return, T_obj> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)() const volatile) +{ return bound_const_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor0 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor0<T_return, T_obj> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)() const volatile) +{ return bound_const_volatile_mem_functor0<T_return, T_obj>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const volatile) +{ return bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor1 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const volatile) +{ return bound_const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const volatile) +{ return bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor2 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const volatile) +{ return bound_const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor3 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return bound_const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor4 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return bound_const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor5 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return bound_const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor6 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return bound_const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Pointer to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/*const*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ return bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + +/** Creates a functor of type sigc::bound_const_volatile_mem_functor7 which encapsulates a method and an object instance. + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup mem_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj, class T_obj2> +inline bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +mem_fun(/*const*/ T_obj& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ return bound_const_volatile_mem_functor7<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +} /* namespace sigc */ +#endif /* _SIGC_FUNCTORS_MACROS_MEM_FUNHM4_ */ diff --git a/libs/sigc++2/sigc++/functors/ptr_fun.h b/libs/sigc++2/sigc++/functors/ptr_fun.h new file mode 100644 index 0000000000..5ab6b5ab96 --- /dev/null +++ b/libs/sigc++2/sigc++/functors/ptr_fun.h @@ -0,0 +1,542 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + +#ifndef _SIGC_FUNCTORS_MACROS_PTR_FUNHM4_ +#define _SIGC_FUNCTORS_MACROS_PTR_FUNHM4_ +#include <sigc++/type_traits.h> +#include <sigc++/functors/functor_trait.h> + +namespace sigc { + +/** @defgroup ptr_fun ptr_fun() + * ptr_fun() is used to convert a pointer to a function to a functor. + * If the function pointer is to an overloaded type, you must specify + * the types using template arguments starting with the first argument. + * It is not necessary to supply the return type. + * + * @par Example: + * @code + * void foo(int) {} + * sigc::slot<void, int> sl = sigc::ptr_fun(&foo); + * @endcode + * + * Use ptr_fun#() if there is an abiguity as to the number of arguments. + * + * @par Example: + * @code + * void foo(int) {} // choose this one + * void foo(float) {} + * void foo(int, int) {} + * sigc::slot<void, long> sl = sigc::ptr_fun1<int>(&foo); + * @endcode + * + * ptr_fun() can also be used to convert a pointer to a static member + * function to a functor, like so: + * + * @par Example: + * @code + * struct foo + * { + * static void bar(int) {} + * }; + * sigc::slot<void, int> sl = sigc::ptr_fun(&foo::bar); + * @endcode + * + * @ingroup functors + */ + +/** pointer_functor0 wraps existing non-member functions with 0 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor0. + * + * The following template arguments are used: + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_return> +class pointer_functor0 : public functor_base +{ + typedef T_return (*function_type)(); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor0() {} + + /** Constructs a pointer_functor0 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor0(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @return The return value of the function invocation. + */ + T_return operator()() const + { return func_ptr_(); } +}; + +/** pointer_functor1 wraps existing non-member functions with 1 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor1. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_arg1, class T_return> +class pointer_functor1 : public functor_base +{ + typedef T_return (*function_type)(T_arg1); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor1() {} + + /** Constructs a pointer_functor1 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor1(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @param _A_a1 Argument to be passed on to the function. + * @return The return value of the function invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1) const + { return func_ptr_(_A_a1); } +}; + +/** pointer_functor2 wraps existing non-member functions with 2 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor2. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2, class T_return> +class pointer_functor2 : public functor_base +{ + typedef T_return (*function_type)(T_arg1,T_arg2); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor2() {} + + /** Constructs a pointer_functor2 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor2(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @param _A_a1 Argument to be passed on to the function. + * @param _A_a2 Argument to be passed on to the function. + * @return The return value of the function invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return func_ptr_(_A_a1,_A_a2); } +}; + +/** pointer_functor3 wraps existing non-member functions with 3 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor3. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return> +class pointer_functor3 : public functor_base +{ + typedef T_return (*function_type)(T_arg1,T_arg2,T_arg3); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor3() {} + + /** Constructs a pointer_functor3 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor3(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @param _A_a1 Argument to be passed on to the function. + * @param _A_a2 Argument to be passed on to the function. + * @param _A_a3 Argument to be passed on to the function. + * @return The return value of the function invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return func_ptr_(_A_a1,_A_a2,_A_a3); } +}; + +/** pointer_functor4 wraps existing non-member functions with 4 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor4. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return> +class pointer_functor4 : public functor_base +{ + typedef T_return (*function_type)(T_arg1,T_arg2,T_arg3,T_arg4); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor4() {} + + /** Constructs a pointer_functor4 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor4(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @param _A_a1 Argument to be passed on to the function. + * @param _A_a2 Argument to be passed on to the function. + * @param _A_a3 Argument to be passed on to the function. + * @param _A_a4 Argument to be passed on to the function. + * @return The return value of the function invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return func_ptr_(_A_a1,_A_a2,_A_a3,_A_a4); } +}; + +/** pointer_functor5 wraps existing non-member functions with 5 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor5. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return> +class pointer_functor5 : public functor_base +{ + typedef T_return (*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor5() {} + + /** Constructs a pointer_functor5 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor5(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @param _A_a1 Argument to be passed on to the function. + * @param _A_a2 Argument to be passed on to the function. + * @param _A_a3 Argument to be passed on to the function. + * @param _A_a4 Argument to be passed on to the function. + * @param _A_a5 Argument to be passed on to the function. + * @return The return value of the function invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return func_ptr_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } +}; + +/** pointer_functor6 wraps existing non-member functions with 6 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor6. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return> +class pointer_functor6 : public functor_base +{ + typedef T_return (*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor6() {} + + /** Constructs a pointer_functor6 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor6(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @param _A_a1 Argument to be passed on to the function. + * @param _A_a2 Argument to be passed on to the function. + * @param _A_a3 Argument to be passed on to the function. + * @param _A_a4 Argument to be passed on to the function. + * @param _A_a5 Argument to be passed on to the function. + * @param _A_a6 Argument to be passed on to the function. + * @return The return value of the function invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return func_ptr_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } +}; + +/** pointer_functor7 wraps existing non-member functions with 7 argument(s). + * Use the convenience function ptr_fun() to create an instance of pointer_functor7. + * + * The following template arguments are used: + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * - @e T_return The return type of operator()(). + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return> +class pointer_functor7 : public functor_base +{ + typedef T_return (*function_type)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7); +protected: + function_type func_ptr_; +public: + typedef T_return result_type; + + /// Constructs an invalid functor. + pointer_functor7() {} + + /** Constructs a pointer_functor7 object that wraps an existing function. + * @param _A_func Pointer to function that will be invoked from operator()(). + */ + explicit pointer_functor7(function_type _A_func): func_ptr_(_A_func) {} + + /** Execute the wrapped function. + * @param _A_a1 Argument to be passed on to the function. + * @param _A_a2 Argument to be passed on to the function. + * @param _A_a3 Argument to be passed on to the function. + * @param _A_a4 Argument to be passed on to the function. + * @param _A_a5 Argument to be passed on to the function. + * @param _A_a6 Argument to be passed on to the function. + * @param _A_a7 Argument to be passed on to the function. + * @return The return value of the function invocation. + */ + T_return operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return func_ptr_(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } +}; + + +// numbered ptr_fun +/** Creates a functor of type sigc::pointer_functor0 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_return> +inline pointer_functor0<T_return> +ptr_fun0(T_return (*_A_func)()) +{ return pointer_functor0<T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor1 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1, class T_return> +inline pointer_functor1<T_arg1, T_return> +ptr_fun1(T_return (*_A_func)(T_arg1)) +{ return pointer_functor1<T_arg1, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor2 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2, class T_return> +inline pointer_functor2<T_arg1,T_arg2, T_return> +ptr_fun2(T_return (*_A_func)(T_arg1,T_arg2)) +{ return pointer_functor2<T_arg1,T_arg2, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor3 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return> +inline pointer_functor3<T_arg1,T_arg2,T_arg3, T_return> +ptr_fun3(T_return (*_A_func)(T_arg1,T_arg2,T_arg3)) +{ return pointer_functor3<T_arg1,T_arg2,T_arg3, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor4 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return> +inline pointer_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return> +ptr_fun4(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4)) +{ return pointer_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor5 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return> +inline pointer_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return> +ptr_fun5(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5)) +{ return pointer_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor6 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return> +inline pointer_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return> +ptr_fun6(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6)) +{ return pointer_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor7 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return> +inline pointer_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return> +ptr_fun7(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7)) +{ return pointer_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return>(_A_func); } + + +// unnumbered ptr_fun +/** Creates a functor of type sigc::pointer_functor0 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_return> +inline pointer_functor0<T_return> +ptr_fun(T_return (*_A_func)()) +{ return pointer_functor0<T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor1 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1, class T_return> +inline pointer_functor1<T_arg1, T_return> +ptr_fun(T_return (*_A_func)(T_arg1)) +{ return pointer_functor1<T_arg1, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor2 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2, class T_return> +inline pointer_functor2<T_arg1,T_arg2, T_return> +ptr_fun(T_return (*_A_func)(T_arg1,T_arg2)) +{ return pointer_functor2<T_arg1,T_arg2, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor3 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3, class T_return> +inline pointer_functor3<T_arg1,T_arg2,T_arg3, T_return> +ptr_fun(T_return (*_A_func)(T_arg1,T_arg2,T_arg3)) +{ return pointer_functor3<T_arg1,T_arg2,T_arg3, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor4 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return> +inline pointer_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return> +ptr_fun(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4)) +{ return pointer_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor5 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return> +inline pointer_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return> +ptr_fun(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5)) +{ return pointer_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor6 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return> +inline pointer_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return> +ptr_fun(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6)) +{ return pointer_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return>(_A_func); } + +/** Creates a functor of type sigc::pointer_functor7 which wraps an existing non-member function. + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes @e _A_func on invokation. + * + * @ingroup ptr_fun + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return> +inline pointer_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return> +ptr_fun(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7)) +{ return pointer_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return>(_A_func); } + + +} /* namespace sigc */ +#endif /* _SIGC_FUNCTORS_MACROS_PTR_FUNHM4_ */ diff --git a/libs/sigc++2/sigc++/functors/slot.cc b/libs/sigc++2/sigc++/functors/slot.cc new file mode 100644 index 0000000000..5b9c92e201 --- /dev/null +++ b/libs/sigc++2/sigc++/functors/slot.cc @@ -0,0 +1,25 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include <sigc++/functors/slot.h> + +namespace sigc { + + +} /* namespace sigc */ diff --git a/libs/sigc++2/sigc++/functors/slot.h b/libs/sigc++2/sigc++/functors/slot.h new file mode 100644 index 0000000000..51294fe4d8 --- /dev/null +++ b/libs/sigc++2/sigc++/functors/slot.h @@ -0,0 +1,1263 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_FUNCTORS_MACROS_SLOTHM4_ +#define _SIGC_FUNCTORS_MACROS_SLOTHM4_ +#include <sigc++/trackable.h> +#include <sigc++/visit_each.h> +#include <sigc++/adaptors/adaptor_trait.h> +#include <sigc++/functors/slot_base.h> + +namespace sigc { + +namespace internal { + +/** A typed slot_rep. + * A typed slot_rep holds a functor that can be invoked from + * slot::operator()(). visit_each() is used to visit the functor's + * targets that inherit trackable recursively and register the + * notification callback. Consequently the slot_rep object will be + * notified when some referred object is destroyed or overwritten. + */ +template <class T_functor> +struct typed_slot_rep : public slot_rep +{ + typedef typed_slot_rep<T_functor> self; + + /* Use an adaptor type so that arguments can be passed as const references + * through explicit template instantiation from slot_call#::call_it() */ + typedef typename adaptor_trait<T_functor>::adaptor_type adaptor_type; + + /** The functor contained by this slot_rep object. */ + adaptor_type functor_; + + /** Constructs an invalid typed slot_rep object. + * The notification callback is registered using visit_each(). + * @param functor The functor contained by the new slot_rep object. + */ + inline typed_slot_rep(const T_functor& functor) + : slot_rep(0, &destroy, &dup), functor_(functor) + { visit_each_type<trackable*>(slot_do_bind(this), functor_); } + + inline typed_slot_rep(const typed_slot_rep& cl) + : slot_rep(cl.call_, &destroy, &dup), functor_(cl.functor_) + { visit_each_type<trackable*>(slot_do_bind(this), functor_); } + + inline ~typed_slot_rep() + { + call_ = 0; + destroy_ = 0; + visit_each_type<trackable*>(slot_do_unbind(this), functor_); + } + + /** Detaches the stored functor from the other referred trackables and destroys it. + * This does not destroy the base slot_rep object. + */ + static void* destroy(void* data) + { + self* self_ = static_cast<self*>((slot_rep*)data); + self_->call_ = 0; + self_->destroy_ = 0; + visit_each_type<trackable*>(slot_do_unbind(self_), self_->functor_); + self_->functor_.~adaptor_type(); + /* don't call disconnect() here: destroy() is either called + * a) from the parent itself (in which case disconnect() leads to a segfault) or + * b) from a parentless slot (in which case disconnect() does nothing) + */ + return 0; + } + + /** Makes a deep copy of the slot_rep object. + * Deep copy means that the notification callback of the new + * slot_rep object is registered in the referred trackables. + * @return A deep copy of the slot_rep object. + */ + static void* dup(void* data) + { + slot_rep* rep_ = (slot_rep*)data; + return static_cast<slot_rep*>(new self(*static_cast<self*>(rep_))); + } +}; + + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * + */ +template<class T_functor, class T_return> +struct slot_call0 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_)(); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg1 Argument type used in the definition of call_it(). + * + */ +template<class T_functor, class T_return, class T_arg1> +struct slot_call1 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a1 Argument to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, typename type_trait<T_arg1>::take a_1) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::take> + (a_1); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg1 Argument type used in the definition of call_it(). + * - @e T_arg2 Argument type used in the definition of call_it(). + * + */ +template<class T_functor, class T_return, class T_arg1,class T_arg2> +struct slot_call2 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, typename type_trait<T_arg1>::take a_1,typename type_trait<T_arg2>::take a_2) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take> + (a_1,a_2); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg1 Argument type used in the definition of call_it(). + * - @e T_arg2 Argument type used in the definition of call_it(). + * - @e T_arg3 Argument type used in the definition of call_it(). + * + */ +template<class T_functor, class T_return, class T_arg1,class T_arg2,class T_arg3> +struct slot_call3 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, typename type_trait<T_arg1>::take a_1,typename type_trait<T_arg2>::take a_2,typename type_trait<T_arg3>::take a_3) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take> + (a_1,a_2,a_3); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg1 Argument type used in the definition of call_it(). + * - @e T_arg2 Argument type used in the definition of call_it(). + * - @e T_arg3 Argument type used in the definition of call_it(). + * - @e T_arg4 Argument type used in the definition of call_it(). + * + */ +template<class T_functor, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +struct slot_call4 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, typename type_trait<T_arg1>::take a_1,typename type_trait<T_arg2>::take a_2,typename type_trait<T_arg3>::take a_3,typename type_trait<T_arg4>::take a_4) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take> + (a_1,a_2,a_3,a_4); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg1 Argument type used in the definition of call_it(). + * - @e T_arg2 Argument type used in the definition of call_it(). + * - @e T_arg3 Argument type used in the definition of call_it(). + * - @e T_arg4 Argument type used in the definition of call_it(). + * - @e T_arg5 Argument type used in the definition of call_it(). + * + */ +template<class T_functor, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +struct slot_call5 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @param _A_a5 Argument to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, typename type_trait<T_arg1>::take a_1,typename type_trait<T_arg2>::take a_2,typename type_trait<T_arg3>::take a_3,typename type_trait<T_arg4>::take a_4,typename type_trait<T_arg5>::take a_5) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take> + (a_1,a_2,a_3,a_4,a_5); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg1 Argument type used in the definition of call_it(). + * - @e T_arg2 Argument type used in the definition of call_it(). + * - @e T_arg3 Argument type used in the definition of call_it(). + * - @e T_arg4 Argument type used in the definition of call_it(). + * - @e T_arg5 Argument type used in the definition of call_it(). + * - @e T_arg6 Argument type used in the definition of call_it(). + * + */ +template<class T_functor, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +struct slot_call6 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @param _A_a5 Argument to be passed on to the functor. + * @param _A_a6 Argument to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, typename type_trait<T_arg1>::take a_1,typename type_trait<T_arg2>::take a_2,typename type_trait<T_arg3>::take a_3,typename type_trait<T_arg4>::take a_4,typename type_trait<T_arg5>::take a_5,typename type_trait<T_arg6>::take a_6) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take,typename type_trait<T_arg6>::take> + (a_1,a_2,a_3,a_4,a_5,a_6); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg1 Argument type used in the definition of call_it(). + * - @e T_arg2 Argument type used in the definition of call_it(). + * - @e T_arg3 Argument type used in the definition of call_it(). + * - @e T_arg4 Argument type used in the definition of call_it(). + * - @e T_arg5 Argument type used in the definition of call_it(). + * - @e T_arg6 Argument type used in the definition of call_it(). + * - @e T_arg7 Argument type used in the definition of call_it(). + * + */ +template<class T_functor, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +struct slot_call7 +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @param _A_a5 Argument to be passed on to the functor. + * @param _A_a6 Argument to be passed on to the functor. + * @param _A_a7 Argument to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, typename type_trait<T_arg1>::take a_1,typename type_trait<T_arg2>::take a_2,typename type_trait<T_arg3>::take a_3,typename type_trait<T_arg4>::take a_4,typename type_trait<T_arg5>::take a_5,typename type_trait<T_arg6>::take a_6,typename type_trait<T_arg7>::take a_7) + { + typedef typed_slot_rep<T_functor> typed_slot; + typed_slot *typed_rep = static_cast<typed_slot*>(rep); + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take,typename type_trait<T_arg6>::take,typename type_trait<T_arg7>::take> + (a_1,a_2,a_3,a_4,a_5,a_6,a_7); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast<hook>(&call_it); } +}; + +} /* namespace internal */ + + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return> +class slot0 + : public slot_base +{ +public: + typedef T_return result_type; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @return The return value of the functor invocation. + */ + inline T_return operator()() const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_); + return T_return(); + } + + inline slot0() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot0(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call0<T_functor, T_return>::address(); } + + slot0(const slot0& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot0& operator=(const slot0& src) + { slot_base::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return, class T_arg1> +class slot1 + : public slot_base +{ +public: + typedef T_return result_type; + typedef typename type_trait<T_arg1>::take arg1_type_; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*, arg1_type_); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a1 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(arg1_type_ _A_a1) const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_, _A_a1); + return T_return(); + } + + inline slot1() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot1(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call1<T_functor, T_return, T_arg1>::address(); } + + slot1(const slot1& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot1& operator=(const slot1& src) + { slot_base::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return, class T_arg1,class T_arg2> +class slot2 + : public slot_base +{ +public: + typedef T_return result_type; + typedef typename type_trait<T_arg1>::take arg1_type_; + typedef typename type_trait<T_arg2>::take arg2_type_; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*, arg1_type_,arg2_type_); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(arg1_type_ _A_a1,arg2_type_ _A_a2) const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_, _A_a1,_A_a2); + return T_return(); + } + + inline slot2() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot2(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call2<T_functor, T_return, T_arg1,T_arg2>::address(); } + + slot2(const slot2& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot2& operator=(const slot2& src) + { slot_base::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3> +class slot3 + : public slot_base +{ +public: + typedef T_return result_type; + typedef typename type_trait<T_arg1>::take arg1_type_; + typedef typename type_trait<T_arg2>::take arg2_type_; + typedef typename type_trait<T_arg3>::take arg3_type_; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*, arg1_type_,arg2_type_,arg3_type_); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(arg1_type_ _A_a1,arg2_type_ _A_a2,arg3_type_ _A_a3) const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_, _A_a1,_A_a2,_A_a3); + return T_return(); + } + + inline slot3() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot3(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call3<T_functor, T_return, T_arg1,T_arg2,T_arg3>::address(); } + + slot3(const slot3& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot3& operator=(const slot3& src) + { slot_base::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class slot4 + : public slot_base +{ +public: + typedef T_return result_type; + typedef typename type_trait<T_arg1>::take arg1_type_; + typedef typename type_trait<T_arg2>::take arg2_type_; + typedef typename type_trait<T_arg3>::take arg3_type_; + typedef typename type_trait<T_arg4>::take arg4_type_; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*, arg1_type_,arg2_type_,arg3_type_,arg4_type_); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(arg1_type_ _A_a1,arg2_type_ _A_a2,arg3_type_ _A_a3,arg4_type_ _A_a4) const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_, _A_a1,_A_a2,_A_a3,_A_a4); + return T_return(); + } + + inline slot4() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot4(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call4<T_functor, T_return, T_arg1,T_arg2,T_arg3,T_arg4>::address(); } + + slot4(const slot4& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot4& operator=(const slot4& src) + { slot_base::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class slot5 + : public slot_base +{ +public: + typedef T_return result_type; + typedef typename type_trait<T_arg1>::take arg1_type_; + typedef typename type_trait<T_arg2>::take arg2_type_; + typedef typename type_trait<T_arg3>::take arg3_type_; + typedef typename type_trait<T_arg4>::take arg4_type_; + typedef typename type_trait<T_arg5>::take arg5_type_; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*, arg1_type_,arg2_type_,arg3_type_,arg4_type_,arg5_type_); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @param _A_a5 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(arg1_type_ _A_a1,arg2_type_ _A_a2,arg3_type_ _A_a3,arg4_type_ _A_a4,arg5_type_ _A_a5) const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + return T_return(); + } + + inline slot5() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot5(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call5<T_functor, T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::address(); } + + slot5(const slot5& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot5& operator=(const slot5& src) + { slot_base::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg6 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class slot6 + : public slot_base +{ +public: + typedef T_return result_type; + typedef typename type_trait<T_arg1>::take arg1_type_; + typedef typename type_trait<T_arg2>::take arg2_type_; + typedef typename type_trait<T_arg3>::take arg3_type_; + typedef typename type_trait<T_arg4>::take arg4_type_; + typedef typename type_trait<T_arg5>::take arg5_type_; + typedef typename type_trait<T_arg6>::take arg6_type_; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*, arg1_type_,arg2_type_,arg3_type_,arg4_type_,arg5_type_,arg6_type_); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @param _A_a5 Argument to be passed on to the functor. + * @param _A_a6 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(arg1_type_ _A_a1,arg2_type_ _A_a2,arg3_type_ _A_a3,arg4_type_ _A_a4,arg5_type_ _A_a5,arg6_type_ _A_a6) const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + return T_return(); + } + + inline slot6() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot6(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call6<T_functor, T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::address(); } + + slot6(const slot6& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot6& operator=(const slot6& src) + { slot_base::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg6 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg7 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * You should use the more convenient unnumbered sigc::slot template. + * + * @ingroup slot + */ +/* TODO: Where put the following bit of information? I can't make any + * sense of the "because", by the way! + * + * Because slot is opaque, visit_each() will not visit its internal members. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class slot7 + : public slot_base +{ +public: + typedef T_return result_type; + typedef typename type_trait<T_arg1>::take arg1_type_; + typedef typename type_trait<T_arg2>::take arg2_type_; + typedef typename type_trait<T_arg3>::take arg3_type_; + typedef typename type_trait<T_arg4>::take arg4_type_; + typedef typename type_trait<T_arg5>::take arg5_type_; + typedef typename type_trait<T_arg6>::take arg6_type_; + typedef typename type_trait<T_arg7>::take arg7_type_; + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + typedef internal::slot_rep rep_type; +public: + typedef T_return (*call_type)(rep_type*, arg1_type_,arg2_type_,arg3_type_,arg4_type_,arg5_type_,arg6_type_,arg7_type_); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a1 Argument to be passed on to the functor. + * @param _A_a2 Argument to be passed on to the functor. + * @param _A_a3 Argument to be passed on to the functor. + * @param _A_a4 Argument to be passed on to the functor. + * @param _A_a5 Argument to be passed on to the functor. + * @param _A_a6 Argument to be passed on to the functor. + * @param _A_a7 Argument to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(arg1_type_ _A_a1,arg2_type_ _A_a2,arg3_type_ _A_a3,arg4_type_ _A_a4,arg5_type_ _A_a5,arg6_type_ _A_a6,arg7_type_ _A_a7) const + { + if (!empty() && !blocked()) + return (reinterpret_cast<call_type>(rep_->call_))(rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + return T_return(); + } + + inline slot7() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot7(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep<T_functor>(_A_func)) + { rep_->call_ = internal::slot_call7<T_functor, T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::address(); } + + slot7(const slot7& src) + : slot_base(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot7& operator=(const slot7& src) + { slot_base::operator=(src); return *this; } +}; + + +/** Convenience wrapper for the numbered sigc::slot# templates. + * Slots convert arbitrary functors to unified types which are opaque. + * sigc::slot itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg3 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg4 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg5 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg6 Argument type used in the definition of operator()(). The default @p nil means no argument. + * - @e T_arg7 Argument type used in the definition of operator()(). The default @p nil means no argument. + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * void foo(int) {} + * sigc::slot<void, long> s = sigc::ptr_fun(&foo); + * s(19); + * @endcode + * + * @ingroup slot + */ +template <class T_return, class T_arg1 = nil,class T_arg2 = nil,class T_arg3 = nil,class T_arg4 = nil,class T_arg5 = nil,class T_arg6 = nil,class T_arg7 = nil> +class slot + : public slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +{ +public: + typedef slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + + +/** Convenience wrapper for the numbered sigc::slot0 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for 0 argument(s). + */ +template <class T_return> +class slot <T_return> + : public slot0<T_return> +{ +public: + typedef slot0<T_return> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + +/** Convenience wrapper for the numbered sigc::slot1 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for 1 argument(s). + */ +template <class T_return, class T_arg1> +class slot <T_return, T_arg1> + : public slot1<T_return, T_arg1> +{ +public: + typedef slot1<T_return, T_arg1> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + +/** Convenience wrapper for the numbered sigc::slot2 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for 2 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2> +class slot <T_return, T_arg1,T_arg2> + : public slot2<T_return, T_arg1,T_arg2> +{ +public: + typedef slot2<T_return, T_arg1,T_arg2> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + +/** Convenience wrapper for the numbered sigc::slot3 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for 3 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3> +class slot <T_return, T_arg1,T_arg2,T_arg3> + : public slot3<T_return, T_arg1,T_arg2,T_arg3> +{ +public: + typedef slot3<T_return, T_arg1,T_arg2,T_arg3> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + +/** Convenience wrapper for the numbered sigc::slot4 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for 4 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class slot <T_return, T_arg1,T_arg2,T_arg3,T_arg4> + : public slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +{ +public: + typedef slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + +/** Convenience wrapper for the numbered sigc::slot5 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for 5 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class slot <T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> + : public slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +{ +public: + typedef slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + +/** Convenience wrapper for the numbered sigc::slot6 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for 6 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class slot <T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> + : public slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +{ +public: + typedef slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desirer functor the new slot should be assigned to. + */ + template <class T_functor> + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + slot(const slot& src) + : parent_type((const parent_type&)src) {} +}; + + + +} /* namespace sigc */ +#endif /* _SIGC_FUNCTORS_MACROS_SLOTHM4_ */ diff --git a/libs/sigc++2/sigc++/functors/slot_base.cc b/libs/sigc++2/sigc++/functors/slot_base.cc new file mode 100644 index 0000000000..bc0f173f22 --- /dev/null +++ b/libs/sigc++2/sigc++/functors/slot_base.cc @@ -0,0 +1,165 @@ +// -*- c++ -*- +/* + * Copyright 2003, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <sigc++/functors/slot_base.h> + +namespace sigc +{ + +namespace internal { + +// only MSVC needs this to guarantee that all new/delete are executed from the DLL module +#ifdef SIGC_NEW_DELETE_IN_LIBRARY_ONLY +void* slot_rep::operator new(size_t size_) +{ + return malloc(size_); +} + +void slot_rep::operator delete(void* p) +{ + free(p); +} +#endif + +void slot_rep::disconnect() +{ + if (parent_) + { + call_ = 0; // Invalidate the slot. + // _Must_ be done here because parent_ might defer the actual + // destruction of the slot_rep and try to invoke it before that point. + void* data_ = parent_; + parent_ = 0; // Just a precaution. + (cleanup_)(data_); // Notify the parent (might lead to destruction of this!). + } +} + +//static +void* slot_rep::notify(void* data) +{ + slot_rep* self_ = (slot_rep*)data; + self_->call_ = 0; // Invalidate the slot. + self_->destroy(); // Detach the stored functor from the other referred trackables and destroy it. + self_->disconnect(); // Disconnect the slot (might lead to deletion of self_!). + return 0; +} + +} // namespace internal + +slot_base::slot_base() +: rep_(0), + blocked_(false) +{} + +slot_base::slot_base(rep_type* rep) +: rep_(rep), + blocked_(false) +{} + +slot_base::slot_base(const slot_base& src) +: rep_(0), + blocked_(src.blocked_) +{ + if (src.rep_) + rep_ = src.rep_->dup(); +} + +slot_base::~slot_base() +{ + if (rep_) + delete rep_; +} + +slot_base::operator bool() const +{ + return rep_ != 0; +} + +slot_base& slot_base::operator=(const slot_base& src) +{ + if (src.rep_ == rep_) return *this; + + if (src.empty()) + { + disconnect(); + return *this; + } + + internal::slot_rep* new_rep_ = src.rep_->dup(); + + if (rep_) // Silently exchange the slot_rep. + { + new_rep_->set_parent(rep_->parent_, rep_->cleanup_); + delete rep_; + } + + rep_ = new_rep_; + + return *this; +} + +void slot_base::set_parent(void* parent, void* (*cleanup)(void*)) const +{ + if (rep_) + rep_->set_parent(parent, cleanup); +} + +void slot_base::add_destroy_notify_callback(void* data, func_destroy_notify func) const +{ + if (rep_) + rep_->add_destroy_notify_callback(data, func); +} + +void slot_base::remove_destroy_notify_callback(void* data) const +{ + if (rep_) + rep_->remove_destroy_notify_callback(data); +} + +bool slot_base::block(bool should_block) +{ + bool old = blocked_; + blocked_ = should_block; + return old; +} + +bool slot_base::unblock() +{ + return block(false); +} + +void slot_base::disconnect() +{ + if (rep_) + rep_->disconnect(); +} + + +/*bool slot_base::empty() const // having this function not inline is killing performance !!! +{ + if (rep_ && !rep_->call_) + { + delete rep_; // This is not strictly necessary here. I'm convinced that it is + rep_ = 0; // safe to wait for the destructor to delete the slot_rep. Martin. + } + return (rep_ == 0); +}*/ + +} //namespace sigc diff --git a/libs/sigc++2/sigc++/functors/slot_base.h b/libs/sigc++2/sigc++/functors/slot_base.h new file mode 100644 index 0000000000..bb2ed343f3 --- /dev/null +++ b/libs/sigc++2/sigc++/functors/slot_base.h @@ -0,0 +1,319 @@ +/* + * Copyright 2003, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_SLOT_BASE_HPP_ +#define _SIGC_SLOT_BASE_HPP_ + +#include <sigc++config.h> +#include <sigc++/trackable.h> +#include <sigc++/functors/functor_trait.h> + +namespace sigc +{ + +namespace internal { + +typedef void* (*hook)(void*); + +/** Internal representation of a slot. + * Derivations of this class can be considered as a link + * between a slot and the functor that the slot should + * execute in operator(). This link is needed because in + * libsigc++2 the slot doesn't necessarily have exactly the + * same function signature as the functor thus allowing for + * implicit conversions. + * The base class slot_rep serves the purpose to + * - form a common pointer type (slot_rep*), + * - offer the possibility to create duplicates (dup()), + * - offer a notification callback (notify()), + * - implement some of slot_base's interface that depends + * on the notification callback, i.e. + * -# the possibility to set a single parent with a callback + * (set_parent()) that is executed from notify(), + * -# a generic function pointer, call_, that is simply + * set to zero in notify() to invalidate the slot. + * slot_rep inherits trackable so that connection objects can + * refer to the slot and are notified when the slot is destroyed. + */ +struct SIGC_API slot_rep : public trackable +{ + /* NB: Instead of slot_rep we could inherit slot_base from trackable. + * However, a simple benchmark seems to indicate that this slows + * down dereferencing of slot list iterators. Martin. */ + + /// Callback that invokes the contained functor. + /* This can't be a virtual function since number of arguments + * must be flexible. We use function pointers to slot_call::call_it() + * instead. call_ is set to zero to indicate that the slot is invalid. + */ + hook call_; + + /// Callback that detaches the slot_rep object from referred trackables and destroys it. + /* This could be a replaced by a virtual dtor. However since this struct is + * crucual for the efficiency of the whole library we want to avoid this. + */ + hook destroy_; + + /** Callback that makes a deep copy of the slot_rep object. + * @return A deep copy of the slot_rep object. + */ + hook dup_; + + /** Callback of parent_. */ + hook cleanup_; + + /** Parent object whose callback cleanup_ is executed on notification. */ + void* parent_; + + inline slot_rep(hook call__, hook destroy__, hook dup__) + : call_(call__), destroy_(destroy__), dup_(dup__), cleanup_(0), parent_(0) {} + + inline ~slot_rep() + { destroy(); } + + // only MSVC needs this to guarantee that all new/delete are executed from the DLL module +#ifdef SIGC_NEW_DELETE_IN_LIBRARY_ONLY + void* operator new(size_t size_); + void operator delete(void* p); +#endif + + /** Destroys the slot_rep object (but doesn't delete it). + */ + inline void destroy() + { if (destroy_) (*destroy_)(this); } + + /** Makes a deep copy of the slot_rep object. + * @return A deep copy of the slot_rep object. + */ + inline slot_rep* dup() const + { return (slot_rep*)(*dup_)(const_cast<slot_rep*>(this)); } + + /** Set the parent with a callback. + * slots have one parent exclusively. + * @param parent The new parent. + * @param cleanup The callback to execute from notify(). + */ + inline void set_parent(void* parent, hook cleanup) + { + parent_ = parent; + cleanup_ = cleanup; + } + + /// Invalidates the slot and executes the parent's cleanup callback. + void disconnect(); + + /** Callback that invalidates the slot. + * This callback is registered in every object of a trackable + * inherited type that is referred by this slot_rep object. + * It is executed when the slot becomes invalid because of some + * referred object dying. + * @param data The slot_rep object that is becoming invalid (@p this). + */ + static void* notify(void* data); +}; + +/** Functor used to add a dependency to a trackable. + * Consequently slot_rep::notify() gets executed when the + * trackable is destroyed or overwritten. + */ +struct SIGC_API slot_do_bind +{ + /** The slot_rep object trackables should notify on destruction. */ + slot_rep* rep_; + + /** Construct a slot_do_bind functor. + * @param rep The slot_rep object trackables should notify on destruction. + */ + inline slot_do_bind(slot_rep* rep) : rep_(rep) {} + + /** Adds a dependency to @p t. + * @param t The trackable object to add a callback to. + */ + inline void operator()(const trackable* t) const + { t->add_destroy_notify_callback(rep_, &slot_rep::notify); } +}; + +/// Functor used to remove a dependency from a trackable. +struct SIGC_API slot_do_unbind +{ + /** The slot_rep object trackables don't need to notify on destruction any more. */ + slot_rep* rep_; + + /** Construct a slot_do_unbind functor. + * @param rep The slot_rep object trackables don't need to notify on destruction any more. + */ + inline slot_do_unbind(slot_rep* rep) : rep_(rep) {} + + /** Removes a dependency from @p t. + * @param t The trackable object to remove the callback from. + */ + inline void operator()(const trackable* t) const + { t->remove_destroy_notify_callback(rep_); } +}; + +} //namespace internal + + +/** @defgroup slot Slots + * Slots are type-safe representations of callback methods and functions. + * A Slot can be constructed from any function, regardless of whether it is a global function, + * a member method, static, or virtual. + * + * Use the sigc::mem_fun() and sigc::ptr_fun() template functions to get a sigc::slot, like so: + * + * @code + * sigc::slot<void, int> sl = sigc::mem_fun(someobj,& SomeClass::somemethod); + * @endcode + * + * or + * + * @code + * sigc::slot<void, int> sl = sigc::ptr_fun(&somefunction); + * @endcode + * + * or + * + * @code + * m_Button.signal_clicked().connect( sigc::mem_fun(*this, &MyWindow::on_button_clicked) ); + * @endcode + * + * The compiler will complain if SomeClass::somemethod, etc. have the wrong signature. + * + * You can also pass slots as method parameters where you might normally pass a function pointer. + * + * @ingroup functors + */ + +/** Base type for slots. + * slot_base integrates most of the interface of the derived + * sigc::slot templates. slots + * can be connected to signals, be disconnected at some later point + * (disconnect()) and temporarily be blocked (block(), unblock()). + * The validity of a slot can be tested with empty(). + * + * The internal representation of a sigc::internal::slot_rep derived + * type is built from slot_base's derivations. set_parent() is used to + * register a notification callback that is executed when the slot gets + * invalid. add_destroy_notify_callback() is used by connection objects + * to add a notification callback that is executed on destruction. + * + * @ingroup slot + */ +class SIGC_API slot_base : public functor_base +{ + typedef internal::slot_rep rep_type; + +public: + /// Constructs an empty slot. + slot_base(); + + /** Constructs a slot from an existing slot_rep object. + * @param rep The slot_rep object this slot should contain. + */ + explicit slot_base(rep_type* rep); + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + slot_base(const slot_base& src); + + ~slot_base(); + + /** Tests whether a slot is null, because the default constructor was used. + * Test a slot for null like so: + * @code + * if(slot) + * do_something() + * @endcode + */ + operator bool() const; + + /** Sets the parent of this slot. + * This function is used by signals to register a notification callback. + * This notification callback is executed when the slot becomes invalid + * because of some referred object dying. + * @param parent The new parent. + * @param cleanup The notification callback. + */ + void set_parent(void* parent, void* (*cleanup)(void*)) const; + + typedef trackable::func_destroy_notify func_destroy_notify; + /** Add a callback that is executed (notified) when the slot is detroyed. + * This function is used internally by connection objects. + * @param data Passed into func upon notification. + * @param func Callback executed upon destruction of the object. + */ + void add_destroy_notify_callback(void* data, func_destroy_notify func) const; + + /** Remove a callback previously installed with add_destroy_notify_callback(). + * The callback is not executed. + * @param data Parameter passed into previous call to add_destroy_notify_callback(). + */ + void remove_destroy_notify_callback(void* data) const; + + /** Returns whether the slot is invalid. + * @return @p true if the slot is invalid (empty). + */ + inline bool empty() const + { return (!rep_ || !rep_->call_); } + + /** Returns whether the slot is blocked. + * @return @p true if the slot is blocked. + */ + inline bool blocked() const + { return blocked_; } + + /** Sets the blocking state. + * If @e should_block is @p true then the blocking state is set. + * Subsequent calls to slot::operator()() don't invoke the functor + * contained by this slot until unblock() or block() with + * @e should_block = @p false is called. + * @param should_block Indicates whether the blocking state should be set or unset. + * @return @p true if the slot was in blocking state before. + */ + bool block(bool should_block = true); + + /** Unsets the blocking state. + * @return @p true if the slot was in blocking state before. + */ + bool unblock(); + + /** Disconnects the slot. + * Invalidates the slot and notifies the parent. + */ + void disconnect(); + +protected: + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot_base& operator=(const slot_base& src); + +public: // public to avoid template friend declarations + /** Typed slot_rep object that contains a functor. */ + mutable rep_type *rep_; + + /** Indicates whether the slot is blocked. */ + bool blocked_; +}; + +} //namespace sigc + +#endif //_SIGC_SLOT_BASE_HPP_ + diff --git a/libs/sigc++2/sigc++/hide.h b/libs/sigc++2/sigc++/hide.h new file mode 100644 index 0000000000..c4852b7b42 --- /dev/null +++ b/libs/sigc++2/sigc++/hide.h @@ -0,0 +1,105 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + +#ifndef _SIGC_MACROS_HIDEHM4_ +#define _SIGC_MACROS_HIDEHM4_ + +#include <sigc++/slot.h> +#include <sigc++/adaptors/hide.h> + + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +template <class T_hidden1, class T_return> +inline SigC::Slot1<T_return, T_hidden1> +hide(const SigC::Slot0<T_return>& _A_slot) +{ return ::sigc::hide_functor<0, SigC::Slot0<T_return> > + (_A_slot); } + +template <class T_hidden1, class T_return, class T_arg1> +inline SigC::Slot2<T_return, T_arg1, T_hidden1> +hide(const SigC::Slot1<T_return, T_arg1>& _A_slot) +{ return ::sigc::hide_functor<0, SigC::Slot1<T_return, T_arg1> > + (_A_slot); } + +template <class T_hidden1, class T_return, class T_arg1,class T_arg2> +inline SigC::Slot3<T_return, T_arg1,T_arg2, T_hidden1> +hide(const SigC::Slot2<T_return, T_arg1,T_arg2>& _A_slot) +{ return ::sigc::hide_functor<0, SigC::Slot2<T_return, T_arg1,T_arg2> > + (_A_slot); } + +template <class T_hidden1, class T_return, class T_arg1,class T_arg2,class T_arg3> +inline SigC::Slot4<T_return, T_arg1,T_arg2,T_arg3, T_hidden1> +hide(const SigC::Slot3<T_return, T_arg1,T_arg2,T_arg3>& _A_slot) +{ return ::sigc::hide_functor<0, SigC::Slot3<T_return, T_arg1,T_arg2,T_arg3> > + (_A_slot); } + +template <class T_hidden1, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline SigC::Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_hidden1> +hide(const SigC::Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4>& _A_slot) +{ return ::sigc::hide_functor<0, SigC::Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > + (_A_slot); } + +template <class T_hidden1, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline SigC::Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_hidden1> +hide(const SigC::Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_slot) +{ return ::sigc::hide_functor<0, SigC::Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > + (_A_slot); } + +template <class T_hidden1, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline SigC::Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_hidden1> +hide(const SigC::Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>& _A_slot) +{ return ::sigc::hide_functor<0, SigC::Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> > + (_A_slot); } + + +template <class T_hidden1,class T_hidden2, class T_return> +inline SigC::Slot2<T_return, T_hidden1,T_hidden2> +hide(const SigC::Slot0<T_return>& _A_slot) +{ return ::sigc::hide<0>( + ::sigc::hide_functor<0, SigC::Slot0<T_return> > + (_A_slot)); } + +template <class T_hidden1,class T_hidden2, class T_return, class T_arg1> +inline SigC::Slot3<T_return, T_arg1, T_hidden1,T_hidden2> +hide(const SigC::Slot1<T_return, T_arg1>& _A_slot) +{ return ::sigc::hide<0>( + ::sigc::hide_functor<0, SigC::Slot1<T_return, T_arg1> > + (_A_slot)); } + +template <class T_hidden1,class T_hidden2, class T_return, class T_arg1,class T_arg2> +inline SigC::Slot4<T_return, T_arg1,T_arg2, T_hidden1,T_hidden2> +hide(const SigC::Slot2<T_return, T_arg1,T_arg2>& _A_slot) +{ return ::sigc::hide<0>( + ::sigc::hide_functor<0, SigC::Slot2<T_return, T_arg1,T_arg2> > + (_A_slot)); } + +template <class T_hidden1,class T_hidden2, class T_return, class T_arg1,class T_arg2,class T_arg3> +inline SigC::Slot5<T_return, T_arg1,T_arg2,T_arg3, T_hidden1,T_hidden2> +hide(const SigC::Slot3<T_return, T_arg1,T_arg2,T_arg3>& _A_slot) +{ return ::sigc::hide<0>( + ::sigc::hide_functor<0, SigC::Slot3<T_return, T_arg1,T_arg2,T_arg3> > + (_A_slot)); } + +template <class T_hidden1,class T_hidden2, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline SigC::Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_hidden1,T_hidden2> +hide(const SigC::Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4>& _A_slot) +{ return ::sigc::hide<0>( + ::sigc::hide_functor<0, SigC::Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> > + (_A_slot)); } + +template <class T_hidden1,class T_hidden2, class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline SigC::Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_hidden1,T_hidden2> +hide(const SigC::Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>& _A_slot) +{ return ::sigc::hide<0>( + ::sigc::hide_functor<0, SigC::Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> > + (_A_slot)); } + + + +} /* namespace SigC */ + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ +#endif /* _SIGC_MACROS_HIDEHM4_ */ diff --git a/libs/sigc++2/sigc++/method_slot.h b/libs/sigc++2/sigc++/method_slot.h new file mode 100644 index 0000000000..d92781633b --- /dev/null +++ b/libs/sigc++2/sigc++/method_slot.h @@ -0,0 +1,387 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + + +#ifndef _SIGC_MACROS_METHOD_SLOTHM4_ +#define _SIGC_MACROS_METHOD_SLOTHM4_ + +#include <sigc++/slot.h> +#include <sigc++/functors/mem_fun.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +/** Creates a functor of type Sigc::Slot1 that wraps a method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot1<T_return, T_obj&> +slot(T_return (T_obj::*_A_func)() ) +{ return ::sigc::mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type Sigc::Slot2 that wraps a method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot2<T_return, T_obj&, T_arg1> +slot(T_return (T_obj::*_A_func)(T_arg1) ) +{ return ::sigc::mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type Sigc::Slot3 that wraps a method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot3<T_return, T_obj&, T_arg1,T_arg2> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2) ) +{ return ::sigc::mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type Sigc::Slot4 that wraps a method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot4<T_return, T_obj&, T_arg1,T_arg2,T_arg3> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ return ::sigc::mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type Sigc::Slot5 that wraps a method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot5<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ return ::sigc::mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type Sigc::Slot6 that wraps a method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot6<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ return ::sigc::mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type Sigc::Slot7 that wraps a method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot7<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ return ::sigc::mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + + +/** Creates a functor of type Sigc::Slot1 that wraps a const method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot1<T_return, T_obj&> +slot(T_return (T_obj::*_A_func)() const) +{ return ::sigc::const_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type Sigc::Slot2 that wraps a const method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot2<T_return, T_obj&, T_arg1> +slot(T_return (T_obj::*_A_func)(T_arg1) const) +{ return ::sigc::const_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type Sigc::Slot3 that wraps a const method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot3<T_return, T_obj&, T_arg1,T_arg2> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2) const) +{ return ::sigc::const_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type Sigc::Slot4 that wraps a const method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot4<T_return, T_obj&, T_arg1,T_arg2,T_arg3> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ return ::sigc::const_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type Sigc::Slot5 that wraps a const method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot5<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ return ::sigc::const_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type Sigc::Slot6 that wraps a const method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot6<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ return ::sigc::const_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type Sigc::Slot7 that wraps a const method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot7<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ return ::sigc::const_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + + +/** Creates a functor of type Sigc::Slot1 that wraps a volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot1<T_return, T_obj&> +slot(T_return (T_obj::*_A_func)() volatile) +{ return ::sigc::volatile_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type Sigc::Slot2 that wraps a volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot2<T_return, T_obj&, T_arg1> +slot(T_return (T_obj::*_A_func)(T_arg1) volatile) +{ return ::sigc::volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type Sigc::Slot3 that wraps a volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot3<T_return, T_obj&, T_arg1,T_arg2> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2) volatile) +{ return ::sigc::volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type Sigc::Slot4 that wraps a volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot4<T_return, T_obj&, T_arg1,T_arg2,T_arg3> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ return ::sigc::volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type Sigc::Slot5 that wraps a volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot5<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ return ::sigc::volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type Sigc::Slot6 that wraps a volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot6<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ return ::sigc::volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type Sigc::Slot7 that wraps a volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot7<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ return ::sigc::volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + + +/** Creates a functor of type Sigc::Slot1 that wraps a const volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj> +inline Slot1<T_return, T_obj&> +slot(T_return (T_obj::*_A_func)() const volatile) +{ return ::sigc::const_volatile_mem_functor0<T_return, T_obj>(_A_func); } + +/** Creates a functor of type Sigc::Slot2 that wraps a const volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj> +inline Slot2<T_return, T_obj&, T_arg1> +slot(T_return (T_obj::*_A_func)(T_arg1) const volatile) +{ return ::sigc::const_volatile_mem_functor1<T_return, T_obj, T_arg1>(_A_func); } + +/** Creates a functor of type Sigc::Slot3 that wraps a const volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj> +inline Slot3<T_return, T_obj&, T_arg1,T_arg2> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2) const volatile) +{ return ::sigc::const_volatile_mem_functor2<T_return, T_obj, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type Sigc::Slot4 that wraps a const volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj> +inline Slot4<T_return, T_obj&, T_arg1,T_arg2,T_arg3> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ return ::sigc::const_volatile_mem_functor3<T_return, T_obj, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type Sigc::Slot5 that wraps a const volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj> +inline Slot5<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ return ::sigc::const_volatile_mem_functor4<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type Sigc::Slot6 that wraps a const volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj> +inline Slot6<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ return ::sigc::const_volatile_mem_functor5<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type Sigc::Slot7 that wraps a const volatile method. + * + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj> +inline Slot7<T_return, T_obj&, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot(T_return (T_obj::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ return ::sigc::const_volatile_mem_functor6<T_return, T_obj, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + + + +} + +#endif +#endif /* _SIGC_MACROS_METHOD_SLOTHM4_ */ diff --git a/libs/sigc++2/sigc++/object.h b/libs/sigc++2/sigc++/object.h new file mode 100644 index 0000000000..0ddefa02b2 --- /dev/null +++ b/libs/sigc++2/sigc++/object.h @@ -0,0 +1,35 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_OBJECT_HPP_ +#define _SIGC_OBJECT_HPP_ + +#include <sigc++/trackable.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +// Object +typedef ::sigc::trackable Object; + +} + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ + +#endif /* _SIGC_OBJECT_HPP_ */ diff --git a/libs/sigc++2/sigc++/object_slot.h b/libs/sigc++2/sigc++/object_slot.h new file mode 100644 index 0000000000..e9d031ed50 --- /dev/null +++ b/libs/sigc++2/sigc++/object_slot.h @@ -0,0 +1,536 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + + +#ifndef _SIGC_MACROS_OBJECT_SLOTHM4_ +#define _SIGC_MACROS_OBJECT_SLOTHM4_ + +#include <sigc++/slot.h> +#include <sigc++/object.h> +#include <sigc++/functors/mem_fun.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +/** Creates a functor of type SigC::Slot0 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj1, class T_obj2> +inline Slot0<T_return> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)() ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor0<T_return, T_obj2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj1, class T_obj2> +inline Slot1<T_return, T_arg1> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor1<T_return, T_obj2, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj1, class T_obj2> +inline Slot2<T_return, T_arg1,T_arg2> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor2<T_return, T_obj2, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj1, class T_obj2> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor3<T_return, T_obj2, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj1, class T_obj2> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor4<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj1, class T_obj2> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor5<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj1, class T_obj2> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor6<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj1, class T_obj2> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) ) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_mem_functor7<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +/** Creates a functor of type SigC::Slot0 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj1, class T_obj2> +inline Slot0<T_return> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)() const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor0<T_return, T_obj2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj1, class T_obj2> +inline Slot1<T_return, T_arg1> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor1<T_return, T_obj2, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj1, class T_obj2> +inline Slot2<T_return, T_arg1,T_arg2> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor2<T_return, T_obj2, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj1, class T_obj2> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor3<T_return, T_obj2, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj1, class T_obj2> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor4<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj1, class T_obj2> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor5<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj1, class T_obj2> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor6<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a const method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj1, class T_obj2> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_mem_functor7<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +/** Creates a functor of type SigC::Slot0 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj1, class T_obj2> +inline Slot0<T_return> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)() volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor0<T_return, T_obj2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj1, class T_obj2> +inline Slot1<T_return, T_arg1> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor1<T_return, T_obj2, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj1, class T_obj2> +inline Slot2<T_return, T_arg1,T_arg2> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor2<T_return, T_obj2, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj1, class T_obj2> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor3<T_return, T_obj2, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj1, class T_obj2> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor4<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj1, class T_obj2> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor5<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj1, class T_obj2> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor6<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj1, class T_obj2> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot( T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile) +{ (void)dynamic_cast< Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_volatile_mem_functor7<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + +/** Creates a functor of type SigC::Slot0 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_obj1, class T_obj2> +inline Slot0<T_return> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)() const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor0<T_return, T_obj2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot1 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_obj1, class T_obj2> +inline Slot1<T_return, T_arg1> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1) const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor1<T_return, T_obj2, T_arg1>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot2 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_obj1, class T_obj2> +inline Slot2<T_return, T_arg1,T_arg2> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2) const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor2<T_return, T_obj2, T_arg1,T_arg2>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot3 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_obj1, class T_obj2> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3) const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor3<T_return, T_obj2, T_arg1,T_arg2,T_arg3>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot4 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_obj1, class T_obj2> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4) const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor4<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot5 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_obj1, class T_obj2> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor5<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot6 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_obj1, class T_obj2> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor6<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_obj, _A_func); } + +/** Creates a functor of type SigC::Slot7 that encapsulates a const volatile method and an object instance. + * @e _A_obj must be of a type that inherits from SigC::Object. + * + * @param _A_obj Reference to object instance the functor should operate on. + * @param _A_func Pointer to method that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::mem_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_obj1, class T_obj2> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot(const T_obj1& _A_obj, T_return (T_obj2::*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const volatile) +{ (void)dynamic_cast<const Object&>(_A_obj); // trigger compiler error if T_obj1 does not derive from SigC::Object + return ::sigc::bound_const_volatile_mem_functor7<T_return, T_obj2, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_obj, _A_func); } + + + +} + +#endif +#endif /* _SIGC_MACROS_OBJECT_SLOTHM4_ */ diff --git a/libs/sigc++2/sigc++/reference_wrapper.h b/libs/sigc++2/sigc++/reference_wrapper.h new file mode 100644 index 0000000000..436e02f9bb --- /dev/null +++ b/libs/sigc++2/sigc++/reference_wrapper.h @@ -0,0 +1,118 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_REFERENCE_WRAPPER_H_ +#define _SIGC_REFERENCE_WRAPPER_H_ + +namespace sigc { + +/** Reference wrapper. + * Use sigc::ref() to create a reference wrapper. + */ +template <class T_type> +struct reference_wrapper +{ + explicit reference_wrapper(T_type& v) + : value_(v) {} + + operator T_type& () const + { return value_; } + + T_type& value_; +}; + +/** Const reference wrapper. + * Use sigc::ref() to create a const reference wrapper. + */ +template <class T_type> +struct const_reference_wrapper +{ + explicit const_reference_wrapper(const T_type& v) + : value_(v) {} + + operator const T_type& () const + { return value_; } + + const T_type& value_; +}; + +/** Creates a reference wrapper. + * Passing an object throught sigc::ref() makes libsigc++ adaptors + * like, e.g., sigc::bind store references to the object instead of copies. + * If the object type inherits from sigc::trackable this will ensure + * automatic invalidation of the adaptors when the object is deleted + * or overwritten. + * + * @param v Reference to store. + * @return A reference wrapper. + */ +template <class T_type> +reference_wrapper<T_type> ref(T_type& v) +{ return reference_wrapper<T_type>(v); } + +/** Creates a const reference wrapper. + * Passing an object throught sigc::ref() makes libsigc++ adaptors + * like, e.g., sigc::bind store references to the object instead of copies. + * If the object type inherits from sigc::trackable this will ensure + * automatic invalidation of the adaptors when the object is deleted + * or overwritten. + * + * @param v Reference to store. + * @return A reference wrapper. + */ +template <class T_type> +const_reference_wrapper<T_type> ref(const T_type& v) +{ return const_reference_wrapper<T_type>(v); } + +template <class T_type> +struct unwrap_reference +{ + typedef T_type type; +}; + +template <class T_type> +struct unwrap_reference<reference_wrapper<T_type> > +{ + typedef T_type& type; +}; + +template <class T_type> +struct unwrap_reference<const_reference_wrapper<T_type> > +{ + typedef const T_type& type; +}; + +template <class T_type> +T_type& unwrap(T_type& v) +{ return v; } + +template <class T_type> +const T_type& unwrap(const T_type& v) +{ return v; } + +template <class T_type> +T_type& unwrap(const reference_wrapper<T_type>& v) +{ return v; } + +template <class T_type> +const T_type& unwrap(const const_reference_wrapper<T_type>& v) +{ return v; } + +} /* namespace sigc */ + +#endif /* _SIGC_REFERENCE_WRAPPER_H_ */ diff --git a/libs/sigc++2/sigc++/retype.h b/libs/sigc++2/sigc++/retype.h new file mode 100644 index 0000000000..5df6622f84 --- /dev/null +++ b/libs/sigc++2/sigc++/retype.h @@ -0,0 +1,321 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ +#ifndef _SIGC_MACROS_RETYPEHM4_ +#define _SIGC_MACROS_RETYPEHM4_ +#include <sigc++/adaptors/adaptor_trait.h> +#include <sigc++/slot.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +template <class T_functor, class T_return, class T_type1=::sigc::nil,class T_type2=::sigc::nil,class T_type3=::sigc::nil,class T_type4=::sigc::nil,class T_type5=::sigc::nil,class T_type6=::sigc::nil,class T_type7=::sigc::nil> +struct retype_slot_functor + : public ::sigc::adapts<T_functor> +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef T_return type; }; + typedef T_return result_type; + + T_return operator()(); + + template <class T_arg1> + inline T_return operator()(T_arg1 _A_a1) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take> + ((T_type1)_A_a1)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + inline T_return sun_forte_workaround(T_arg1 _A_a1) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take> + ((T_type1)_A_a1)); + } + #endif + + template <class T_arg1,class T_arg2> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take> + ((T_type1)_A_a1,(T_type2)_A_a2)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take> + ((T_type1)_A_a1,(T_type2)_A_a2)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take,typename ::sigc::type_trait<T_type7>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6,(T_type7)_A_a7)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take,typename ::sigc::type_trait<T_type7>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6,(T_type7)_A_a7)); + } + #endif + + + retype_slot_functor(typename ::sigc::type_trait<T_functor>::take _A_functor) + : ::sigc::adapts<T_functor>(_A_functor) + {} +}; + +template <class T_functor, class T_return, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +T_return retype_slot_functor<T_functor, T_return, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>::operator()() + { return T_return(this->functor_()); } + + +// void specialization needed because of explicit cast to T_return +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +struct retype_slot_functor<T_functor, void, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7> + : public ::sigc::adapts<T_functor> +{ + template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void> + struct deduce_result_type + { typedef void type; }; + typedef void result_type; + + void operator()(); + + template <class T_arg1> + inline void operator()(T_arg1 _A_a1) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take> + ((T_type1)_A_a1)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1> + inline void sun_forte_workaround(T_arg1 _A_a1) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take> + ((T_type1)_A_a1)); + } + #endif + + template <class T_arg1,class T_arg2> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take> + ((T_type1)_A_a1,(T_type2)_A_a2)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take> + ((T_type1)_A_a1,(T_type2)_A_a2)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6)); + } + #endif + + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take,typename ::sigc::type_trait<T_type7>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6,(T_type7)_A_a7)); + } + + #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> + inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7) + { T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename ::sigc::type_trait<T_type1>::take,typename ::sigc::type_trait<T_type2>::take,typename ::sigc::type_trait<T_type3>::take,typename ::sigc::type_trait<T_type4>::take,typename ::sigc::type_trait<T_type5>::take,typename ::sigc::type_trait<T_type6>::take,typename ::sigc::type_trait<T_type7>::take> + ((T_type1)_A_a1,(T_type2)_A_a2,(T_type3)_A_a3,(T_type4)_A_a4,(T_type5)_A_a5,(T_type6)_A_a6,(T_type7)_A_a7)); + } + #endif + + + retype_slot_functor(typename ::sigc::type_trait<T_functor>::take _A_functor) + : ::sigc::adapts<T_functor>(_A_functor) + {} +}; + +template <class T_functor, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +void retype_slot_functor<T_functor, void, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>::operator()() + { this->functor_(); } + + +template <class T_action, class T_functor, class T_return, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +void visit_each(const T_action& _A_action, + const retype_slot_functor<T_functor, T_return, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>& _A_target) +{ + visit_each(_A_action, _A_target.functor_); +} + + +template <class T_return, class T_ret> +inline Slot0<T_return> +retype(const Slot0<T_ret>& _A_slot) +{ return Slot0<T_return> + (retype_slot_functor<Slot0<T_ret>, T_return> + (_A_slot)); } + +template <class T_return, class T_arg1, class T_ret, class T_type1> +inline Slot1<T_return, T_arg1> +retype(const Slot1<T_ret, T_type1>& _A_slot) +{ return Slot1<T_return, T_arg1> + (retype_slot_functor<Slot1<T_ret, T_type1>, T_return, T_type1> + (_A_slot)); } + +template <class T_return, class T_arg1,class T_arg2, class T_ret, class T_type1,class T_type2> +inline Slot2<T_return, T_arg1,T_arg2> +retype(const Slot2<T_ret, T_type1,T_type2>& _A_slot) +{ return Slot2<T_return, T_arg1,T_arg2> + (retype_slot_functor<Slot2<T_ret, T_type1, T_type2>, T_return, T_type1,T_type2> + (_A_slot)); } + +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_ret, class T_type1,class T_type2,class T_type3> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +retype(const Slot3<T_ret, T_type1,T_type2,T_type3>& _A_slot) +{ return Slot3<T_return, T_arg1,T_arg2,T_arg3> + (retype_slot_functor<Slot3<T_ret, T_type1, T_type2, T_type3>, T_return, T_type1,T_type2,T_type3> + (_A_slot)); } + +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_ret, class T_type1,class T_type2,class T_type3,class T_type4> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +retype(const Slot4<T_ret, T_type1,T_type2,T_type3,T_type4>& _A_slot) +{ return Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> + (retype_slot_functor<Slot4<T_ret, T_type1, T_type2, T_type3, T_type4>, T_return, T_type1,T_type2,T_type3,T_type4> + (_A_slot)); } + +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_ret, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +retype(const Slot5<T_ret, T_type1,T_type2,T_type3,T_type4,T_type5>& _A_slot) +{ return Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> + (retype_slot_functor<Slot5<T_ret, T_type1, T_type2, T_type3, T_type4, T_type5>, T_return, T_type1,T_type2,T_type3,T_type4,T_type5> + (_A_slot)); } + +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_ret, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +retype(const Slot6<T_ret, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6>& _A_slot) +{ return Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> + (retype_slot_functor<Slot6<T_ret, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6>, T_return, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6> + (_A_slot)); } + +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_ret, class T_type1,class T_type2,class T_type3,class T_type4,class T_type5,class T_type6,class T_type7> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +retype(const Slot7<T_ret, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7>& _A_slot) +{ return Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> + (retype_slot_functor<Slot7<T_ret, T_type1, T_type2, T_type3, T_type4, T_type5, T_type6, T_type7>, T_return, T_type1,T_type2,T_type3,T_type4,T_type5,T_type6,T_type7> + (_A_slot)); } + + +} /* namespace SigC */ + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ +#endif /* _SIGC_MACROS_RETYPEHM4_ */ diff --git a/libs/sigc++2/sigc++/retype_return.h b/libs/sigc++2/sigc++/retype_return.h new file mode 100644 index 0000000000..cc6c153394 --- /dev/null +++ b/libs/sigc++2/sigc++/retype_return.h @@ -0,0 +1,35 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_RETYPE_RETURN_HPP_ +#define _SIGC_RETYPE_RETURN_HPP_ + +#include <sigc++/adaptors/retype_return.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +using ::sigc::retype_return; +using ::sigc::hide_return; + +} + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ + +#endif /* _SIGC_RETYPE_RETURN_HPP_ */ diff --git a/libs/sigc++2/sigc++/sigc++.h b/libs/sigc++2/sigc++/sigc++.h new file mode 100644 index 0000000000..90a9e6dd17 --- /dev/null +++ b/libs/sigc++2/sigc++/sigc++.h @@ -0,0 +1,30 @@ +/* + * Copyright 2003, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef SIGCXX_SIGCXX_H +#define SIGCXX_SIGCXX_H + +#include <sigc++/signal.h> +#include <sigc++/connection.h> +#include <sigc++/trackable.h> +#include <sigc++/adaptors/adaptors.h> +#include <sigc++/functors/functors.h> + +#endif /* SIGCXX_SIGCXX_H */ + diff --git a/libs/sigc++2/sigc++/signal.cc b/libs/sigc++2/sigc++/signal.cc new file mode 100644 index 0000000000..993eee4aca --- /dev/null +++ b/libs/sigc++2/sigc++/signal.cc @@ -0,0 +1,25 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include <sigc++/signal.h> + +namespace sigc { + + +} /* sigc */ diff --git a/libs/sigc++2/sigc++/signal.h b/libs/sigc++2/sigc++/signal.h new file mode 100644 index 0000000000..a89112cf9e --- /dev/null +++ b/libs/sigc++2/sigc++/signal.h @@ -0,0 +1,3188 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + +#ifndef _SIGC_SIGNAL_H_ +#define _SIGC_SIGNAL_H_ + +#include <list> +#include <sigc++/signal_base.h> +#include <sigc++/type_traits.h> +#include <sigc++/trackable.h> +#include <sigc++/functors/slot.h> +#include <sigc++/functors/mem_fun.h> + +// TODO: This should have its own test. +// I have just used this because there is a correlation between these two problems. +#ifdef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + //Compilers, such as SUN Forte C++, that do not allow this also often + //do not allow a typedef to have the same name as a class in the typedef's definition. + #define SIGC_TYPEDEF_REDEFINE_ALLOWED 1 +#endif + +namespace sigc { + +/** STL-style iterator for slot_list. + * + * @ingroup signal + */ +template <typename T_slot> +struct slot_iterator +{ + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef std::bidirectional_iterator_tag iterator_category; + + typedef T_slot slot_type; + + typedef T_slot value_type; + typedef T_slot* pointer; + typedef T_slot& reference; + + typedef typename internal::signal_impl::iterator_type iterator_type; + + slot_iterator() + {} + + explicit slot_iterator(const iterator_type& i) + : i_(i) {} + + reference operator*() const + { return static_cast<reference>(*i_); } + + pointer operator->() const + { return &(operator*()); } + + slot_iterator& operator++() + { + ++i_; + return *this; + } + + slot_iterator operator++(int) + { + slot_iterator __tmp(*this); + ++i_; + return __tmp; + } + + slot_iterator& operator--() + { + --i_; + return *this; + } + + slot_iterator& operator--(int) + { + slot_iterator __tmp(*this); + --i_; + return __tmp; + } + + bool operator == (const slot_iterator& other) const + { return i_ == other.i_; } + + bool operator != (const slot_iterator& other) const + { return i_ != other.i_; } + + iterator_type i_; +}; + +/** STL-style const iterator for slot_list. + * + * @ingroup signal + */ +template <typename T_slot> +struct slot_const_iterator +{ + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef std::bidirectional_iterator_tag iterator_category; + + typedef T_slot slot_type; + + typedef T_slot value_type; + typedef const T_slot* pointer; + typedef const T_slot& reference; + + typedef typename internal::signal_impl::const_iterator_type iterator_type; + + slot_const_iterator() + {} + + explicit slot_const_iterator(const iterator_type& i) + : i_(i) {} + + reference operator*() const + { return static_cast<reference>(*i_); } + + pointer operator->() const + { return &(operator*()); } + + slot_const_iterator& operator++() + { + ++i_; + return *this; + } + + slot_const_iterator operator++(int) + { + slot_const_iterator __tmp(*this); + ++i_; + return __tmp; + } + + slot_const_iterator& operator--() + { + --i_; + return *this; + } + + slot_const_iterator& operator--(int) + { + slot_const_iterator __tmp(*this); + --i_; + return __tmp; + } + + bool operator == (const slot_const_iterator& other) const + { return i_ == other.i_; } + + bool operator != (const slot_const_iterator& other) const + { return i_ != other.i_; } + + iterator_type i_; +}; + +/** STL-style list interface for sigc::signal#. + * slot_list can be used to iterate over the list of slots that + * is managed by a signal. Slots can be added or removed from + * the list while existing iterators stay valid. A slot_list + * object can be retrieved from the signal's slots() function. + * + * @ingroup signal + */ +template <class T_slot> +struct slot_list +{ + typedef T_slot slot_type; + + typedef slot_type& reference; + typedef const slot_type& const_reference; + + typedef slot_iterator<slot_type> iterator; + typedef slot_const_iterator<slot_type> const_iterator; + typedef std::reverse_iterator<iterator> reverse_iterator; + typedef std::reverse_iterator<const_iterator> const_reverse_iterator; + + slot_list() + : list_(0) {} + + explicit slot_list(internal::signal_impl* __list) + : list_(__list) {} + + iterator begin() + { return iterator(list_->slots_.begin()); } + + const_iterator begin() const + { return const_iterator(list_->slots_.begin()); } + + iterator end() + { return iterator(list_->slots_.end()); } + + const_iterator end() const + { return const_iterator(list_->slots_.end()); } + + reverse_iterator rbegin() + { return reverse_iterator(end()); } + + const_reverse_iterator rbegin() const + { return const_reverse_iterator(end()); } + + reverse_iterator rend() + { return reverse_iterator(begin()); } + + const_reverse_iterator rend() const + { return const_reverse_iterator(begin()); } + + reference front() + { return *begin(); } + + const_reference front() const + { return *begin(); } + + reference back() + { return *(--end()); } + + const_reference back() const + { return *(--end()); } + + iterator insert(iterator i, const slot_type& slot_) + { return iterator(list_->insert(i.i_, static_cast<const slot_base&>(slot_))); } + + void push_front(const slot_type& c) + { insert(begin(), c); } + + void push_back(const slot_type& c) + { insert(end(), c); } + + iterator erase(iterator i) + { return iterator(list_->erase(i.i_)); } + + iterator erase(iterator first_, iterator last_) + { + while (first_ != last_) + first_ = erase(first_); + return last_; + } + + void pop_front() + { erase(begin()); } + + void pop_back() + { + iterator tmp_ = end(); + erase(--tmp_); + } + +protected: + internal::signal_impl* list_; +}; + + +namespace internal { + +/** Special iterator over sigc::internal::signal_impl's slot list that holds extra data. + * This iterators is for use in accumulators. operator*() executes + * the slot. The return value is buffered, so that in an expression + * like @code a = (*i) * (*i); @endcode the slot is executed only once. + */ +template <class T_emitter, class T_result = typename T_emitter::result_type> +struct slot_iterator_buf +{ + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef std::bidirectional_iterator_tag iterator_category; + + typedef T_emitter emitter_type; + typedef T_result result_type; + typedef typename T_emitter::slot_type slot_type; + + typedef signal_impl::const_iterator_type iterator_type; + + slot_iterator_buf() + : c_(0), invoked_(false) {} + + slot_iterator_buf(const iterator_type& i, const emitter_type* c) + : i_(i), c_(c), invoked_(false) {} + + result_type operator*() const + { + if (!i_->empty() && !i_->blocked() && !invoked_) + { + r_ = (*c_)(static_cast<const slot_type&>(*i_)); + invoked_ = true; + } + return r_; + } + + slot_iterator_buf& operator++() + { + ++i_; + invoked_ = false; + return *this; + } + + slot_iterator_buf operator++(int) + { + slot_iterator_buf __tmp(*this); + ++i_; + invoked_ = false; + return __tmp; + } + + slot_iterator_buf& operator--() + { + --i_; + invoked_ = false; + return *this; + } + + slot_iterator_buf& operator--(int) + { + slot_iterator_buf __tmp(*this); + --i_; + invoked_ = false; + return __tmp; + } + + bool operator == (const slot_iterator_buf& other) const + { return (!c_ || (i_ == other.i_)); } /* If '!c_' the iterators are empty. + * Unfortunately, empty stl iterators are not equal. + * We are forcing equality so that 'first==last' + * in the accumulator's emit function yields true. */ + + bool operator != (const slot_iterator_buf& other) const + { return (c_ && (i_ != other.i_)); } + +private: + iterator_type i_; + const emitter_type* c_; + mutable result_type r_; + mutable bool invoked_; +}; + +/** Template specialization of slot_iterator_buf for void return signals. + */ +template <class T_emitter> +struct slot_iterator_buf<T_emitter, void> +{ + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef std::bidirectional_iterator_tag iterator_category; + + typedef T_emitter emitter_type; + typedef void result_type; + typedef typename T_emitter::slot_type slot_type; + + typedef signal_impl::const_iterator_type iterator_type; + + slot_iterator_buf() + : c_(0), invoked_(false) {} + + slot_iterator_buf(const iterator_type& i, const emitter_type* c) + : i_(i), c_(c), invoked_(false) {} + + void operator*() const + { + if (!i_->empty() && !i_->blocked() && !invoked_) + { + (*c_)(static_cast<const slot_type&>(*i_)); + invoked_ = true; + } + } + + slot_iterator_buf& operator++() + { + ++i_; + invoked_ = false; + return *this; + } + + slot_iterator_buf operator++(int) + { + slot_iterator_buf __tmp(*this); + ++i_; + invoked_ = false; + return __tmp; + } + + slot_iterator_buf& operator--() + { + --i_; + invoked_ = false; + return *this; + } + + slot_iterator_buf& operator--(int) + { + slot_iterator_buf __tmp(*this); + --i_; + invoked_ = false; + return __tmp; + } + + bool operator == (const slot_iterator_buf& other) const + { return i_ == other.i_; } + + bool operator != (const slot_iterator_buf& other) const + { return i_ != other.i_; } + +private: + iterator_type i_; + const emitter_type* c_; + mutable bool invoked_; +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal0. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_accumulator> +struct signal_emit0 +{ + typedef signal_emit0<T_return, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + signal_emit0() {} + + /** Invokes a slot. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self ; + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return> +struct signal_emit0<T_return, nil> +{ + typedef signal_emit0<T_return, nil > self_type; + typedef T_return result_type; + typedef slot<T_return> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <> +struct signal_emit0<void, nil> +{ + typedef signal_emit0<void, nil> self_type; + typedef void result_type; + typedef slot<void> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef void (*call_type)(slot_rep*); + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + */ + static result_type emit(signal_impl* impl) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_); + } + } +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal1. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_arg1, class T_accumulator> +struct signal_emit1 +{ + typedef signal_emit1<T_return, T_arg1, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return, T_arg1> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + /** Instantiates the class. + * The parameters are stored in member variables. operator()() passes + * the values on to some slot. + */ + signal_emit1(typename type_trait<T_arg1>::take _A_a1) + : _A_a1_(_A_a1) {} + + + /** Invokes a slot using the buffered parameter values. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_, _A_a1_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are buffered in a temporary instance of signal_emit1. + + * @param _A_a1 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self (_A_a1); + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + + typename type_trait<T_arg1>::take _A_a1_; +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return, class T_arg1> +struct signal_emit1<T_return, T_arg1, nil> +{ + typedef signal_emit1<T_return, T_arg1, nil > self_type; + typedef T_return result_type; + typedef slot<T_return, T_arg1> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <class T_arg1> +struct signal_emit1<void, T_arg1, nil> +{ + typedef signal_emit1<void, T_arg1, nil> self_type; + typedef void result_type; + typedef slot<void, T_arg1> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1); + } + } +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal2. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_arg1,class T_arg2, class T_accumulator> +struct signal_emit2 +{ + typedef signal_emit2<T_return, T_arg1,T_arg2, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + /** Instantiates the class. + * The parameters are stored in member variables. operator()() passes + * the values on to some slot. + */ + signal_emit2(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) + : _A_a1_(_A_a1),_A_a2_(_A_a2) {} + + + /** Invokes a slot using the buffered parameter values. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_, _A_a1_,_A_a2_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are buffered in a temporary instance of signal_emit2. + + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self (_A_a1,_A_a2); + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + + typename type_trait<T_arg1>::take _A_a1_; + typename type_trait<T_arg2>::take _A_a2_; +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return, class T_arg1,class T_arg2> +struct signal_emit2<T_return, T_arg1,T_arg2, nil> +{ + typedef signal_emit2<T_return, T_arg1,T_arg2, nil > self_type; + typedef T_return result_type; + typedef slot<T_return, T_arg1,T_arg2> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <class T_arg1,class T_arg2> +struct signal_emit2<void, T_arg1,T_arg2, nil> +{ + typedef signal_emit2<void, T_arg1,T_arg2, nil> self_type; + typedef void result_type; + typedef slot<void, T_arg1,T_arg2> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2); + } + } +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal3. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_accumulator> +struct signal_emit3 +{ + typedef signal_emit3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + /** Instantiates the class. + * The parameters are stored in member variables. operator()() passes + * the values on to some slot. + */ + signal_emit3(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) + : _A_a1_(_A_a1),_A_a2_(_A_a2),_A_a3_(_A_a3) {} + + + /** Invokes a slot using the buffered parameter values. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_, _A_a1_,_A_a2_,_A_a3_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are buffered in a temporary instance of signal_emit3. + + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self (_A_a1,_A_a2,_A_a3); + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + + typename type_trait<T_arg1>::take _A_a1_; + typename type_trait<T_arg2>::take _A_a2_; + typename type_trait<T_arg3>::take _A_a3_; +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3> +struct signal_emit3<T_return, T_arg1,T_arg2,T_arg3, nil> +{ + typedef signal_emit3<T_return, T_arg1,T_arg2,T_arg3, nil > self_type; + typedef T_return result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <class T_arg1,class T_arg2,class T_arg3> +struct signal_emit3<void, T_arg1,T_arg2,T_arg3, nil> +{ + typedef signal_emit3<void, T_arg1,T_arg2,T_arg3, nil> self_type; + typedef void result_type; + typedef slot<void, T_arg1,T_arg2,T_arg3> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3); + } + } +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal4. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_accumulator> +struct signal_emit4 +{ + typedef signal_emit4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + /** Instantiates the class. + * The parameters are stored in member variables. operator()() passes + * the values on to some slot. + */ + signal_emit4(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) + : _A_a1_(_A_a1),_A_a2_(_A_a2),_A_a3_(_A_a3),_A_a4_(_A_a4) {} + + + /** Invokes a slot using the buffered parameter values. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_, _A_a1_,_A_a2_,_A_a3_,_A_a4_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are buffered in a temporary instance of signal_emit4. + + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self (_A_a1,_A_a2,_A_a3,_A_a4); + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + + typename type_trait<T_arg1>::take _A_a1_; + typename type_trait<T_arg2>::take _A_a2_; + typename type_trait<T_arg3>::take _A_a3_; + typename type_trait<T_arg4>::take _A_a4_; +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +struct signal_emit4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, nil> +{ + typedef signal_emit4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, nil > self_type; + typedef T_return result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4> +struct signal_emit4<void, T_arg1,T_arg2,T_arg3,T_arg4, nil> +{ + typedef signal_emit4<void, T_arg1,T_arg2,T_arg3,T_arg4, nil> self_type; + typedef void result_type; + typedef slot<void, T_arg1,T_arg2,T_arg3,T_arg4> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4); + } + } +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal5. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_accumulator> +struct signal_emit5 +{ + typedef signal_emit5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + /** Instantiates the class. + * The parameters are stored in member variables. operator()() passes + * the values on to some slot. + */ + signal_emit5(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) + : _A_a1_(_A_a1),_A_a2_(_A_a2),_A_a3_(_A_a3),_A_a4_(_A_a4),_A_a5_(_A_a5) {} + + + /** Invokes a slot using the buffered parameter values. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_, _A_a1_,_A_a2_,_A_a3_,_A_a4_,_A_a5_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are buffered in a temporary instance of signal_emit5. + + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + + typename type_trait<T_arg1>::take _A_a1_; + typename type_trait<T_arg2>::take _A_a2_; + typename type_trait<T_arg3>::take _A_a3_; + typename type_trait<T_arg4>::take _A_a4_; + typename type_trait<T_arg5>::take _A_a5_; +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +struct signal_emit5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, nil> +{ + typedef signal_emit5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, nil > self_type; + typedef T_return result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +struct signal_emit5<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, nil> +{ + typedef signal_emit5<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, nil> self_type; + typedef void result_type; + typedef slot<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5); + } + } +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal6. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_accumulator> +struct signal_emit6 +{ + typedef signal_emit6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + /** Instantiates the class. + * The parameters are stored in member variables. operator()() passes + * the values on to some slot. + */ + signal_emit6(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) + : _A_a1_(_A_a1),_A_a2_(_A_a2),_A_a3_(_A_a3),_A_a4_(_A_a4),_A_a5_(_A_a5),_A_a6_(_A_a6) {} + + + /** Invokes a slot using the buffered parameter values. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_, _A_a1_,_A_a2_,_A_a3_,_A_a4_,_A_a5_,_A_a6_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are buffered in a temporary instance of signal_emit6. + + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + + typename type_trait<T_arg1>::take _A_a1_; + typename type_trait<T_arg2>::take _A_a2_; + typename type_trait<T_arg3>::take _A_a3_; + typename type_trait<T_arg4>::take _A_a4_; + typename type_trait<T_arg5>::take _A_a5_; + typename type_trait<T_arg6>::take _A_a6_; +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +struct signal_emit6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, nil> +{ + typedef signal_emit6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, nil > self_type; + typedef T_return result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +struct signal_emit6<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, nil> +{ + typedef signal_emit6<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, nil> self_type; + typedef void result_type; + typedef slot<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); + } + } +}; + +/** Abstracts signal emission. + * This template implements the emit() function of signal7. + * Template specializations are available to optimize signal + * emission when no accumulator is used, i.e. the template + * argument @e T_accumulator is @p nil. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_accumulator> +struct signal_emit7 +{ + typedef signal_emit7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator> self_type; + typedef typename T_accumulator::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> slot_type; + typedef internal::slot_iterator_buf<self_type> slot_iterator_buf_type; + typedef signal_impl::const_iterator_type iterator_type; + + /** Instantiates the class. + * The parameters are stored in member variables. operator()() passes + * the values on to some slot. + */ + signal_emit7(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) + : _A_a1_(_A_a1),_A_a2_(_A_a2),_A_a3_(_A_a3),_A_a4_(_A_a4),_A_a5_(_A_a5),_A_a6_(_A_a6),_A_a7_(_A_a7) {} + + + /** Invokes a slot using the buffered parameter values. + * @param _A_slot Some slot to invoke. + * @return The slot's return value. + */ + T_return operator()(const slot_type& _A_slot) const + { return (reinterpret_cast<typename slot_type::call_type>(_A_slot.rep_->call_))(_A_slot.rep_, _A_a1_,_A_a2_,_A_a3_,_A_a4_,_A_a5_,_A_a6_,_A_a7_); } + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are buffered in a temporary instance of signal_emit7. + + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + * @param _A_a7 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations as processed by the accumulator. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) + { + T_accumulator accumulator; + + if (!impl) + return accumulator(slot_iterator_buf_type(), slot_iterator_buf_type()); + + signal_exec exec(impl); + + self_type self (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + return accumulator(slot_iterator_buf_type(impl->slots_.begin(), &self), + slot_iterator_buf_type(impl->slots_.end(), &self)); + } + + typename type_trait<T_arg1>::take _A_a1_; + typename type_trait<T_arg2>::take _A_a2_; + typename type_trait<T_arg3>::take _A_a3_; + typename type_trait<T_arg4>::take _A_a4_; + typename type_trait<T_arg5>::take _A_a5_; + typename type_trait<T_arg6>::take _A_a6_; + typename type_trait<T_arg7>::take _A_a7_; +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used. + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +struct signal_emit7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, nil> +{ + typedef signal_emit7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, nil > self_type; + typedef T_return result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * The return value of the last slot invoked is returned. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + * @param _A_a7 Argument to be passed on to the slots. + * @return The return value of the last slot invoked. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) + { + if (!impl || impl->slots_.empty()) return T_return(); + iterator_type it = impl->slots_.begin(); + for (; it != impl->slots_.end(); ++it) + if (!it->empty() && !it->blocked()) break; + if (it == impl->slots_.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: + + signal_exec exec(impl); + + T_return r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + for (++it; it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + } + return r_; + } +}; + +/** Abstracts signal emission. + * This template specialization implements an optimized emit() + * function for the case that no accumulator is used and the + * return type is @p void. + */ +template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +struct signal_emit7<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, nil> +{ + typedef signal_emit7<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, nil> self_type; + typedef void result_type; + typedef slot<void, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> slot_type; + typedef signal_impl::const_iterator_type iterator_type; + typedef typename slot_type::call_type call_type; + + /** Executes a list of slots using an accumulator of type @e T_accumulator. + * The arguments are passed directly on to the slots. + * @param first An iterator pointing to the first slot in the list. + * @param last An iterator pointing to the last slot in the list. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + * @param _A_a7 Argument to be passed on to the slots. + */ + static result_type emit(signal_impl* impl, typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) + { + if (!impl || impl->slots_.empty()) return; + signal_exec exec(impl); + + for (iterator_type it = impl->slots_.begin(); it != impl->slots_.end(); ++it) + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); + } + } +}; + + +} /* namespace internal */ + +/** Signal declaration. + * signal0 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_accumulator=nil> +class signal0 + : public signal_base +{ +public: + typedef internal::signal_emit0<T_return, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @return The accumulated return values of the slot invocations. + */ + result_type emit() const + { return emitter_type::emit(impl_); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()() const + { return emit(); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal0::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor0<result_type, signal0> make_slot() const + { return bound_const_mem_functor0<result_type, signal0>(this, &signal0::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal0*>(this)->impl()); } + + signal0() {} + + signal0(const signal0& src) + : signal_base(src) {} +}; + +/** Signal declaration. + * signal1 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_arg1, class T_accumulator=nil> +class signal1 + : public signal_base +{ +public: + typedef internal::signal_emit1<T_return, T_arg1, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return, T_arg1> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @param _A_a1 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations. + */ + result_type emit(typename type_trait<T_arg1>::take _A_a1) const + { return emitter_type::emit(impl_, _A_a1); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()(typename type_trait<T_arg1>::take _A_a1) const + { return emit(_A_a1); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal1::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor1<result_type, signal1, typename type_trait<T_arg1>::take> make_slot() const + { return bound_const_mem_functor1<result_type, signal1, typename type_trait<T_arg1>::take>(this, &signal1::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal1*>(this)->impl()); } + + signal1() {} + + signal1(const signal1& src) + : signal_base(src) {} +}; + +/** Signal declaration. + * signal2 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_arg1,class T_arg2, class T_accumulator=nil> +class signal2 + : public signal_base +{ +public: + typedef internal::signal_emit2<T_return, T_arg1,T_arg2, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations. + */ + result_type emit(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return emitter_type::emit(impl_, _A_a1,_A_a2); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2) const + { return emit(_A_a1,_A_a2); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal2::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor2<result_type, signal2, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take> make_slot() const + { return bound_const_mem_functor2<result_type, signal2, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take>(this, &signal2::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal2*>(this)->impl()); } + + signal2() {} + + signal2(const signal2& src) + : signal_base(src) {} +}; + +/** Signal declaration. + * signal3 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_accumulator=nil> +class signal3 + : public signal_base +{ +public: + typedef internal::signal_emit3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations. + */ + result_type emit(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return emitter_type::emit(impl_, _A_a1,_A_a2,_A_a3); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3) const + { return emit(_A_a1,_A_a2,_A_a3); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal3::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor3<result_type, signal3, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take> make_slot() const + { return bound_const_mem_functor3<result_type, signal3, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take>(this, &signal3::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal3*>(this)->impl()); } + + signal3() {} + + signal3(const signal3& src) + : signal_base(src) {} +}; + +/** Signal declaration. + * signal4 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_accumulator=nil> +class signal4 + : public signal_base +{ +public: + typedef internal::signal_emit4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations. + */ + result_type emit(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return emitter_type::emit(impl_, _A_a1,_A_a2,_A_a3,_A_a4); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4) const + { return emit(_A_a1,_A_a2,_A_a3,_A_a4); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal4::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor4<result_type, signal4, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take> make_slot() const + { return bound_const_mem_functor4<result_type, signal4, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take>(this, &signal4::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal4*>(this)->impl()); } + + signal4() {} + + signal4(const signal4& src) + : signal_base(src) {} +}; + +/** Signal declaration. + * signal5 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_arg5 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_accumulator=nil> +class signal5 + : public signal_base +{ +public: + typedef internal::signal_emit5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations. + */ + result_type emit(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return emitter_type::emit(impl_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5) const + { return emit(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal5::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor5<result_type, signal5, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take> make_slot() const + { return bound_const_mem_functor5<result_type, signal5, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take>(this, &signal5::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal5*>(this)->impl()); } + + signal5() {} + + signal5(const signal5& src) + : signal_base(src) {} +}; + +/** Signal declaration. + * signal6 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_arg5 Argument type used in the definition of emit(). + * - @e T_arg6 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_accumulator=nil> +class signal6 + : public signal_base +{ +public: + typedef internal::signal_emit6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations. + */ + result_type emit(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return emitter_type::emit(impl_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6) const + { return emit(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal6::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor6<result_type, signal6, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take,typename type_trait<T_arg6>::take> make_slot() const + { return bound_const_mem_functor6<result_type, signal6, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take,typename type_trait<T_arg6>::take>(this, &signal6::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal6*>(this)->impl()); } + + signal6() {} + + signal6(const signal6& src) + : signal_base(src) {} +}; + +/** Signal declaration. + * signal7 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_arg5 Argument type used in the definition of emit(). + * - @e T_arg6 Argument type used in the definition of emit(). + * - @e T_arg7 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used, i.e. signal emission returns the return value of the last slot invoked. + * + * You should use the more convenient unnumbered sigc::signal template. + * + * @ingroup signal + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_accumulator=nil> +class signal7 + : public signal_base +{ +public: + typedef internal::signal_emit7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator> emitter_type; + typedef typename emitter_type::result_type result_type; + typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> slot_type; + typedef slot_list<slot_type> slot_list_type; + typedef typename slot_list_type::iterator iterator; + typedef typename slot_list_type::const_iterator const_iterator; + typedef typename slot_list_type::reverse_iterator reverse_iterator; + typedef typename slot_list_type::const_reverse_iterator const_reverse_iterator; + +#ifdef SIGC_TYPEDEF_REDEFINE_ALLOWED + /** This typedef is only for backwards-compatibility. + * It is not available when using the SUN Forte compiler. + * @deprecated slot_list_type; + */ + typedef slot_list_type slot_list; +#endif + + /** Add a slot to the list of slots. + * Any functor or slot may be passed into connect(). + * It will be converted into a slot implicitely. + * The returned iterator may be stored for disconnection + * of the slot at some later point. It stays valid until + * the slot is removed from the list of slots. The iterator + * can also be implicitely converted into a sigc::connection object + * that may be used safely beyond the life time of the slot. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator connect(const slot_type& slot_) + { return iterator(signal_base::connect(static_cast<const slot_base&>(slot_))); } + + /** Triggers the emission of the signal. + * During signal emission all slots that have been connected + * to the signal are invoked unless they are manually set into + * a blocking state. The parameters are passed on to the slots. + * If @e T_accumulated is not @p nil, an accumulator of this type + * is used to process the return values of the slot invocations. + * Otherwise, the return value of the last slot invoked is returned. + * @param _A_a1 Argument to be passed on to the slots. + * @param _A_a2 Argument to be passed on to the slots. + * @param _A_a3 Argument to be passed on to the slots. + * @param _A_a4 Argument to be passed on to the slots. + * @param _A_a5 Argument to be passed on to the slots. + * @param _A_a6 Argument to be passed on to the slots. + * @param _A_a7 Argument to be passed on to the slots. + * @return The accumulated return values of the slot invocations. + */ + result_type emit(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return emitter_type::emit(impl_, _A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + + /** Triggers the emission of the signal (see emit()). */ + result_type operator()(typename type_trait<T_arg1>::take _A_a1,typename type_trait<T_arg2>::take _A_a2,typename type_trait<T_arg3>::take _A_a3,typename type_trait<T_arg4>::take _A_a4,typename type_trait<T_arg5>::take _A_a5,typename type_trait<T_arg6>::take _A_a6,typename type_trait<T_arg7>::take _A_a7) const + { return emit(_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7); } + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal7::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + bound_const_mem_functor7<result_type, signal7, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take,typename type_trait<T_arg6>::take,typename type_trait<T_arg7>::take> make_slot() const + { return bound_const_mem_functor7<result_type, signal7, typename type_trait<T_arg1>::take,typename type_trait<T_arg2>::take,typename type_trait<T_arg3>::take,typename type_trait<T_arg4>::take,typename type_trait<T_arg5>::take,typename type_trait<T_arg6>::take,typename type_trait<T_arg7>::take>(this, &signal7::emit); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + slot_list_type slots() + { return slot_list_type(impl()); } + + /** Creates an STL-style interface for the signal's list of slots. + * This interface supports iteration, insertion and removal of slots. + * @return An STL-style interface for the signal's list of slots. + */ + const slot_list_type slots() const + { return slot_list_type(const_cast<signal7*>(this)->impl()); } + + signal7() {} + + signal7(const signal7& src) + : signal_base(src) {} +}; + + + +/** Convenience wrapper for the numbered sigc::signal# templates. + * signal can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitly. + * + * If you want to connect one signal to another, use make_slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The template arguments determine the function signature of + * the emit() function: + * - @e T_return The desired return type of the emit() function. + * - @e T_arg1 Argument type used in the definition of emit(). The default @p nil means no argument. + * - @e T_arg2 Argument type used in the definition of emit(). The default @p nil means no argument. + * - @e T_arg3 Argument type used in the definition of emit(). The default @p nil means no argument. + * - @e T_arg4 Argument type used in the definition of emit(). The default @p nil means no argument. + * - @e T_arg5 Argument type used in the definition of emit(). The default @p nil means no argument. + * - @e T_arg6 Argument type used in the definition of emit(). The default @p nil means no argument. + * - @e T_arg7 Argument type used in the definition of emit(). The default @p nil means no argument. + * + * To specify an accumulator type the nested class signal::accumulated can be used. + * + * @par Example: + * @code + * void foo(int) {} + * sigc::signal<void, long> sig; + * sig.connect(sigc::ptr_fun(&foo)); + * sig.emit(19); + * @endcode + * + * @ingroup signal + */ +template <class T_return, class T_arg1 = nil,class T_arg2 = nil,class T_arg3 = nil,class T_arg4 = nil,class T_arg5 = nil,class T_arg6 = nil,class T_arg7 = nil> +class signal + : public signal7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, nil> +{ +public: + /** Convenience wrapper for the numbered sigc::signal# templates. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + * + * An accumulator is a functor that uses a pair of special iterators + * to step through a list of slots and calculate a return value + * from the results of the slot invokations. The iterators' operator*() + * executes the slot. The return value is buffered, so that in an expression + * like @code a = (*i) * (*i); @endcode the slot is executed only once. + * The accumulator must define its return value as @p result_type. + * + * @par Example 1: + * This accumulator calculates the arithmetic mean value: + * @code + * struct arithmetic_mean_accumulator + * { + * typedef double result_type; + * template<typename T_iterator> + * result_type operator()(T_iterator first, T_iterator last) const + * { + * result_type value_ = 0; + * int n_ = 0; + * for (; first != last; ++first, ++n_) + * value_ += *first; + * return value_ / n_; + * } + * }; + * @endcode + * + * @par Example 2: + * This accumulator stops signal emission when a slot returns zero: + * @code + * struct interruptable_accumulator + * { + * typedef bool result_type; + * template<typename T_iterator> + * result_type operator()(T_iterator first, T_iterator last) const + * { + * for (; first != last; ++first, ++n_) + * if (!*first) return false; + * return true; + * } + * }; + * @endcode + * + * @ingroup signal + */ + template <class T_accumulator> + class accumulated + : public signal7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, nil>(src) {} +}; + + +/** Convenience wrapper for the numbered sigc::signal0 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::signal + * template for 0 argument(s). + */ +template <class T_return> +class signal <T_return> + : public signal0<T_return, nil> +{ +public: + + /** Convenience wrapper for the numbered sigc::signal0 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + */ + template <class T_accumulator> + class accumulated + : public signal0<T_return, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal0<T_return, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal0<T_return, nil>(src) {} +}; + +/** Convenience wrapper for the numbered sigc::signal1 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::signal + * template for 1 argument(s). + */ +template <class T_return, class T_arg1> +class signal <T_return, T_arg1> + : public signal1<T_return, T_arg1, nil> +{ +public: + + /** Convenience wrapper for the numbered sigc::signal1 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + */ + template <class T_accumulator> + class accumulated + : public signal1<T_return, T_arg1, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal1<T_return, T_arg1, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal1<T_return, T_arg1, nil>(src) {} +}; + +/** Convenience wrapper for the numbered sigc::signal2 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::signal + * template for 2 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2> +class signal <T_return, T_arg1,T_arg2> + : public signal2<T_return, T_arg1,T_arg2, nil> +{ +public: + + /** Convenience wrapper for the numbered sigc::signal2 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + */ + template <class T_accumulator> + class accumulated + : public signal2<T_return, T_arg1,T_arg2, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal2<T_return, T_arg1,T_arg2, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal2<T_return, T_arg1,T_arg2, nil>(src) {} +}; + +/** Convenience wrapper for the numbered sigc::signal3 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::signal + * template for 3 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3> +class signal <T_return, T_arg1,T_arg2,T_arg3> + : public signal3<T_return, T_arg1,T_arg2,T_arg3, nil> +{ +public: + + /** Convenience wrapper for the numbered sigc::signal3 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + */ + template <class T_accumulator> + class accumulated + : public signal3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal3<T_return, T_arg1,T_arg2,T_arg3, nil>(src) {} +}; + +/** Convenience wrapper for the numbered sigc::signal4 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::signal + * template for 4 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class signal <T_return, T_arg1,T_arg2,T_arg3,T_arg4> + : public signal4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, nil> +{ +public: + + /** Convenience wrapper for the numbered sigc::signal4 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + */ + template <class T_accumulator> + class accumulated + : public signal4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, nil>(src) {} +}; + +/** Convenience wrapper for the numbered sigc::signal5 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::signal + * template for 5 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class signal <T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> + : public signal5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, nil> +{ +public: + + /** Convenience wrapper for the numbered sigc::signal5 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + */ + template <class T_accumulator> + class accumulated + : public signal5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, nil>(src) {} +}; + +/** Convenience wrapper for the numbered sigc::signal6 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::signal + * template for 6 argument(s). + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class signal <T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> + : public signal6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, nil> +{ +public: + + /** Convenience wrapper for the numbered sigc::signal6 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + */ + template <class T_accumulator> + class accumulated + : public signal6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator> + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator>(src) {} + }; + + signal() {} + signal(const signal& src) + : signal6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, nil>(src) {} +}; + + + +} /* namespace sigc */ + + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +// SignalN +/** Signal declaration. + * Signal0 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_accumulator=::sigc::nil> +class Signal0 + : public ::sigc::signal0<T_return, T_accumulator> +{ +public: + typedef ::sigc::signal0<T_return, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal0() {} + Signal0(const Signal0& src) + : ::sigc::signal0<T_return, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal0::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor0<result_type, parent_type>(this, &parent_type::emit); } +}; + +/** Signal declaration. + * Signal1 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_arg1, class T_accumulator=::sigc::nil> +class Signal1 + : public ::sigc::signal1<T_return, T_arg1, T_accumulator> +{ +public: + typedef ::sigc::signal1<T_return, T_arg1, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal1() {} + Signal1(const Signal1& src) + : ::sigc::signal1<T_return, T_arg1, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal1::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor1<result_type, parent_type, typename ::sigc::type_trait<T_arg1>::take>(this, &parent_type::emit); } +}; + +/** Signal declaration. + * Signal2 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2, class T_accumulator=::sigc::nil> +class Signal2 + : public ::sigc::signal2<T_return, T_arg1,T_arg2, T_accumulator> +{ +public: + typedef ::sigc::signal2<T_return, T_arg1,T_arg2, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal2() {} + Signal2(const Signal2& src) + : ::sigc::signal2<T_return, T_arg1,T_arg2, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal2::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor2<result_type, parent_type, typename ::sigc::type_trait<T_arg1>::take,typename ::sigc::type_trait<T_arg2>::take>(this, &parent_type::emit); } +}; + +/** Signal declaration. + * Signal3 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3, class T_accumulator=::sigc::nil> +class Signal3 + : public ::sigc::signal3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator> +{ +public: + typedef ::sigc::signal3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal3() {} + Signal3(const Signal3& src) + : ::sigc::signal3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal3::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor3<result_type, parent_type, typename ::sigc::type_trait<T_arg1>::take,typename ::sigc::type_trait<T_arg2>::take,typename ::sigc::type_trait<T_arg3>::take>(this, &parent_type::emit); } +}; + +/** Signal declaration. + * Signal4 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_accumulator=::sigc::nil> +class Signal4 + : public ::sigc::signal4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator> +{ +public: + typedef ::sigc::signal4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal4() {} + Signal4(const Signal4& src) + : ::sigc::signal4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal4::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor4<result_type, parent_type, typename ::sigc::type_trait<T_arg1>::take,typename ::sigc::type_trait<T_arg2>::take,typename ::sigc::type_trait<T_arg3>::take,typename ::sigc::type_trait<T_arg4>::take>(this, &parent_type::emit); } +}; + +/** Signal declaration. + * Signal5 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_arg5 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_accumulator=::sigc::nil> +class Signal5 + : public ::sigc::signal5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator> +{ +public: + typedef ::sigc::signal5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal5() {} + Signal5(const Signal5& src) + : ::sigc::signal5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal5::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor5<result_type, parent_type, typename ::sigc::type_trait<T_arg1>::take,typename ::sigc::type_trait<T_arg2>::take,typename ::sigc::type_trait<T_arg3>::take,typename ::sigc::type_trait<T_arg4>::take,typename ::sigc::type_trait<T_arg5>::take>(this, &parent_type::emit); } +}; + +/** Signal declaration. + * Signal6 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_arg5 Argument type used in the definition of emit(). + * - @e T_arg6 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_accumulator=::sigc::nil> +class Signal6 + : public ::sigc::signal6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator> +{ +public: + typedef ::sigc::signal6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal6() {} + Signal6(const Signal6& src) + : ::sigc::signal6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal6::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor6<result_type, parent_type, typename ::sigc::type_trait<T_arg1>::take,typename ::sigc::type_trait<T_arg2>::take,typename ::sigc::type_trait<T_arg3>::take,typename ::sigc::type_trait<T_arg4>::take,typename ::sigc::type_trait<T_arg5>::take,typename ::sigc::type_trait<T_arg6>::take>(this, &parent_type::emit); } +}; + +/** Signal declaration. + * Signal7 can be used to connect() slots that are invoked + * during subsequent calls to emit(). Any functor or slot + * can be passed into connect(). It is converted into a slot + * implicitely. + * + * If you want to connect one signal to another, use slot() + * to retrieve a functor that emits the signal when invoked. + * + * Be careful if you directly pass one signal into the connect() + * method of another: a shallow copy of the signal is made and + * the signal's slots are not disconnected until both the signal + * and its clone are destroyed which is probably not what you want! + * + * An STL-style list interface for the signal's list of slots + * can be retrieved with slots(). This interface supports + * iteration, insertion and removal of slots. + * + * The following template arguments are used: + * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator). + * - @e T_arg1 Argument type used in the definition of emit(). + * - @e T_arg2 Argument type used in the definition of emit(). + * - @e T_arg3 Argument type used in the definition of emit(). + * - @e T_arg4 Argument type used in the definition of emit(). + * - @e T_arg5 Argument type used in the definition of emit(). + * - @e T_arg6 Argument type used in the definition of emit(). + * - @e T_arg7 Argument type used in the definition of emit(). + * - @e T_accumulator The accumulator type used for emission. The default @p nil means that no accumulator should be used. Signal emission returns the return value of the last slot invoked. + * + * @deprecated Use the unnumbered template sigc::signal instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_accumulator=::sigc::nil> +class Signal7 + : public ::sigc::signal7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator> +{ +public: + typedef ::sigc::signal7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator> parent_type; + typedef typename parent_type::result_type result_type; + typedef typename parent_type::slot_type slot_type; + + Signal7() {} + Signal7(const Signal7& src) + : ::sigc::signal7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator>(src) {} + + /** Creates a functor that calls emit() on this signal. + * @code + * sigc::mem_fun(mysignal, &sigc::signal7::emit) + * @endcode + * yields the same result. + * @return A functor that calls emit() on this signal. + */ + slot_type slot() const + { return ::sigc::bound_const_mem_functor7<result_type, parent_type, typename ::sigc::type_trait<T_arg1>::take,typename ::sigc::type_trait<T_arg2>::take,typename ::sigc::type_trait<T_arg3>::take,typename ::sigc::type_trait<T_arg4>::take,typename ::sigc::type_trait<T_arg5>::take,typename ::sigc::type_trait<T_arg6>::take,typename ::sigc::type_trait<T_arg7>::take>(this, &parent_type::emit); } +}; + + +} + +#endif /* LIBSIGC_DISABLE_DEPRECATED */ + +#endif /* _SIGC_SIGNAL_H_ */ diff --git a/libs/sigc++2/sigc++/signal_base.cc b/libs/sigc++2/sigc++/signal_base.cc new file mode 100644 index 0000000000..568cf061c8 --- /dev/null +++ b/libs/sigc++2/sigc++/signal_base.cc @@ -0,0 +1,151 @@ +// -*- c++ -*- +/* + * Copyright 2003, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include <sigc++/signal_base.h> + +namespace sigc { +namespace internal { + +signal_impl::signal_impl() +: ref_count_(0), exec_count_(0), deferred_(0) +{} + +// only MSVC needs this to guarantee that all new/delete are executed from the DLL module +#ifdef SIGC_NEW_DELETE_IN_LIBRARY_ONLY +void* signal_impl::operator new(size_t size_) +{ + return malloc(size_); +} + +void signal_impl::operator delete(void* p) +{ + free(p); +} +#endif + +void signal_impl::clear() +{ + slots_.clear(); +} + +signal_impl::size_type signal_impl::size() const +{ + return slots_.size(); +} + +signal_impl::iterator_type signal_impl::connect(const slot_base& slot_) +{ + return insert(slots_.end(), slot_); +} + +signal_impl::iterator_type signal_impl::erase(iterator_type i) +{ + return slots_.erase(i); +} + +signal_impl::iterator_type signal_impl::insert(signal_impl::iterator_type i, const slot_base& slot_) +{ + iterator_type temp = slots_.insert(i, slot_); + temp->set_parent(this, ¬ify); + return temp; +} + +void signal_impl::sweep() +{ + iterator_type i = slots_.begin(); + while (i != slots_.end()) + if ((*i).empty()) + i = slots_.erase(i); + else + ++i; +} + +void* signal_impl::notify(void* d) +{ + signal_impl* self = (signal_impl*)d; + if (self->exec_count_ == 0) + self->sweep(); + else // This is occuring during signal emission. + self->deferred_ = true; // => sweep() will be called from ~signal_exec(). + return 0; // This is safer because we don't have to care about our iterators in emit(). +} + +} /* namespace internal */ + +signal_base::signal_base() +: impl_(0) +{} + +signal_base::signal_base(const signal_base& src) +: trackable(), + impl_(src.impl()) +{ + impl_->reference(); +} + +signal_base::~signal_base() +{ + if (impl_) + impl_->unreference(); +} + +void signal_base::clear() +{ + if (impl_) + impl_->clear(); +} + +signal_base::size_type signal_base::size() const +{ + return (impl_ ? impl_->size() : 0); +} + +signal_base::iterator_type signal_base::connect(const slot_base& slot_) +{ + return impl()->connect(slot_); +} + +signal_base::iterator_type signal_base::insert(iterator_type i, const slot_base& slot_) +{ + return impl()->insert(i, slot_); +} + +signal_base::iterator_type signal_base::erase(iterator_type i) +{ + return impl()->erase(i); +} + +signal_base& signal_base::operator = (const signal_base& src) +{ + if (impl_) impl_->unreference(); + impl_ = src.impl(); + impl_->reference(); + return *this; +} + +internal::signal_impl* signal_base::impl() const +{ + if (!impl_) { + impl_ = new internal::signal_impl; + impl_->reference(); // start with a reference count of 1 + } + return impl_; +} + +} /* sigc */ diff --git a/libs/sigc++2/sigc++/signal_base.h b/libs/sigc++2/sigc++/signal_base.h new file mode 100644 index 0000000000..3af33d3e99 --- /dev/null +++ b/libs/sigc++2/sigc++/signal_base.h @@ -0,0 +1,261 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef _SIGC_SIGNAL_BASE_H_ +#define _SIGC_SIGNAL_BASE_H_ + +#include <list> +#include <sigc++config.h> +#include <sigc++/type_traits.h> +#include <sigc++/trackable.h> +#include <sigc++/functors/slot.h> +#include <sigc++/functors/mem_fun.h> + +namespace sigc +{ + +namespace internal +{ + +/** Implementation of the signal interface. + * signal_impl manages a list of slots. When a slot becomes + * invalid (because some referred object dies), notify() is executed. + * notify() either calls sweep() directly or defers the execution of + * sweep() when the signal is being emitted. sweep() removes all + * invalid slot from the list. + */ +struct SIGC_API signal_impl +{ + typedef size_t size_type; + typedef std::list<slot_base>::iterator iterator_type; + typedef std::list<slot_base>::const_iterator const_iterator_type; + + signal_impl(); + + // only MSVC needs this to guarantee that all new/delete are executed from the DLL module +#ifdef SIGC_NEW_DELETE_IN_LIBRARY_ONLY + void* operator new(size_t size_); + void operator delete(void* p); +#endif + + /// Increments the reference counter. + inline void reference() + { ++ref_count_; } + + /// Increments the reference and execution counter. + inline void reference_exec() + { ++ref_count_; ++exec_count_; } + + /** Decrements the reference counter. + * The object is deleted when the reference counter reaches zero. + */ + inline void unreference() + { if (!(--ref_count_)) delete this; } + + /** Decrements the reference and execution counter. + * Invokes sweep() if the execution counter reaches zero and the + * removal of one or more slots has been deferred. + */ + inline void unreference_exec() + { + if (!(--ref_count_)) delete this; + else if (!(--exec_count_) && deferred_) sweep(); + } + + /** Returns whether the list of slots is empty. + * @return @p true if the list of slots is empty. + */ + inline bool empty() const + { return slots_.empty(); } + + /// Empties the list of slots. + void clear(); + + /** Returns the number of slots in the list. + * @return The number of slots in the list. + */ + size_type size() const; + + /** Adds a slot at the bottom of the list of slots. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator_type connect(const slot_base& slot_); + + /** Adds a slot at the given position into the list of slots. + * @param i An iterator indicating the position where @p slot_ should be inserted. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator_type insert(iterator_type i, const slot_base& slot_); + + /** Removes the slot at the given position from the list of slots. + * @param i An iterator pointing to the slot to be removed. + * @return An iterator pointing to the slot in the list after the one removed. + */ + iterator_type erase(iterator_type i); + + /// Removes invalid slots from the list of slots. + void sweep(); + + /** Callback that is executed when some slot becomes invalid. + * This callback is registered in every slot when inserted into + * the list of slots. It is executed when a slot becomes invalid + * because of some referred object being destroyed. + * It either calls sweep() directly or defers the execution of + * sweep() when the signal is being emitted. + * @param d The signal object (@p this). + */ + static void* notify(void* d); + + /** Reference counter. + * The object is destroyed when @em ref_count_ reaches zero. + */ + short ref_count_; + + /** Execution counter. + * Indicates whether the signal is being emitted. + */ + short exec_count_; + + /// Indicates whether the execution of sweep() is being deferred. + bool deferred_; + + /// The list of slots. + std::list<slot_base> slots_; +}; + +/// Exception safe sweeper for cleaning up invalid slots on the slot list. +struct SIGC_API signal_exec +{ + /// The parent sigc::signal_impl object. + signal_impl* sig_; + + /** Increments the reference and execution counter of the parent sigc::signal_impl object. + * @param sig The parent sigc::signal_impl object. + */ + inline signal_exec(const signal_impl* sig) + : sig_(const_cast<signal_impl*>(sig) ) + { sig_->reference_exec(); } + + /// Decrements the reference and execution counter of the parent sigc::signal_impl object. + inline ~signal_exec() + { sig_->unreference_exec(); } +}; + +} /* namespace internal */ + + +/** @defgroup signal Signals + * Use sigc::signal::connect() with sigc::mem_fun() and sigc::ptr_fun() to connect a method or function with a signal. + * + * @code + * signal_clicked.connect( sigc::mem_fun(*this, &MyWindow::on_clicked) ); + * @endcode + * + * When the signal is emitted your method will be called. + * + * signal::connect() returns a connection, which you can later use to disconnect your method. + * If the type of your object inherits from sigc::trackable the method is disconnected + * automatically when your object is destroyed. + * + * When signals are copied they share the underlying information, + * so you can have a protected/private sigc::signal member and a public accessor method. + * + * signal and slot objects provide the core functionality of this + * library. A slot is a container for an arbitrary functor. + * A signal is a list of slots that are executed on emission. + * For compile time type safety a list of template arguments + * must be provided for the signal template that determines the + * parameter list for emission. Functors and closures are converted + * into slots implicitely on connection, triggering compiler errors + * if the given functor or closure cannot be invoked with the + * parameter list of the signal to connect to. + */ + +/** Base class for the sigc::signal# templates. + * signal_base integrates most of the interface of the derived sigc::signal# + * templates. The implementation, however, resides in sigc::internal::signal_impl. + * A sigc::internal::signal_impl object is dynamically allocated from signal_base + * when first connecting a slot to the signal. This ensures that empty signals + * don't waste memory. + * + * @ingroup signal + */ +struct SIGC_API signal_base : public trackable +{ + typedef size_t size_type; + + signal_base(); + + signal_base(const signal_base& src); + + ~signal_base(); + + signal_base& operator = (const signal_base& src); + + /** Returns whether the list of slots is empty. + * @return @p true if the list of slots is empty. + */ + inline bool empty() const + { return (!impl_ || impl_->empty()); } + + /// Empties the list of slots. + void clear(); + + /** Returns the number of slots in the list. + * @return The number of slots in the list. + */ + size_type size() const; + +protected: + typedef internal::signal_impl::iterator_type iterator_type; + + /** Adds a slot at the bottom of the list of slots. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator_type connect(const slot_base& slot_); + + /** Adds a slot at the given position into the list of slots. + * @param i An iterator indicating the position where @e slot_ should be inserted. + * @param slot_ The slot to add to the list of slots. + * @return An iterator pointing to the new slot in the list. + */ + iterator_type insert(iterator_type i, const slot_base& slot_); + + /** Removes the slot at the given position from the list of slots. + * @param i An iterator pointing to the slot to be removed. + * @return An iterator pointing to the slot in the list after the one removed. + */ + iterator_type erase(iterator_type i); + + /** Returns the signal_impl object encapsulating the list of slots. + * @return The signal_impl object encapsulating the list of slots. + */ + internal::signal_impl* impl() const; + + /// The signal_impl object encapsulating the slot list. + mutable internal::signal_impl* impl_; +}; + +} //namespace sigc + +#endif /* _SIGC_SIGNAL_BASE_H_ */ diff --git a/libs/sigc++2/sigc++/slot.h b/libs/sigc++2/sigc++/slot.h new file mode 100644 index 0000000000..f7fbe3cd2e --- /dev/null +++ b/libs/sigc++2/sigc++/slot.h @@ -0,0 +1,614 @@ +// -*- c++ -*- +/* Do not edit! -- generated file */ + + +#ifndef _SIGC_MACROS_SLOTHM4_ +#define _SIGC_MACROS_SLOTHM4_ + +#include <sigc++/functors/slot.h> + +#ifndef LIBSIGC_DISABLE_DEPRECATED + +namespace SigC { + +// SlotN +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot0 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return> +class Slot0 + : public ::sigc::slot<T_return> +{ +public: + typedef ::sigc::slot<T_return> parent_type; + + /// Constructs an empty slot. + Slot0() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot0(const T_functor& _A_func) + : ::sigc::slot<T_return>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot0(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot0& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot1 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return, class T_arg1> +class Slot1 + : public ::sigc::slot<T_return, T_arg1> +{ +public: + typedef ::sigc::slot<T_return, T_arg1> parent_type; + + /// Constructs an empty slot. + Slot1() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot1(const T_functor& _A_func) + : ::sigc::slot<T_return, T_arg1>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot1(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot1& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot2 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2> +class Slot2 + : public ::sigc::slot<T_return, T_arg1,T_arg2> +{ +public: + typedef ::sigc::slot<T_return, T_arg1,T_arg2> parent_type; + + /// Constructs an empty slot. + Slot2() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot2(const T_functor& _A_func) + : ::sigc::slot<T_return, T_arg1,T_arg2>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot2(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot2& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot3 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3> +class Slot3 + : public ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3> +{ +public: + typedef ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3> parent_type; + + /// Constructs an empty slot. + Slot3() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot3(const T_functor& _A_func) + : ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot3(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot3& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot4 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +class Slot4 + : public ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +{ +public: + typedef ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4> parent_type; + + /// Constructs an empty slot. + Slot4() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot4(const T_functor& _A_func) + : ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot4(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot4& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot5 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +class Slot5 + : public ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +{ +public: + typedef ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> parent_type; + + /// Constructs an empty slot. + Slot5() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot5(const T_functor& _A_func) + : ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot5(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot5& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot6 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +class Slot6 + : public ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +{ +public: + typedef ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> parent_type; + + /// Constructs an empty slot. + Slot6() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot6(const T_functor& _A_func) + : ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot6(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot6& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + +/** Converts an arbitrary functor to a unified type which is opaque. + * Slot7 itself is a functor or to be more precise a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg1 Argument type used in the definition of operator()(). + * - @e T_arg2 Argument type used in the definition of operator()(). + * - @e T_arg3 Argument type used in the definition of operator()(). + * - @e T_arg4 Argument type used in the definition of operator()(). + * - @e T_arg5 Argument type used in the definition of operator()(). + * - @e T_arg6 Argument type used in the definition of operator()(). + * - @e T_arg7 Argument type used in the definition of operator()(). + * + * To use simply assign the slot to the desired functor. If the functor + * is not compatible with the parameter list defined with the template + * arguments compiler errors are triggered. When called the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @par Example: + * @code + * #include <sigc++/slot.h> + * void foo(int) {} + * SigC::Slot1<void, long> s = SigC::slot(&foo); + * s(19); + * @endcode + * + * @deprecated Use the unnumbered template sigc::slot instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +class Slot7 + : public ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +{ +public: + typedef ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> parent_type; + + /// Constructs an empty slot. + Slot7() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template <class T_functor> + Slot7(const T_functor& _A_func) + : ::sigc::slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func) {} + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + Slot7(const parent_type& src) + : parent_type(src) {} + + /** Overrides this slot making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + Slot7& operator=(const parent_type& src) + { parent_type::operator=(src); return *this; } +}; + + + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +/* gcc 3.2 reports a strange conflict between SigC::slot() and sigc::slot<> + * when "using namespace SigC" and later using a slot(obj,func) overload + * without the prefix "SigC::". Probably a compiler bug. I will investigate. + * + * This ugly hack avoids the error: + */ +// #define slot(...) make_slot(__VA_ARGS__) /* only works for gcc */ +#endif + + +// slot() +/** Creates a functor of type SigC::Slot0 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return> +inline Slot0<T_return> +slot(T_return (*_A_func)()) +{ return Slot0<T_return>(_A_func); } + +/** Creates a functor of type SigC::Slot1 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1> +inline Slot1<T_return, T_arg1> +slot(T_return (*_A_func)(T_arg1)) +{ return Slot1<T_return, T_arg1>(_A_func); } + +/** Creates a functor of type SigC::Slot2 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2> +inline Slot2<T_return, T_arg1,T_arg2> +slot(T_return (*_A_func)(T_arg1,T_arg2)) +{ return Slot2<T_return, T_arg1,T_arg2>(_A_func); } + +/** Creates a functor of type SigC::Slot3 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3> +inline Slot3<T_return, T_arg1,T_arg2,T_arg3> +slot(T_return (*_A_func)(T_arg1,T_arg2,T_arg3)) +{ return Slot3<T_return, T_arg1,T_arg2,T_arg3>(_A_func); } + +/** Creates a functor of type SigC::Slot4 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4> +inline Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4> +slot(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4)) +{ return Slot4<T_return, T_arg1,T_arg2,T_arg3,T_arg4>(_A_func); } + +/** Creates a functor of type SigC::Slot5 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5> +inline Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5> +slot(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5)) +{ return Slot5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>(_A_func); } + +/** Creates a functor of type SigC::Slot6 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6> +inline Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6> +slot(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6)) +{ return Slot6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>(_A_func); } + +/** Creates a functor of type SigC::Slot7 that wraps an existing non-member function. + * + * @param _A_func Pointer to function that should be wrapped. + * @return Functor that executes _A_func on invokation. + * + * @deprecated Use sigc::ptr_fun() instead. + * @ingroup compat + */ +template <class T_return, class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7> +inline Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> +slot(T_return (*_A_func)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7)) +{ return Slot7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>(_A_func); } + + + +} + +#endif +#endif /* _SIGC_MACROS_SLOTHM4_ */ diff --git a/libs/sigc++2/sigc++/trackable.cc b/libs/sigc++2/sigc++/trackable.cc new file mode 100644 index 0000000000..46e2592ffb --- /dev/null +++ b/libs/sigc++2/sigc++/trackable.cc @@ -0,0 +1,124 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <sigc++/trackable.h> +#include <iostream> +using namespace std; + +namespace sigc +{ + +trackable::trackable() +: callback_list_(0) +{} + +/* Don't copy the notification list. + The objects watching src don't need to be notified when the new object dies. */ +trackable::trackable(const trackable& /*src*/) +: callback_list_(0) +{} + +trackable& trackable::operator=(const trackable& src) +{ + if(this != &src) + notify_callbacks(); //Make sure that we have finished with existing stuff before replacing it. + + return *this; +} + +trackable::~trackable() +{ + notify_callbacks(); +} + +void trackable::add_destroy_notify_callback(void* data, func_destroy_notify func) const +{ + callback_list()->add_callback(data, func); +} + +void trackable::remove_destroy_notify_callback(void* data) const +{ + callback_list()->remove_callback(data); +} + +void trackable::notify_callbacks() +{ + if (callback_list_) + delete callback_list_; //This invokes all of the callbacks. + + callback_list_ = 0; +} + +internal::trackable_callback_list* trackable::callback_list() const +{ + if (!callback_list_) + callback_list_ = new internal::trackable_callback_list; + + return callback_list_; +} + + +namespace internal +{ + +trackable_callback_list::~trackable_callback_list() +{ + clearing_ = true; + + for (callback_list::iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) + (*i).func_((*i).data_); +} + +void trackable_callback_list::add_callback(void* data, func_destroy_notify func) +{ + if (!clearing_) // TODO: Is it okay to silently ignore attempts to add dependencies when the list is being cleared? + // I'd consider this a serious application bug, since the app is likely to segfault. + // But then, how should we handle it? Throw an exception? Martin. + callbacks_.push_back(trackable_callback(data, func)); +} + +void trackable_callback_list::clear() +{ + clearing_ = true; + + for (callback_list::iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) + (*i).func_((*i).data_); + + callbacks_.clear(); + + clearing_ = false; +} + +void trackable_callback_list::remove_callback(void* data) +{ + if (clearing_) return; // No circular notices + + for (callback_list::iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) + if ((*i).data_ == data) + { + callbacks_.erase(i); + return; + } +} + +} /* namespace internal */ + + +} /* namespace sigc */ diff --git a/libs/sigc++2/sigc++/trackable.h b/libs/sigc++2/sigc++/trackable.h new file mode 100644 index 0000000000..4563738dd6 --- /dev/null +++ b/libs/sigc++2/sigc++/trackable.h @@ -0,0 +1,148 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_TRACKABLE_HPP_ +#define _SIGC_TRACKABLE_HPP_ +#include <list> +#include <sigc++config.h> + +namespace sigc { + +namespace internal { + +typedef void* (*func_destroy_notify) (void* data); + +/** Destroy notification callback. + * A destroy notification callback consists of a data pointer and a + * function pointer. The function is executed from the owning callback + * list (of type sigc::internal::trackable_callback_list) when its parent + * object (of type sigc::trackable) is destroyed or overwritten. + */ +struct SIGC_API trackable_callback +{ + void* data_; + func_destroy_notify func_; + trackable_callback(void* data, func_destroy_notify func) + : data_(data), func_(func) {} +}; + +/** Callback list. + * A callback list holds an STL list of callbacks of type + * trackable_callback. Callbacks are added and removed with + * add_callback(), remove_callback() and clear(). The callbacks + * are invoked from clear() and from the destructor. + */ +struct SIGC_API trackable_callback_list +{ + /** Add a callback function. + * @param data Data that will be sent as a parameter to teh callback function. + * @param func The callback function. + * + */ + void add_callback(void* data, func_destroy_notify func); + + /** Remove the callback which has this data associated with it. + * @param data The data that was given as a parameter to add_callback(). + */ + void remove_callback(void* data); + + /** This invokes all of the callback functions. + */ + void clear(); + + trackable_callback_list() + : clearing_(false) {} + + /** This invokes all of the callback functions. + */ + ~trackable_callback_list(); + +private: + typedef std::list<trackable_callback> callback_list; + callback_list callbacks_; + bool clearing_; +}; + +} /* namespace internal */ + + +/** Base class for objects with auto-disconnection. + * trackable must be inherited when objects shall automatically + * invalidate slots referring to them on destruction. + * A slot built from a member function of a trackable derived + * type installs a callback that is invoked when the trackable object + * is destroyed or overwritten. + * + * add_destroy_notify_callback() and remove_destroy_notify_callback() + * can be used to manually install and remove callbacks when + * notification of the object dying is needed. + * + * notify_callbacks() invokes and removes all previously installed + * callbacks and can therefore be used to disconnect from all signals. + * + * Note that there is no virtual destructor. Don't use @p trackable* + * as pointer type for managing your data or the destructors of + * your derived types won't be called when deleting your objects. + * + * @ingroup signal + */ +struct SIGC_API trackable +{ + trackable(); + + trackable(const trackable& src); + + trackable& operator=(const trackable& src); + + ~trackable(); + + /*virtual ~trackable() {} */ /* we would need a virtual dtor for users + who insist on using "trackable*" as + pointer type for their own derived objects */ + + + typedef internal::func_destroy_notify func_destroy_notify; + + /** Add a callback that is executed (notified) when the trackable object is detroyed. + * @param data Passed into func upon notification. + * @param func Callback executed upon destruction of the object. + */ + void add_destroy_notify_callback(void* data, func_destroy_notify func) const; + + /** Remove a callback previously installed with add_destroy_notify_callback(). + * The callback is not executed. + * @param data Parameter passed into previous call to add_destroy_notify_callback(). + */ + void remove_destroy_notify_callback(void* data) const; + + /// Execute and remove all previously installed callbacks. + void notify_callbacks(); + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + /* The callbacks are held in a list of type trackable_callback_list. + * This list is allocated dynamically when the first callback is added. + */ + internal::trackable_callback_list* callback_list() const; + mutable internal::trackable_callback_list* callback_list_; +#endif +}; + +} /* namespace sigc */ + +#endif /* _SIGC_TRACKABLE_HPP_ */ diff --git a/libs/sigc++2/sigc++/type_traits.h b/libs/sigc++2/sigc++/type_traits.h new file mode 100644 index 0000000000..c6d6dbbc81 --- /dev/null +++ b/libs/sigc++2/sigc++/type_traits.h @@ -0,0 +1,121 @@ +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_TYPE_TRAIT_H_ +#define _SIGC_TYPE_TRAIT_H_ + +#include <sigc++/reference_wrapper.h> + +namespace sigc { + +template <class T_type> +struct type_trait +{ + typedef T_type type; + typedef T_type& pass; + typedef const T_type& take; + typedef T_type* pointer; +}; + +template <class T_type, int N> +struct type_trait<T_type[N]> +{ + typedef T_type* type; + typedef T_type*& pass; + typedef const T_type*& take; + typedef T_type** pointer; +}; + +template <class T_type> +struct type_trait<T_type&> +{ + typedef T_type type; + typedef T_type& pass; + typedef T_type& take; + typedef T_type* pointer; +}; + +template <class T_type> +struct type_trait<const T_type&> +{ + typedef const T_type type; + typedef const T_type& pass; + typedef const T_type& take; + typedef const T_type* pointer; +}; + +template <class T_type> +struct type_trait<reference_wrapper<T_type> > +{ + typedef T_type type; + typedef T_type& pass; + typedef T_type& take; + typedef T_type* pointer; +}; + +template <class T_type> +struct type_trait<const_reference_wrapper<T_type> > +{ + typedef T_type type; + typedef T_type& pass; + typedef const T_type& take; + typedef T_type* pointer; +}; + +template<> +struct type_trait<void> +{ + typedef void type; + typedef void pass; + typedef void take; + typedef void* pointer; +}; + + +/** From Esa Pulkkin: + * Compile-time determination of base-class relationship in C++ + * (adapted to match the syntax of boost's type_traits library). + */ +template <class T_base, class T_derived> +struct is_base_and_derived +{ +private: + struct big { + char memory[64]; + }; + + struct test { + static big is_base_class_(...); + static char is_base_class_(typename type_trait<T_base>::pointer); + }; + +public: + static const bool value = + sizeof(test::is_base_class_((typename type_trait<T_derived>::pointer)0)) == + sizeof(char); +}; + +template <class T_base> +struct is_base_and_derived<T_base, T_base> +{ + static const bool value = true; +}; + +} /* namespace sigc */ + +#endif /* _SIGC_TYPE_TRAIT_H_ */ diff --git a/libs/sigc++2/sigc++/visit_each.h b/libs/sigc++2/sigc++/visit_each.h new file mode 100644 index 0000000000..7b7978531f --- /dev/null +++ b/libs/sigc++2/sigc++/visit_each.h @@ -0,0 +1,128 @@ +// -*- c++ -*- +/* + * Copyright 2002, The libsigc++ Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef _SIGC_VISIT_EACH_HPP_ +#define _SIGC_VISIT_EACH_HPP_ + +#include <sigc++/type_traits.h> + +namespace sigc { + +namespace internal { + +/// Helper struct for visit_each_type(). +template <class T_target, class T_action> +struct limit_derived_target +{ + typedef limit_derived_target<T_target, T_action> T_self; + + template <bool I_derived, class T_type> struct with_type; + + template <class T_type> struct with_type<false,T_type> + { static void execute_(const T_type&, const T_self&) {} }; + + template <class T_type> struct with_type<true,T_type> + { static void execute_(const T_type& _A_type, const T_self& _A_action) + { _A_action.action_(_A_type); } + }; + + template <class T_type> + void operator()(const T_type& _A_type) const + { with_type<is_base_and_derived<T_target,T_type>::value,T_type>::execute_(_A_type,*this); } + + limit_derived_target(const T_action& _A_action): action_(_A_action) {} + + T_action action_; +}; + +/// Helper struct for visit_each_type(). +template <class T_target, class T_action> +struct limit_derived_target<T_target*, T_action> +{ + typedef limit_derived_target<T_target*, T_action> T_self; + + template <bool I_derived, class T_type> struct with_type; + + template <class T_type> struct with_type<false,T_type> + { static void execute_(const T_type&, const T_self&) {} }; + + template <class T_type> struct with_type<true,T_type> + { static void execute_(const T_type& _A_type, const T_self& _A_action) + { _A_action.action_(&_A_type); } + }; + + template <class T_type> + void operator()(const T_type& _A_type) const + { with_type<is_base_and_derived<T_target,T_type>::value,T_type>::execute_(_A_type,*this); } + + limit_derived_target(const T_action& _A_action): action_(_A_action) {} + + T_action action_; +}; + +} /* namespace internal */ + + +/** This function performs a functor on each of the targets of a functor. + * All unknown types just call @e _A_action on them. + * Add overloads that specialize the @e T_functor argument for your own + * functor types, so that subobjects get visited. This is needed to enable + * auto-disconnection support for your functor types. + * + * @par Example: + * @code + * struct some_functor + * { + * void operator()() {} + * some_possibly_sigc_trackable_derived_type some_data_member; + * some_other_functor_type some_other_functor; + * } + * + * namespace sigc + * { + * template <class T_action> + * void visit_each(const T_action& _A_action, + * const some_functor& _A_target) + * { + * visit_each(_A_action, _A_target.some_data_member); + * visit_each(_A_action, _A_target.some_other_functor); + * } + * } + * @endcode + * + * @ingroup functors + */ +template <class T_action, class T_functor> +void visit_each(const T_action& _A_action, const T_functor& _A_functor) +{ _A_action(_A_functor); } + +/** This function performs a functor on each of the targets + * of a functor limited to a restricted type. + * + * @ingroup functors + */ +template <class T_type, class T_action, class T_functor> +void visit_each_type(const T_action& _A_action, const T_functor& _A_functor) +{ + internal::limit_derived_target<T_type,T_action> limited_action(_A_action); + visit_each(limited_action,_A_functor); +} + +} /* namespace sigc */ +#endif diff --git a/libs/sigc++2/sigc++config.h.in b/libs/sigc++2/sigc++config.h.in new file mode 100644 index 0000000000..357873fae6 --- /dev/null +++ b/libs/sigc++2/sigc++config.h.in @@ -0,0 +1,10 @@ +/* sigc++config.h.in. (Generated manually.) */ + +/* configure checks */ +#undef SIGC_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD +#undef SIGC_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD + +/* platform specific macros */ +// #define LIBSIGC_DISABLE_DEPRECATED +// #define SIGC_NEW_DELETE_IN_LIBRARY_ONLY // only defined for MSVC to keep ABI compatibility +#define SIGC_API |