6 Usage: genclass [path/]stem
11 test -z "$1" && usage "Missing name!"
13 TOPSRCDIR=$( cd @abs_top_srcdir@ && pwd )
14 test -z "$TOPSRCDIR" && {
15 echo "Dir does not exist '@abs_top_srcdir@'" >&2
21 STEMDIR=$( cd $OUTDIR && pwd )
22 test -z "$STEMDIR" && {
23 echo "Dir does not exist '$(dirname $1)'" >&2
26 STEMDIR=${STEMDIR#$TOPSRCDIR/}
29 CLASS_H=$STEMDIR/$STEM.h
30 CLASS_CC=$STEMDIR/$STEM.cc
32 OUT_CLASS_H=$OUTDIR/$STEM.h
33 OUT_CLASS_CC=$OUTDIR/$STEM.cc
34 test -e $OUT_CLASS_H -o -e $OUT_CLASS_CC && {
35 test -e $OUT_CLASS_H && echo "File exists '$OUT_CLASS_H' using '$OUT_CLASS_H.new'" >&2
36 test -e $OUT_CLASS_CC && echo "File exists '$OUT_CLASS_CC' using '$OUT_CLASS_CC.new'" >&2
37 OUT_CLASS_H="$OUT_CLASS_H.new"
38 OUT_CLASS_CC="$OUT_CLASS_CC.new"
42 INCLUDE_DEF=$(echo $INCLUDE_H | sed 's/[./]/_/g' | awk '{print toupper($0)}')
43 NSLIST=$(echo $(dirname $INCLUDE_H) | awk '{l=tolower($0);gsub("/"," ",l);print l}')
51 ######################################################################
53 ######################################################################
56 /*---------------------------------------------------------------------\\
58 | |__ / \ / / . \ . \ |
61 | /_____||_| |_| |_| |
63 \---------------------------------------------------------------------*/
70 ######################################################################
72 ######################################################################
75 echo "${I}///////////////////////////////////////////////////////////////////"
76 echo "${I}namespace $N"
77 echo "${I}{ /////////////////////////////////////////////////////////////////"
82 ######################################################################
84 ######################################################################
87 echo "${I}/////////////////////////////////////////////////////////////////"
89 echo "${I}} // namespace $N"
90 echo "${I}///////////////////////////////////////////////////////////////////"
94 ######################################################################
96 ######################################################################
104 #include "zypp/base/PtrTypes.h"
108 ${INDENT}///////////////////////////////////////////////////////////////////
110 ${INDENT}// CLASS NAME : ${CLASS}
113 ${INDENT}class ${CLASS}
115 ${INDENT} friend std::ostream & operator<<( std::ostream & str, const ${CLASS} & obj );
117 ${INDENT} /** Implementation */
118 ${INDENT} class Impl;
121 ${INDENT} /** Default ctor */
122 ${INDENT} ${CLASS}();
123 ${INDENT} /** Dtor */
124 ${INDENT} ~${CLASS}();
129 ${INDENT} /** Pointer to implementation */
130 ${INDENT} RWCOW_pointer<Impl> _pimpl;
132 ${INDENT}///////////////////////////////////////////////////////////////////
134 ${INDENT}/** \relates ${CLASS} Stream output */
135 ${INDENT}std::ostream & operator<<( std::ostream & str, const ${CLASS} & obj );
138 #endif // $INCLUDE_DEF
142 ######################################################################
144 ######################################################################
148 //#include "zypp/base/Logger.h"
150 #include "${INCLUDE_H}"
156 ${INDENT}///////////////////////////////////////////////////////////////////
158 ${INDENT}// CLASS NAME : ${CLASS}::Impl
160 ${INDENT}/** ${CLASS} implementation. */
161 ${INDENT}struct ${CLASS}::Impl
165 ${INDENT} /** Offer default Impl. */
166 ${INDENT} static shared_ptr<Impl> nullimpl()
167 ${INDENT} { if ( ! _nullimpl ) _nullimpl.reset( new Impl ); return _nullimpl; }
170 ${INDENT} /** Default Impl. */
171 ${INDENT} static shared_ptr<Impl> _nullimpl;
174 ${INDENT} friend Impl * rwcowClone<Impl>( const Impl * rhs );
175 ${INDENT} /** clone for RWCOW_pointer */
176 ${INDENT} Impl * clone() const
177 ${INDENT} { return new Impl( *this ); }
179 ${INDENT}///////////////////////////////////////////////////////////////////
181 ${INDENT}shared_ptr<${CLASS}::Impl> ${CLASS}::Impl::_nullimpl;
183 ${INDENT}///////////////////////////////////////////////////////////////////
185 ${INDENT}/** \relates ${CLASS}::Impl Stream output */
186 ${INDENT}inline std::ostream & operator<<( std::ostream & str, const ${CLASS}::Impl & obj )
188 ${INDENT} return str << "${CLASS}::Impl";
191 ${INDENT}///////////////////////////////////////////////////////////////////
193 ${INDENT}// CLASS NAME : ${CLASS}
195 ${INDENT}///////////////////////////////////////////////////////////////////
197 ${INDENT}///////////////////////////////////////////////////////////////////
199 ${INDENT}// METHOD NAME : ${CLASS}::${CLASS}
200 ${INDENT}// METHOD TYPE : Ctor
202 ${INDENT}${CLASS}::${CLASS}()
203 ${INDENT}: _pimpl( Impl::nullimpl() )
206 ${INDENT}///////////////////////////////////////////////////////////////////
208 ${INDENT}// METHOD NAME : ${CLASS}::~${CLASS}
209 ${INDENT}// METHOD TYPE : Dtor
211 ${INDENT}${CLASS}::~${CLASS}()
214 ${INDENT}/******************************************************************
216 ${INDENT}** FUNCTION NAME : operator<<
217 ${INDENT}** FUNCTION TYPE : std::ostream &
219 ${INDENT}std::ostream & operator<<( std::ostream & str, const ${CLASS} & obj )
221 ${INDENT} return str << *obj._pimpl;
228 ######################################################################
229 ######################################################################
230 ######################################################################