aGrUM  0.14.2
operators4MultiDim.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005 by Pierre-Henri WUILLEMIN et Christophe GONZALES *
3  * {prenom.nom}_at_lip6.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
27 #ifndef GUM_OPERATORS_4_MULTI_DIM_H
28 #define GUM_OPERATORS_4_MULTI_DIM_H
29 
30 #include <agrum/core/timer.h>
34 
35 namespace gum {
36 
37  // ==========================================================================
39  // ==========================================================================
41 
58  template < typename T >
59  MultiDimArray< T >* add2MultiDimArrays(const MultiDimArray< T >* t1,
60  const MultiDimArray< T >* t2);
61 
78  template < typename T >
79  MultiDimImplementation< T >*
80  add2MultiDimArrays(const MultiDimImplementation< T >* t1,
81  const MultiDimImplementation< T >* t2);
82 
99  template < typename T >
100  MultiDimArray< T* >* add2MultiDimArrays4Pointers(const MultiDimArray< T* >* t1,
101  const MultiDimArray< T* >* t2);
102 
119  template < typename T >
120  MultiDimImplementation< T* >*
121  add2MultiDimArrays4Pointers(const MultiDimImplementation< T* >* t1,
122  const MultiDimImplementation< T* >* t2);
123 
140  template < typename T >
141  MultiDimFunctionGraph< T >*
142  add2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T >* t1,
143  const MultiDimFunctionGraph< T >* t2);
144 
161  template < typename T >
162  MultiDimImplementation< T >*
163  add2MultiDimFunctionGraphs(const MultiDimImplementation< T >* t1,
164  const MultiDimImplementation< T >* t2);
165 
167  // ==========================================================================
169  // ==========================================================================
171 
188  template < typename T >
189  MultiDimArray< T >* subtract2MultiDimArrays(const MultiDimArray< T >* t1,
190  const MultiDimArray< T >* t2);
191 
208  template < typename T >
209  MultiDimImplementation< T >*
210  subtract2MultiDimArrays(const MultiDimImplementation< T >* t1,
211  const MultiDimImplementation< T >* t2);
212 
229  template < typename T >
230  MultiDimArray< T* >*
231  subtract2MultiDimArrays4Pointers(const MultiDimArray< T* >* t1,
232  const MultiDimArray< T* >* t2);
233 
250  template < typename T >
251  MultiDimImplementation< T* >*
252  subtract2MultiDimArrays4Pointers(const MultiDimImplementation< T* >* t1,
253  const MultiDimImplementation< T* >* t2);
254 
271  template < typename T >
272  MultiDimFunctionGraph< T >*
273  subtract2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T >* t1,
274  const MultiDimFunctionGraph< T >* t2);
275 
292  template < typename T >
293  MultiDimImplementation< T >*
294  subtract2MultiDimFunctionGraphs(const MultiDimImplementation< T >* t1,
295  const MultiDimImplementation< T >* t2);
296 
298  // ==========================================================================
300  // ==========================================================================
302 
319  template < typename T >
320  MultiDimArray< T >* multiply2MultiDimArrays(const MultiDimArray< T >* t1,
321  const MultiDimArray< T >* t2);
322 
339  template < typename T >
340  MultiDimImplementation< T >*
341  multiply2MultiDimArrays(const MultiDimImplementation< T >* t1,
342  const MultiDimImplementation< T >* t2);
343 
360  template < typename T >
361  MultiDimArray< T* >*
362  multiply2MultiDimArrays4Pointers(const MultiDimArray< T* >* t1,
363  const MultiDimArray< T* >* t2);
364 
381  template < typename T >
382  MultiDimImplementation< T* >*
383  multiply2MultiDimArrays4Pointers(const MultiDimImplementation< T* >* t1,
384  const MultiDimImplementation< T* >* t2);
385 
402  template < typename T >
403  MultiDimFunctionGraph< T >*
404  multiply2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T >* t1,
405  const MultiDimFunctionGraph< T >* t2);
406 
423  template < typename T >
424  MultiDimImplementation< T >*
425  multiply2MultiDimFunctionGraphs(const MultiDimImplementation< T >* t1,
426  const MultiDimImplementation< T >* t2);
427 
429  // ==========================================================================
431  // ==========================================================================
433 
450  template < typename T >
451  MultiDimArray< T >* divide2MultiDimArrays(const MultiDimArray< T >* t1,
452  const MultiDimArray< T >* t2);
453 
470  template < typename T >
471  MultiDimImplementation< T >*
472  divide2MultiDimArrays(const MultiDimImplementation< T >* t1,
473  const MultiDimImplementation< T >* t2);
474 
491  template < typename T >
492  MultiDimArray< T* >*
493  divide2MultiDimArrays4Pointers(const MultiDimArray< T* >* t1,
494  const MultiDimArray< T* >* t2);
495 
512  template < typename T >
513  MultiDimImplementation< T* >*
514  divide2MultiDimArrays4Pointers(const MultiDimImplementation< T* >* t1,
515  const MultiDimImplementation< T* >* t2);
516 
533  template < typename T >
534  MultiDimFunctionGraph< T >*
535  divide2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T >* t1,
536  const MultiDimFunctionGraph< T >* t2);
537 
554  template < typename T >
555  MultiDimImplementation< T >*
556  divide2MultiDimFunctionGraphs(const MultiDimImplementation< T >* t1,
557  const MultiDimImplementation< T >* t2);
558 
560  // ==========================================================================
562  // ==========================================================================
564 
579  template < typename T >
580  MultiDimFunctionGraph< T >*
581  maximise2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T >* t1,
582  const MultiDimFunctionGraph< T >* t2);
583 
598  template < typename T >
599  MultiDimImplementation< T >*
600  maximise2MultiDimFunctionGraphs(const MultiDimImplementation< T >* t1,
601  const MultiDimImplementation< T >* t2);
602 
604  // ==========================================================================
606  // ==========================================================================
608 
611  template < typename T >
612  MultiDimImplementation< T >* operator+(const MultiDimImplementation< T >&,
613  const MultiDimImplementation< T >&);
614 
617  template < typename T >
618  MultiDimImplementation< T >* operator-(const MultiDimImplementation< T >&,
619  const MultiDimImplementation< T >&);
620 
623  template < typename T >
624  MultiDimImplementation< T >* operator*(const MultiDimImplementation< T >&,
625  const MultiDimImplementation< T >&);
626 
629  template < typename T >
630  MultiDimImplementation< T >* operator/(const MultiDimImplementation< T >&,
631  const MultiDimImplementation< T >&);
632 
634 
635  // ==========================================================================
636  // DO NOT FORGET TO REGISTER YOUR BINARY FUNCTIONS AT THE END OF FILE
637  // operators4MultiDim_tpl.h
638  // ==========================================================================
639 
645  template < typename GUM_SCALAR >
646  void operators4MultiDimInit();
647 
653  template < typename GUM_SCALAR >
655 
670  template < typename GUM_SCALAR >
672  void init() { operators4MultiDimInit< GUM_SCALAR >(); };
673  };
674 
690  template < typename GUM_SCALAR >
691  struct Operators4MultiDimInitialize< GUM_SCALAR* > {
692  void init() { pointerOperators4MultiDimInit< GUM_SCALAR >(); };
693  };
694 
696 
697 } /* namespace gum */
698 
699 // always include the templatized implementations
701 
702 #endif /* GUM_OPERATORS_4_MULTI_DIM_H */
MultiDimArray< T > * multiply2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
Formula operator+(const Formula &a, const Formula &b)
Definition: formula_inl.h:459
void operators4MultiDimInit()
the function used to register all the operators on multidimImplementations over non-pointers types...
MultiDimArray< T *> * divide2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for dividing two multiDimArraysThe function produces a tensorial division of t...
MultiDimArray< T *> * add2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for summing two multiDimArraysThe function produces a tensorial addition of t1...
MultiDimFunctionGraph< T > * subtract2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
Class used to compute response times for benchmark purposes.
gum is the global namespace for all aGrUM entities
Definition: agrum.h:25
a class used to register operators over non-pointers typesThis class is of course completely redundan...
Headers of gum::MultiDimImplementation.
MultiDimArray< T *> * subtract2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
MultiDimArray< T *> * multiply2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
void pointerOperators4MultiDimInit()
the function used to register all the operators on multidimImplementations over pointers types...
Formula operator/(const Formula &a, const Formula &b)
Definition: formula_inl.h:474
MultiDimFunctionGraph< T > * multiply2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
Formula operator*(const Formula &a, const Formula &b)
Definition: formula_inl.h:469
ListConstIterator< Val >::difference_type operator-(const ListConstIterator< Val > &iter1, const ListConstIterator< Val > &iter2)
For STL compliance, a distance operator.
Definition: list_tpl.h:346
MultiDimArray< T > * add2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for summing two multiDimArraysThe function produces a tensorial addition of t1...
Headers of MultiDimFunctionGraph.
MultiDimArray< T > * subtract2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
MultiDimFunctionGraph< T > * add2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for summing two multiDimArraysThe function produces a tensorial addition of t1...
MultiDimFunctionGraph< T > * divide2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for dividing two multiDimArraysThe function produces a tensorial division of t...
Efficient functionals for combining multiDims.
MultiDimFunctionGraph< T > * maximise2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for compare value from two multiDimFunctionGraphs and gets the maximalThe func...
MultiDimArray< T > * divide2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for dividing two multiDimArraysThe function produces a tensorial division of t...
Header of the MultiDimArray class.