diff options
author | 2006-08-11 16:35:12 +0000 | |
---|---|---|
committer | 2006-08-11 16:35:12 +0000 | |
commit | 7aa27f82fbef6c873b1a92012fd6f95610fc48bb (patch) | |
tree | 9775bc197a3f91f304208e7d26431fcd030c018a /misc | |
parent | 19c30061351a6e2fbc07197a23483a873fceac2b (diff) | |
download | paludis-7aa27f82fbef6c873b1a92012fd6f95610fc48bb.tar.gz paludis-7aa27f82fbef6c873b1a92012fd6f95610fc48bb.tar.xz |
Stop using smart_record, start using sr
Diffstat (limited to 'misc')
-rw-r--r-- | misc/Makefile.am | 2 | ||||
-rwxr-xr-x | misc/make_sr.bash | 500 |
2 files changed, 501 insertions, 1 deletions
diff --git a/misc/Makefile.am b/misc/Makefile.am index ef81f090c..27a0c7785 100644 --- a/misc/Makefile.am +++ b/misc/Makefile.am @@ -1,4 +1,4 @@ CLEANFILES = *~ MAINTAINERCLEANFILES = Makefile.in svn-version-filter-data.bash -EXTRA_DIST = generated-file.txt svn-version-filter-data.bash.in do_m4.bash +EXTRA_DIST = generated-file.txt svn-version-filter-data.bash.in do_m4.bash make_sr.bash diff --git a/misc/make_sr.bash b/misc/make_sr.bash new file mode 100755 index 000000000..be10a4f5c --- /dev/null +++ b/misc/make_sr.bash @@ -0,0 +1,500 @@ +#!/bin/bash +# vim: set sw=4 sts=4 et tw=0 : + +echo -n "/* vim" +echo ": set ro : */" +echo +echo "/* ******************************************************** */" +echo "/* THIS IS A GENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY */" +echo "/* ******************************************************** */" +echo + +what_to_make=${1} +shift + +for src in ${@} ; do + if ! source ${src} ; then + echo "source ${src} failed" 1>&2 + exit 7 + fi +done + +make_const_ref() +{ + local x=${@} + if [[ "${x%\*}" != "${x}" ]] ; then + echo "${@}" const + elif [[ "${1#const}" != "${1}" ]] ; then + echo "${@}" const "&" + else + echo const "${@}" "&" + fi +} + +set | grep '^make_class_.*() $' | sort -r | \ +while read a ; do + a=${a##make_class_} + a=${a%% *} + + want_named_args= + want_keys=( ) + want_key_types=( ) + want_comparison_operators= + want_comparison_fields=( ) + + extra_constructors() + { + : + } + + extra_methods() + { + : + } + + allow_named_args() + { + want_named_args=yes + } + + key() + { + want_keys=( "${want_keys[@]}" "$1" ) + want_key_types=( "${want_key_types[@]}" "$2" ) + } + + comparison_operators() + { + want_comparison_operators=$1 + shift + want_comparison_fields=( $@ ) + } + + make_class_${a} + + if [[ "${want_comparison_fields[0]}" == "all" ]] ; then + want_comparison_fields=( ${want_keys[@]} ) + fi + + extra_constructors() + { + echo + cat + } + + extra_methods() + { + echo + cat + } + + allow_named_args() + { + : + } + + key() + { + : + } + + comparison_operators() + { + : + } + + if [[ "${what_to_make}" == "--header" ]] ; then + echo "class ${a}" + echo "{" + echo " public:" + echo + echo " ///\\name Data members" + echo " ///\\{" + echo + + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo " ${want_key_types[${k}]} ${want_keys[${k}]};" + done + + echo + echo " ///\\}" + echo + + if [[ -n "${want_comparison_operators}" ]] ; then + + echo " ///\\name Comparison operators" + echo " ///\\{" + echo + + if [[ "${want_comparison_operators}" == "all" ]] ; then + want_comparison_operators=( "==" "!=" "<" ">" "<=" ">=" ) + echo " int compare (const ${a} & other) const;" + elif [[ "${want_comparison_operators}" == "equality" ]] ; then + want_comparison_operators=( "==" "!=" ) + else + echo "bad first parameter for comparison_operators" 1>&2 + exit 1 + fi + + for (( k = 0 ; k < ${#want_comparison_operators[@]} ; k++ )) ; do + echo " bool operator${want_comparison_operators[${k}]} (const ${a} & other) const;" + done + + echo + echo " ///\\}" + echo + fi + + echo " ///\\name Basic operations" + echo " ///\\{" + echo + + echo " ${a}(" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " $(make_const_ref "${want_key_types[${k}]}") value_for_${want_keys[${k}]}" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo + fi + done + echo " );" + echo + echo " ${a}(const ${a} & other);" + echo + echo " const ${a} & operator= (const ${a} & other);" + echo + echo " ~${a}();" + + make_class_${a} + + echo + echo " ///\\}" + echo + + if [[ -n "${want_named_args}" ]] ; then + + echo " ///\\name Named argument constructor" + echo " ///\\{" + echo + + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + n=${want_keys[${k}]} + t=${want_key_types[${k}]} + echo " class Param_${n}" + echo " {" + echo " private:" + echo " Param_${n}();" + echo + echo " public:" + echo " $(make_const_ref "${t}" ) ${n};" + echo + echo " Param_${n}(const Empty &, $(make_const_ref "${t}" ) value_for_${n}) :" + echo " ${n}(value_for_${n})" + echo " {" + echo " }" + echo + echo " Param_${n}(const Empty &, const Param_${n} & other) :" + echo " ${n}(other.${n})" + echo " {" + echo " }" + echo " };" + echo + echo " template <typename Before_, typename After_>" + echo " class ParamNeeded_${n}" + echo " {" + echo " private:" + echo " const Before_ & _before;" + echo + echo " public:" + echo " After_" + echo " ${n}($(make_const_ref "${t}" ) value_for_${n})" + echo " {" + echo " return After_(" + for (( j = 0 ; j < ${#want_keys[@]} ; j++ )) ; do + if [[ ${j} == ${k} ]] ; then + echo -n " Param_${n}(_before, value_for_${n})" + else + echo -n " _before" + fi + if [[ $(( ${j} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo + fi + done + echo " );" + echo " }" + echo + echo " ParamNeeded_${n}(const Before_ & before, const Empty &) :" + echo " _before(before)" + echo " {" + echo " }" + echo " };" + echo + done + + echo " template <" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " bool has_${want_keys[${k}]}_" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo + fi + done + echo " >" + echo " class Params :" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo " public Select<has_${want_keys[${k}]}_," + echo " Param_${want_keys[${k}]}," + echo " ParamNeeded_${want_keys[${k}]}<" + echo -n " Params<" + for (( j = 0 ; j < ${#want_keys[@]} ; j++ )) ; do + if [[ ${j} == ${k} ]] ; then + echo -n "false" + else + echo -n "has_${want_keys[${j}]}_" + fi + if [[ $(( ${j} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + else + echo ">," + fi + done + echo -n " Params<" + for (( j = 0 ; j < ${#want_keys[@]} ; j++ )) ; do + if [[ ${j} == ${k} ]] ; then + echo -n "true" + else + echo -n "has_${want_keys[${j}]}_" + fi + if [[ $(( ${j} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + else + echo "> >" + fi + done + echo " >::Type," + done + echo " public Empty" + echo " {" + echo " private:" + echo " Params();" + echo + echo " public:" + echo " Params(" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + n=${want_keys[${k}]} + echo -n " " + echo -n "const typename Select<has_${n}_, Param_${n}, Empty>::Type & value_for_${n}" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo + fi + done + echo " ) :" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo " Select<has_${want_keys[${k}]}_," + echo " Param_${want_keys[${k}]}," + echo " ParamNeeded_${want_keys[${k}]}<" + echo -n " Params<" + for (( j = 0 ; j < ${#want_keys[@]} ; j++ )) ; do + if [[ ${j} == ${k} ]] ; then + echo -n "false" + else + echo -n "has_${want_keys[${j}]}_" + fi + if [[ $(( ${j} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + else + echo ">," + fi + done + echo -n " Params<" + for (( j = 0 ; j < ${#want_keys[@]} ; j++ )) ; do + if [[ ${j} == ${k} ]] ; then + echo -n "true" + else + echo -n "has_${want_keys[${j}]}_" + fi + if [[ $(( ${j} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + else + echo "> >" + fi + done + echo " >::Type(*this, value_for_${want_keys[${k}]})," + done + + echo " Empty()" + echo " {" + echo " }" + echo + echo " operator ${a} () const" + echo " {" + echo " return ${a}(" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " this->${want_keys[${k}]}" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo ", " + else + echo + fi + done + + echo " );" + echo " }" + echo + echo " };" + echo + + echo -n " static Params<" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n "false" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + fi + done + echo "> create();" + + echo " ///\\}" + echo + fi + + echo "};" + + elif [[ "${what_to_make}" == "--source" ]] ; then + + echo "${a}::${a}(" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " $(make_const_ref "${want_key_types[${k}]}") value_for_${want_keys[${k}]}" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo ") :" + fi + done + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " ${want_keys[${k}]}(value_for_${want_keys[${k}]})" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo + fi + done + echo "{" + echo "}" + echo + + echo "${a}::${a}(const ${a} & other) :" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n " ${want_keys[${k}]}(other.${want_keys[${k}]})" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo "," + else + echo + fi + done + echo "{" + echo "}" + echo + + echo "const ${a} &" + echo "${a}::operator= (const ${a} & other)" + echo "{" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo " ${want_keys[${k}]} = other.${want_keys[${k}]};" + done + echo " return *this;" + echo "}" + + echo "${a}::~${a}()" + echo "{" + echo "}" + echo + + if [[ -n "${want_comparison_operators}" ]] ; then + + if [[ "${want_comparison_operators}" == "all" ]] ; then + want_comparison_operators=( "==" "!=" "<" ">" "<=" ">=" ) + echo "int" + echo "${a}::compare(const ${a} & other) const" + echo "{" + for (( k = 0 ; k < ${#want_comparison_fields[@]} ; k++ )) ; do + echo " if (${want_comparison_fields[${k}]} < other.${want_comparison_fields[${k}]})" + echo " return -1;" + echo " if (${want_comparison_fields[${k}]} > other.${want_comparison_fields[${k}]})" + echo " return 1;" + done + echo " return 0;" + echo "}" + echo + for (( k = 0 ; k < ${#want_comparison_operators[@]} ; k++ )) ; do + echo "bool" + echo "${a}::operator${want_comparison_operators[${k}]} (const ${a} & other) const" + echo "{" + echo " return compare(other) ${want_comparison_operators[${k}]} 0;" + echo "}" + echo + done + elif [[ "${want_comparison_operators}" == "equality" ]] ; then + echo "bool" + echo "${a}::operator== (const ${a} & other) const" + echo "{" + for (( k = 0 ; k < ${#want_comparison_fields[@]} ; k++ )) ; do + echo " if (${want_comparison_fields[${k}]} != other.${want_comparison_fields[${k}]})" + echo " return false;" + done + echo " return true;" + echo "}" + echo + echo "bool" + echo "${a}::operator!= (const ${a} & other) const" + echo "{" + echo " return ! operator== (other);" + echo "}" + echo + else + echo "bad first parameter for comparison_operators" 1>&2 + exit 1 + fi + fi + + if [[ -n "${want_named_args}" ]] ; then + + echo -n "${a}::Params<" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n "false" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + fi + done + echo ">" + echo "${a}::create()" + echo "{" + echo " return Params<" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n "false" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + fi + done + echo -n ">(" + for (( k = 0 ; k < ${#want_keys[@]} ; k++ )) ; do + echo -n "Empty()" + if [[ $(( ${k} + 1 )) -lt ${#want_keys[@]} ]] ; then + echo -n ", " + fi + done + echo ");" + echo "}" + fi + + else + echo "bad argument (expected --header or --source)" 1>&2 + exit 1 + fi +done + |