1 
2 class Cache{
3 public:
4     typedef double& proxy ;
5     typedef double* iterator ;
6 
Cache(iterator data_)7     Cache( iterator data_) : data(data_){}
8 
ref(int i)9     inline proxy ref(int i){ return data[i] ; }
ref(int i)10     inline proxy ref(int i) const { return data[i] ; }
11 
12 private:
13     iterator data ;
14 } ;
15 
16 class Vec {
17 public:
18     typedef double& proxy ;
19 
Vec(double * data_)20     Vec( double* data_ ) : cache(data_){}
21     inline proxy operator[]( int i){ return cache.ref(i) ; }
22     inline proxy operator[]( int i) const { return cache.ref(i) ; }
23 
24 private:
25     Cache cache ;
26 } ;
27 
28