reporting_operators.hh

Go to the documentation of this file.
00001 /*
00002    The lestes compiler suite
00003    Copyright (C) 2002, 2003, 2004, 2005 Miroslav Tichy
00004    Copyright (C) 2002, 2003, 2004, 2005 Petr Zika
00005    Copyright (C) 2002, 2003, 2004, 2005 Vojtech Hala
00006    Copyright (C) 2002, 2003, 2004, 2005 Jiri Kosina
00007    Copyright (C) 2002, 2003, 2004, 2005 Pavel Sanda
00008    Copyright (C) 2002, 2003, 2004, 2005 Jan Zouhar
00009    Copyright (C) 2002, 2003, 2004, 2005 Rudolf Thomas
00010 
00011    This program is free software; you can redistribute it and/or modify
00012    it under the terms of the GNU General Public License as published by
00013    the Free Software Foundation; version 2 of the License.
00014 
00015    This program is distributed in the hope that it will be useful,
00016    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018    GNU General Public License for more details.
00019 
00020    See the full text of the GNU General Public License version 2, and
00021    the limitations in the file doc/LICENSE.
00022 
00023    By accepting the license the licensee waives any and all claims
00024    against the copyright holder(s) related in whole or in part to the
00025    work, its use, and/or the inability to use it.
00026  
00027  */
00028 #ifndef lestes__msg___reporting_operators_hh___included
00029 #define lestes__msg___reporting_operators_hh___included
00030 
00031 /*! \file
00032   \brief Helper operators for reporting.
00033 
00034   Definition of operators enabling easy reporting of messages.
00035   \author pt
00036 */
00037 #include <lestes/common.hh>
00038 #include <lestes/std/source_location.hh>
00039 #include <lestes/msg/message_stencil.hh>
00040 #include <lestes/msg/message.hh>
00041 #include <lestes/msg/argument_holder.hh>
00042 #include <lestes/msg/reporter.hh>
00043 
00044 package(lestes);
00045 package(std);
00046 
00047 /*!
00048   Returns holder for zero arguments, initializes with stencil.
00049   \param ms0  The stencil to hold.
00050   \return  The argument holder.
00051 */
00052 template <typename T>
00053 ptr< ::lestes::msg::argument_holder00<T> > operator<<(const ptr< ::lestes::msg::reporter > &,
00054                 const ptr< ::lestes::msg::message_stencil0<T> > &ms0)
00055 {
00056         return ::lestes::msg::argument_holder00<T>::create(ms0);
00057 }
00058 
00059 /*!
00060   Reports the message formed from the holder for zero arguments.
00061   \param holder  The argument holder containing stencil for the message to report.
00062   \param loc  The location for the report.
00063 */
00064 template <typename T>
00065 void operator<<(const ptr< ::lestes::msg::argument_holder00<T> > &holder, const ptr<source_location> &loc)
00066 {
00067         ptr< ::lestes::msg::reporter > r = ::lestes::msg::reporter::instance();
00068         ptr< ::lestes::msg::message_stencil0<T> > ms0 = holder->stencil_get();
00069         ptr< ::lestes::msg::message > m = ms0->format();
00070         r->report(m,loc);
00071 }
00072 
00073 /*!
00074   Returns holder for one argument, initializes with stencil.
00075   \param ms1  The stencil to hold.
00076   \return  The argument holder.
00077 */
00078 template <typename P0>
00079 ptr< ::lestes::msg::argument_holder10<P0> > operator<<(const ptr< ::lestes::msg::reporter > &,
00080                 const ptr< ::lestes::msg::message_stencil1<P0> > &ms1)
00081 {
00082         return ::lestes::msg::argument_holder10<P0>::create(ms1);
00083 }
00084 
00085 /*!
00086   Extends holder with zeroth argument.
00087   \param holder  The inferior argument holder to extend.
00088   \param p0  The zeroth argument to hold.
00089   \return  The extended argument holder.
00090 */
00091 template <typename P0>
00092 ptr< ::lestes::msg::argument_holder11<P0> > operator<<(const ptr< ::lestes::msg::argument_holder10<P0> > &holder,
00093                 const P0 &p0)
00094 {
00095         return ::lestes::msg::argument_holder11<P0>::create(holder,p0);
00096 }
00097 
00098 /*!
00099   Reports the message formed from the holder for one argument.
00100   \param holder  The argument holder containing stencil and argument for the message to report.
00101   \param loc  The location for the report.
00102 */
00103 template <typename P0>
00104 void operator<<(const ptr< ::lestes::msg::argument_holder11<P0> > &holder, const ptr<source_location> &loc)
00105 {
00106         ptr< ::lestes::msg::reporter > r = ::lestes::msg::reporter::instance();
00107         ptr< ::lestes::msg::message_stencil1<P0> > ms1 = holder->stencil_get();
00108         P0 p0 = holder->p0_get();
00109         ptr< ::lestes::msg::message > m = ms1->format(p0);
00110         r->report(m,loc);
00111 }
00112 
00113 /*!
00114   Returns holder for two arguments, initializes with stencil.
00115   \param ms2  The stencil to hold.
00116   \return  The argument holder.
00117 */
00118 template <typename P0, typename P1>
00119 ptr< ::lestes::msg::argument_holder20<P0,P1> > operator<<(const ptr< ::lestes::msg::reporter > &,
00120                 const ptr< ::lestes::msg::message_stencil2<P0,P1> > &ms2)
00121 {
00122         return ::lestes::msg::argument_holder20<P0,P1>::create(ms2);
00123 }
00124 
00125 /*!
00126   Extends holder with zeroth argument.
00127   \param holder  The inferior argument holder to extend.
00128   \param p0  The zeroth argument to hold.
00129   \return  The extended argument holder.
00130 */
00131 template <typename P0, typename P1>
00132 ptr< ::lestes::msg::argument_holder21<P0,P1> > operator<<(const ptr< ::lestes::msg::argument_holder20<P0,P1> > &holder,
00133                 const P0 &p0)
00134 {
00135         return ::lestes::msg::argument_holder21<P0,P1>::create(holder,p0);
00136 }
00137 
00138 /*!
00139   Extends holder with first argument.
00140   \param holder  The inferior argument holder to extend.
00141   \param p1  The first argument to hold.
00142   \return  The extended argument holder.
00143 */
00144 template <typename P0, typename P1>
00145 ptr< ::lestes::msg::argument_holder22<P0,P1> > operator<<(const ptr< ::lestes::msg::argument_holder21<P0,P1> > &holder,
00146                 const P1 &p1)
00147 {
00148         return ::lestes::msg::argument_holder22<P0,P1>::create(holder,p1);
00149 }
00150 
00151 /*!
00152   Reports the message formed from the holder for two arguments.
00153   \param holder  The argument holder containing stencil and arguments for the message to report.
00154   \param loc  The location for the report.
00155 */
00156 template <typename P0, typename P1>
00157 void operator<<(const ptr< ::lestes::msg::argument_holder22<P0,P1> > &holder, const ptr<source_location> &loc)
00158 {
00159         ptr< ::lestes::msg::reporter > r = ::lestes::msg::reporter::instance();
00160         ptr< ::lestes::msg::message_stencil2<P0,P1> > ms2 = holder->stencil_get();
00161         P0 p0 = holder->p0_get();
00162         P1 p1 = holder->p1_get();
00163         ptr< ::lestes::msg::message > m = ms2->format(p0,p1);
00164         r->report(m,loc);
00165 }
00166 
00167 /*!
00168   Returns holder for three arguments, initializes with stencil.
00169   \param ms3  The stencil to hold.
00170   \return  The argument holder.
00171 */
00172 template <typename P0, typename P1, typename P2>
00173 ptr< ::lestes::msg::argument_holder30<P0,P1,P2> > operator<<(const ptr< ::lestes::msg::reporter > &,
00174                 const ptr< ::lestes::msg::message_stencil3<P0,P1,P2> > &ms3)
00175 {
00176         return ::lestes::msg::argument_holder30<P0,P1,P2>::create(ms3);
00177 }
00178 
00179 /*!
00180   Extends holder with zeroth argument.
00181   \param holder  The inferior argument holder to extend.
00182   \param p0  The zeroth argument to hold.
00183   \return  The extended argument holder.
00184 */
00185 template <typename P0, typename P1, typename P2>
00186 ptr< ::lestes::msg::argument_holder31<P0,P1,P2> > operator<<(
00187                 const ptr< ::lestes::msg::argument_holder30<P0,P1,P2> > &holder,
00188                 const P0 &p0)
00189 {
00190         return ::lestes::msg::argument_holder31<P0,P1,P2>::create(holder,p0);
00191 }
00192 
00193 /*!
00194   Extends holder with first argument.
00195   \param holder  The inferior argument holder to extend.
00196   \param p1  The first argument to hold.
00197   \return  The extended argument holder.
00198 */
00199 template <typename P0, typename P1, typename P2>
00200 ptr< ::lestes::msg::argument_holder32<P0,P1,P2> > operator<<(
00201                 const ptr< ::lestes::msg::argument_holder31<P0,P1,P2> > &holder, 
00202                 const P1 &p1)
00203 {
00204         return ::lestes::msg::argument_holder32<P0,P1,P2>::create(holder,p1);
00205 }
00206 
00207 /*!
00208   Extends holder with second argument.
00209   \param holder  The inferior argument holder to extend.
00210   \param p2  The second argument to hold.
00211   \return  The extended argument holder.
00212 */
00213 template <typename P0, typename P1, typename P2>
00214 ptr< ::lestes::msg::argument_holder33<P0,P1,P2> > operator<<(
00215                 const ptr< ::lestes::msg::argument_holder32<P0,P1,P2> > &holder,
00216                 const P2 &p2)
00217 {
00218         return ::lestes::msg::argument_holder33<P0,P1,P2>::create(holder,p2);
00219 }
00220 
00221 /*!
00222   Reports the message formed from the holder for three arguments.
00223   \param holder  The argument holder containing stencil and arguments for the message to report.
00224   \param loc  The location for the report.
00225 */
00226 template <typename P0, typename P1, typename P2>
00227 void operator<<(const ptr< ::lestes::msg::argument_holder33<P0,P1,P2> > &holder, const ptr<source_location> &loc)
00228 {
00229         ptr< ::lestes::msg::reporter > r = ::lestes::msg::reporter::instance();
00230         ptr< ::lestes::msg::message_stencil3<P0,P1,P2> > ms3 = holder->stencil_get();
00231         P0 p0 = holder->p0_get();
00232         P1 p1 = holder->p1_get();
00233         P2 p2 = holder->p2_get();
00234         ptr< ::lestes::msg::message> m = ms3->format(p0,p1,p2);
00235         r->report(m,loc);
00236 }
00237 
00238 end_package(std);
00239 end_package(lestes);
00240 #endif
00241 /* vim: set ft=lestes : */

Generated on Mon Feb 12 18:23:11 2007 for lestes by doxygen 1.5.1-20070107