diff --git a/point.cpp b/point.cpp index 368816ef..36c2c1c2 100644 --- a/point.cpp +++ b/point.cpp @@ -158,6 +158,7 @@ util::point::sanity (void) const { template const util::point util::point::ORIGIN (T {0}); + //----------------------------------------------------------------------------- template util::point @@ -170,28 +171,13 @@ util::operator* (const vector &v, const point &p) { } -template util::point<1,float> util::operator* (const vector<1,float>&, const point<1,float>&); -template util::point<2,float> util::operator* (const vector<2,float>&, const point<2,float>&); -template util::point<3,float> util::operator* (const vector<3,float>&, const point<3,float>&); - -template util::point<1,double> util::operator* (const vector<1,double>&, const point<1,double>&); -template util::point<2,double> util::operator* (const vector<2,double>&, const point<2,double>&); -template util::point<3,double> util::operator* (const vector<3,double>&, const point<3,double>&); - - +//----------------------------------------------------------------------------- template util::point util::operator* (const point &p, const vector &v) { return v * p; } -template util::point<1,float> util::operator* (const point<1,float>&, const vector<1,float>&); -template util::point<2,float> util::operator* (const point<2,float>&, const vector<2,float>&); -template util::point<3,float> util::operator* (const point<3,float>&, const vector<3,float>&); - -template util::point<1,double> util::operator* (const point<1,double>&, const vector<1,double>&); -template util::point<2,double> util::operator* (const point<2,double>&, const vector<2,double>&); -template util::point<3,double> util::operator* (const point<3,double>&, const vector<3,double>&); //----------------------------------------------------------------------------- @@ -209,22 +195,19 @@ util::operator<< (std::ostream &os, const util::point &p) { } -template std::ostream& util::operator<< (std::ostream &os, const util::point<1,float>&); -template std::ostream& util::operator<< (std::ostream &os, const util::point<2,float>&); -template std::ostream& util::operator<< (std::ostream &os, const util::point<3,float>&); +//----------------------------------------------------------------------------- +#define INSTANTIATE_S_T(S,T) \ +template struct util::point; \ +template std::ostream& util::operator<< (std::ostream &os, const util::point&); \ +template util::point util::operator* (const point&, const vector&); \ +template util::point util::operator* (const vector&, const point&); \ -template std::ostream& util::operator<< (std::ostream &os, const util::point<1,double>&); -template std::ostream& util::operator<< (std::ostream &os, const util::point<2,double>&); -template std::ostream& util::operator<< (std::ostream &os, const util::point<3,double>&); +#define INSTANTIATE(T) \ +INSTANTIATE_S_T(1,T) \ +INSTANTIATE_S_T(2,T) \ +INSTANTIATE_S_T(3,T) \ +INSTANTIATE_S_T(4,T) -template std::ostream& util::operator<< (std::ostream &os, const util::point<1,size_t>&); -template std::ostream& util::operator<< (std::ostream &os, const util::point<2,size_t>&); -template std::ostream& util::operator<< (std::ostream &os, const util::point<3,size_t>&); - -#define INSTANTIATE(T) \ -template struct util::point<1,T>; \ -template struct util::point<2,T>; \ -template struct util::point<3,T>; INSTANTIATE(int32_t) INSTANTIATE(uint32_t)