00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _util_render_find_h
00029 #define _util_render_find_h
00030
00031 #include <util/render/stack.h>
00032 #include <util/render/parameter.h>
00033
00034 namespace sc {
00035
00036
00037 #if 0
00038 template <class T1, class T2>
00039 void
00040 find_parameter_in_stack(Stack<T1>& stack,
00041 Parameter<T2>& (T1::*access)(),
00042 T2& result
00043 )
00044 {
00045 int have_result = 0;
00046 for (int i=stack.n()-1; i>=0; i--) {
00047 if ((stack[i]->*access)().is_set()) {
00048 if (!have_result || (stack[i]->*access)().overrides()) {
00049 result = (stack[i]->*access)().value();
00050 have_result = 1;
00051 }
00052 }
00053 }
00054 }
00055 #endif
00056
00057 inline void
00058 find_int_parameter_in_appearance_stack(Stack<Ref<Appearance> >& stack,
00059 Parameter<int>& (Appearance::*access)(),
00060 int& result
00061 )
00062 {
00063 int have_result = 0;
00064 for (int i=stack.n()-1; i>=0; i--) {
00065 if ((stack[i].pointer()->*access)().is_set()) {
00066 if (!have_result || (stack[i].pointer()->*access)().overrides()) {
00067 result = (stack[i].pointer()->*access)().value();
00068 have_result = 1;
00069 }
00070 }
00071 }
00072 }
00073
00074 }
00075
00076 #endif
00077
00078
00079
00080
00081