comparison src/ov-base.h @ 8345:c777f3ce02d8

smarter conversion lookup
author Jaroslav Hajek <highegg@gmail.com>
date Tue, 25 Nov 2008 14:04:55 +0100
parents 283989f2da9b
children 8b1a2555c4e2
comparison
equal deleted inserted replaced
8344:b5f10b123440 8345:c777f3ce02d8
104 { 104 {
105 public: 105 public:
106 106
107 typedef octave_base_value * (*type_conv_fcn) (const octave_base_value&); 107 typedef octave_base_value * (*type_conv_fcn) (const octave_base_value&);
108 108
109 // type conversion, including result type information
110 class type_conv_info
111 {
112 public:
113 type_conv_info (type_conv_fcn f = 0, int t = -1) : _fcn (f), _type_id (t) { }
114
115 operator type_conv_fcn (void) const { return _fcn; }
116
117 octave_base_value * operator () (const octave_base_value &v) const
118 { return (*_fcn) (v); }
119
120 int type_id (void) const { return _type_id; }
121
122 private:
123 type_conv_fcn _fcn;
124 int _type_id;
125 };
126
109 friend class octave_value; 127 friend class octave_value;
110 128
111 octave_base_value (void) : count (1) { } 129 octave_base_value (void) : count (1) { }
112 130
113 octave_base_value (const octave_base_value&) { } 131 octave_base_value (const octave_base_value&) { }
118 clone (void) const { return new octave_base_value (*this); } 136 clone (void) const { return new octave_base_value (*this); }
119 137
120 virtual octave_base_value * 138 virtual octave_base_value *
121 empty_clone (void) const { return new octave_base_value (); } 139 empty_clone (void) const { return new octave_base_value (); }
122 140
123 virtual type_conv_fcn 141 virtual type_conv_info
124 numeric_conversion_function (void) const 142 numeric_conversion_function (void) const
125 { return static_cast<type_conv_fcn> (0); } 143 { return type_conv_info (); }
126 144
127 virtual type_conv_fcn 145 virtual type_conv_info
128 numeric_demotion_function (void) const 146 numeric_demotion_function (void) const
129 { return static_cast<type_conv_fcn> (0); } 147 { return type_conv_info (); }
130 148
131 virtual octave_value squeeze (void) const; 149 virtual octave_value squeeze (void) const;
132 150
133 virtual octave_base_value *try_narrowing_conversion (void) { return 0; } 151 virtual octave_base_value *try_narrowing_conversion (void) { return 0; }
134 152