cartodata 6.0.0
volumeref_d_operators.h
Go to the documentation of this file.
1/* This software and supporting documentation are distributed by
2 * Institut Federatif de Recherche 49
3 * CEA/NeuroSpin, Batiment 145,
4 * 91191 Gif-sur-Yvette cedex
5 * France
6 *
7 * This software is governed by the CeCILL-B license under
8 * French law and abiding by the rules of distribution of free software.
9 * You can use, modify and/or redistribute the software under the
10 * terms of the CeCILL-B license as circulated by CEA, CNRS
11 * and INRIA at the following URL "http://www.cecill.info".
12 *
13 * As a counterpart to the access to the source code and rights to copy,
14 * modify and redistribute granted by the license, users are provided only
15 * with a limited warranty and the software's author, the holder of the
16 * economic rights, and the successive licensors have only limited
17 * liability.
18 *
19 * In this respect, the user's attention is drawn to the risks associated
20 * with loading, using, modifying and/or developing or reproducing the
21 * software by the user in light of its specific status of free software,
22 * that may mean that it is complicated to manipulate, and that also
23 * therefore means that it is reserved for developers and experienced
24 * professionals having in-depth computer knowledge. Users are therefore
25 * encouraged to load and test the software's suitability as regards their
26 * requirements in conditions enabling the security of their systems and/or
27 * data to be ensured and, more generally, to use and operate it in the
28 * same conditions as regards security.
29 *
30 * The fact that you are presently reading this means that you have had
31 * knowledge of the CeCILL-B license and that you accept its terms.
32 */
33
34#ifndef CARTODATA_VOLUME_VOLUMEREF_D_OPERATORS_H
35#define CARTODATA_VOLUME_VOLUMEREF_D_OPERATORS_H
36
37
38//--- cartodata --------------------------------------------------------------
42//----------------------------------------------------------------------------
43
44// Extern operators should be defined inside the library namespace because of
45// Koenig's lookup:
46// - https://en.wikipedia.org/wiki/Argument-dependent_name_lookup
47namespace carto {
48
49#ifdef CARTO_VOLUME_AUTO_DEREFERENCE
50
51 //==========================================================================
52 // BOOLEANS
53 //==========================================================================
54
55 template <typename T>
56 inline
57 bool VolumeRef<T>::all() const
58 {
59 return (*this)->all();
60 }
61
62 template <typename T>
63 inline
64 bool VolumeRef<T>::any() const
65 {
66 return (*this)->any();
67 }
68
69#if 0 // would change rc_ptr cast operator (equivalent to get())
70 template <typename T>
71 inline
72 operator VolumeRef<T>::bool() const
73 {
74 return (bool)(**this);
75 }
76#endif
77
78 template <typename T>
79 inline
81 {
82 return (*this)->min();
83 }
84
85 template <typename T>
86 inline
88 {
89 return (*this)->max();
90 }
91
92 template <typename T>
93 inline
95 {
96 return (*this)->sum();
97 }
98
99
100 //==========================================================================
101 // FILL / REPLACE
102 //==========================================================================
103
104 template <typename T>
105 inline
106 void VolumeRef<T>::fill( const T & value )
107 {
108 (*this)->fill(value);
109 }
110
111 template <typename T>
112 inline
113 void VolumeRef<T>::fillBorder( const T & value )
114 {
115 (*this)->fillBorder(value);
116 }
117
118 template <typename T>
119 inline
121 {
122 (**this) = value;
123 return *this;
124 }
125
126 //==========================================================================
127 // COPY
128 //==========================================================================
129 // This is defined with the operators because it needs volumeutil.h
130
131 template <typename T>
132 inline
134 {
135 return ::carto::copy<T,T>( *this );
136 }
137
138 template <typename T>
139 template <typename OUTP>
140 inline
142 {
143 return ::carto::copy<OUTP,T>( *this );
144 }
145
146 template <typename T>
147 inline
149 {
150 return ::carto::deepcopy<T,T>( *this );
151 }
152
153 template <typename T>
154 template <typename OUTP>
155 inline
157 {
158 return ::carto::deepcopy<OUTP,T>( *this );
159 }
160
161 template <typename T>
162 inline
164 {
165 return ::carto::copyStructure<T,T>( *this );
166 }
167
168 template <typename T>
169 template <typename OUTP>
170 inline
172 {
173 return ::carto::copyStructure<OUTP,T>( *this );
174 }
175
176 template <typename T>
177 template <typename OUTP>
178 inline
180 {
181 return ::carto::deepcopy<OUTP,T>( *this );
182 }
183
184 //============================================================================
185 // EXTERN OPERATORS : COMPARISONS
186 //============================================================================
187
188 //--- VolumeRef [op] Scalar --------------------------------------------------
189
190 template <typename T, typename U>
191 inline
193 {
195 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::equal_to<T,U>(), value ) );
196 return output;
197 }
198
199 template <typename T, typename U>
200 inline
202 {
204 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::not_equal_to<T,U>(), value ) );
205 return output;
206 }
207
208 template <typename T, typename U>
209 inline
211 {
213 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::greater_equal<T,U>(), value ) );
214 return output;
215 }
216
217 template <typename T, typename U>
218 inline
219 carto::VolumeRef<bool> operator<= ( const carto::VolumeRef<T> & vol, const U & value )
220 {
222 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::less_equal<T,U>(), value ) );
223 return output;
224 }
225
226 template <typename T, typename U>
227 inline
229 {
231 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::greater<T,U>(), value ) );
232 return output;
233 }
234
235 template <typename T, typename U>
236 inline
237 carto::VolumeRef<bool> operator< ( const carto::VolumeRef<T> & vol, const U & value )
238 {
240 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::less<T,U>(), value ) );
241 return output;
242 }
243
244 //--- Scalar [op] VolumeRef --------------------------------------------------
245
246 template <typename T, typename U>
247 inline
249 {
251 carto::volumeutil::applyTowards( *vol, *output, std::bind1st( carto::volumeutil::equal_to<U,T>(), value ) );
252 return output;
253 }
254
255 template <typename T, typename U>
256 inline
258 {
260 carto::volumeutil::applyTowards( *vol, *output, std::bind1st( carto::volumeutil::not_equal_to<U,T>(), value ) );
261 return output;
262 }
263
264 template <typename T, typename U>
265 inline
267 {
269 carto::volumeutil::applyTowards( *vol, *output, std::bind1st( carto::volumeutil::greater_equal<U,T>(), value ) );
270 return output;
271 }
272
273 template <typename T, typename U>
274 inline
275 carto::VolumeRef<bool> operator<= ( const U & value, const carto::VolumeRef<T> & vol )
276 {
278 carto::volumeutil::applyTowards( *vol, *output, std::bind1st( carto::volumeutil::less_equal<U,T>(), value ) );
279 return output;
280 }
281
282 template <typename T, typename U>
283 inline
285 {
287 carto::volumeutil::applyTowards( *vol, *output, std::bind1st( carto::volumeutil::greater<U,T>(), value ) );
288 return output;
289 }
290
291 template <typename T, typename U>
292 inline
293 carto::VolumeRef<bool> operator< ( const U & value, const carto::VolumeRef<T> & vol )
294 {
296 carto::volumeutil::applyTowards( *vol, *output, std::bind1st( carto::volumeutil::less<U,T>(), value ) );
297 return output;
298 }
299
300 //--- VolumeRef [op] Volume --------------------------------------------------
301
302 template <typename T, typename U>
303 inline
310
311 template <typename T, typename U>
312 inline
319
320 template <typename T, typename U>
321 inline
323 {
326 return output;
327 }
328
329 template <typename T, typename U>
330 inline
332 {
335 return output;
336 }
337
338 template <typename T, typename U>
339 inline
341 {
344 return output;
345 }
346
347 template <typename T, typename U>
348 inline
350 {
353 return output;
354 }
355
356 //--- Volume [op] VolumeRef --------------------------------------------------
357
358 template <typename T, typename U>
359 inline
365
366 template <typename T, typename U>
367 inline
373
374 template <typename T, typename U>
375 inline
377 {
380 }
381
382 template <typename T, typename U>
383 inline
385 {
388 }
389
390 template <typename T, typename U>
391 inline
393 {
396 }
397
398 template <typename T, typename U>
399 inline
401 {
403 return carto::volumeutil::applyTowards( vol, *other, output, carto::volumeutil::less<T,U>() );
404 }
405
406 //--- VolumeRef [op] VolumeRef -----------------------------------------------
407
408 #if 0 // Would change rc_ptr behaviour
409 template <typename T, typename U>
410 inline
411 carto::VolumeRef<bool> operator== ( const carto::VolumeRef<T> & vol, const carto::VolumeRef<U> & other )
412 {
413 carto::VolumeRef<bool> output = carto::copyStructure<bool, T>( vol );
414 carto::volumeutil::applyTowards( *vol, *other, *output, carto::volumeutil::equal_to<T,U>() );
415 return output;
416 }
417
418 template <typename T, typename U>
419 inline
420 carto::VolumeRef<bool> operator!= ( const carto::VolumeRef<T> & vol, const carto::VolumeRef<U> & other )
421 {
422 carto::VolumeRef<bool> output = carto::copyStructure<bool, T>( vol );
423 carto::volumeutil::applyTowards( *vol, *other, *output, carto::volumeutil::not_equal_to<T,U>() );
424 return output;
425 }
426 #endif
427
428 template <typename T, typename U>
429 inline
431 {
434 return output;
435 }
436
437 template <typename T, typename U>
438 inline
440 {
443 return output;
444 }
445
446 template <typename T, typename U>
447 inline
449 {
452 return output;
453 }
454
455 template <typename T, typename U>
456 inline
458 {
461 return output;
462 }
463
464 //============================================================================
465 // EXTERN OPERATORS : ARITHMETICS
466 //============================================================================
467
468 //--- [op] VolumeRef ---------------------------------------------------------
469
470 template <typename T>
471 inline
476
477 template <typename T>
478 inline
483
488 template <typename T>
489 inline
491 {
492 // if the input vol is null, also return a null result.
493 if( vol.isNull() )
494 return carto::VolumeRef<bool>();
495
498 return output;
499 }
500
501 //--- VolumeRef [op] Scalar --------------------------------------------------
502
503 template <typename T, typename U>
504 inline
506 operator+ ( const carto::VolumeRef<T> & vol, const U & value )
507 {
508 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::plus<T,U>(), value ) );
509 }
510
511 template <typename T, typename U>
512 inline
514 operator- ( const carto::VolumeRef<T> & vol, const U & value )
515 {
516 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::minus<T,U>(), value ) );
517 }
518
519 template <typename T, typename U>
520 inline
522 operator* ( const carto::VolumeRef<T> & vol, const U & value )
523 {
524 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::multiplies<T,U>(), value ) );
525 }
526
527 template <typename T, typename U>
528 inline
530 operator/ ( const carto::VolumeRef<T> & vol, const U & value )
531 {
532 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::divides<T,U>(), value ) );
533 }
534
535 template <typename T, typename U>
536 inline
538 operator% ( const carto::VolumeRef<T> & vol, const U & value )
539 {
540 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::modulus<T,U>(), value ) );
541 }
542
543 template <typename T, typename U>
544 inline
546 operator& ( const carto::VolumeRef<T> & vol, const U & value )
547 {
548 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::bitwise_and<T,U>(), value ) );
549 }
550
551 template <typename T, typename U>
552 inline
554 operator| ( const carto::VolumeRef<T> & vol, const U & value )
555 {
556 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::bitwise_or<T,U>(), value ) );
557 }
558
559 template <typename T, typename U>
560 inline
562 operator^ ( const carto::VolumeRef<T> & vol, const U & value )
563 {
564 return carto::volumeutil::apply( vol, std::bind2nd( carto::volumeutil::bitwise_xor<T,U>(), value ) );
565 }
566
567 template <typename T, typename U>
568 inline
570 {
572 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::logical_and<T,U>(), value ) );
573 return output;
574 }
575
576 template <typename T, typename U>
577 inline
579 {
581 carto::volumeutil::applyTowards( *vol, *output, std::bind2nd( carto::volumeutil::logical_or<T,U>(), value ) );
582 return output;
583 }
584
585 //--- Scalar [op] VolumeRef --------------------------------------------------
586
587 template <typename T, typename U>
588 inline
590 operator+ ( const U & value, const carto::VolumeRef<T> & vol )
591 {
592 return carto::volumeutil::apply( vol, std::bind1st( carto::volumeutil::plus<U,T>(), value ) );
593 }
594
595 template <typename T, typename U>
596 inline
598 operator- ( const U & value, const carto::VolumeRef<T> & vol )
599 {
600 return carto::volumeutil::apply( vol, std::bind1st( carto::volumeutil::minus<U,T>(), value ) );
601 }
602
603 template <typename T, typename U>
604 inline
606 operator* ( const U & value, const carto::VolumeRef<T> & vol )
607 {
608 return carto::volumeutil::apply( vol, std::bind1st( carto::volumeutil::multiplies<U,T>(), value ) );
609 }
610
611 template <typename T, typename U>
612 inline
614 operator/ ( const U & value, const carto::VolumeRef<T> & vol )
615 {
616 return carto::volumeutil::apply( vol, std::bind1st( carto::volumeutil::divides<U,T>(), value ) );
617 }
618
619 //--- VolumeRef [op] Volume --------------------------------------------------
620
621 template <typename T, typename U>
622 inline
624 operator+ ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
625 {
627 }
628
629 template <typename T, typename U>
630 inline
632 operator- ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
633 {
635 }
636
637 template <typename T, typename U>
638 inline
640 operator* ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
641 {
643 }
644
645 template <typename T, typename U>
646 inline
648 operator/ ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
649 {
651 }
652
653 template <typename T, typename U>
654 inline
656 operator% ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
657 {
659 }
660
661 template <typename T, typename U>
662 inline
664 operator& ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
665 {
667 }
668
669 template <typename T, typename U>
670 inline
672 operator| ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
673 {
675 }
676
677 template <typename T, typename U>
678 inline
680 operator^ ( const carto::VolumeRef<T> & vol, const carto::Volume<U> & other )
681 {
683 }
684
685 template <typename T, typename U>
686 inline
693
694 template <typename T, typename U>
695 inline
702
703 //--- Volume [op] VolumeRef --------------------------------------------------
704
705 template <typename T, typename U>
706 inline
708 operator+ ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
709 {
711 }
712
713 template <typename T, typename U>
714 inline
716 operator- ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
717 {
719 }
720
721 template <typename T, typename U>
722 inline
724 operator* ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
725 {
727 }
728
729 template <typename T, typename U>
730 inline
732 operator/ ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
733 {
735 }
736
737 template <typename T, typename U>
738 inline
740 operator% ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
741 {
743 }
744
745 template <typename T, typename U>
746 inline
748 operator& ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
749 {
751 }
752
753 template <typename T, typename U>
754 inline
756 operator| ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
757 {
759 }
760
761 template <typename T, typename U>
762 inline
764 operator^ ( const carto::Volume<T> & vol, const carto::VolumeRef<U> & other )
765 {
767 }
768
769 template <typename T, typename U>
770 inline
776 template <typename T, typename U>
777 inline
783
784 //--- VolumeRef [op] VolumeRef -----------------------------------------------
785
786 template <typename T, typename U>
787 inline
790 {
792 }
793
794 template <typename T, typename U>
795 inline
798 {
800 }
801
802 template <typename T, typename U>
803 inline
806 {
808 }
809
810 template <typename T, typename U>
811 inline
814 {
816 }
817
818 template <typename T, typename U>
819 inline
822 {
824 }
825
826 template <typename T, typename U>
827 inline
830 {
832 }
833
834 template <typename T, typename U>
835 inline
838 {
840 }
841
842 template <typename T, typename U>
843 inline
846 {
848 }
849
850 template <typename T, typename U>
851 inline
858 template <typename T, typename U>
859 inline
866
867 //============================================================================
868 // OPERATORS: ARITHMETIC MODIFIERS
869 //============================================================================
870
871 //--- VolumeRef [op] Scalar --------------------------------------------------
872
873 template <typename T, typename U>
874 inline
876 {
877 carto::volumeutil::selfApply( vol, std::bind2nd( carto::volumeutil::plus<T,U>(), value ) );
878 return vol;
879 }
880
881 template <typename T, typename U>
882 inline
884 {
885 carto::volumeutil::selfApply( vol, std::bind2nd( carto::volumeutil::minus<T,U>(), value ) );
886 return vol;
887 }
888
889 template <typename T, typename U>
890 inline
892 {
894 return vol;
895 }
896
897 template <typename T, typename U>
898 inline
900 {
901 carto::volumeutil::selfApply( vol, std::bind2nd( carto::volumeutil::divides<T,U>(), value ) );
902 return vol;
903 }
904
905 template <typename T, typename U>
906 inline
908 {
909 carto::volumeutil::selfApply( vol, std::bind2nd( carto::volumeutil::modulus<T,U>(), value ) );
910 return vol;
911 }
912
913 template <typename T, typename U>
914 inline
916 {
918 return vol;
919 }
920
921 template <typename T, typename U>
922 inline
924 {
926 return vol;
927 }
928
929 template <typename T, typename U>
930 inline
932 {
934 return vol;
935 }
936
937 //--- VolumeRef [op] Volume --------------------------------------------------
938
939 template <typename T, typename U>
940 inline
946
947 template <typename T, typename U>
948 inline
954
955 template <typename T, typename U>
956 inline
962
963 template <typename T, typename U>
964 inline
970
971 template <typename T, typename U>
972 inline
978
979 template <typename T, typename U>
980 inline
986
987 template <typename T, typename U>
988 inline
994
995 template <typename T, typename U>
996 inline
1002
1003 //--- Volume [op]= VolumeRef -------------------------------------------------
1004
1005 template <typename T, typename U>
1006 inline
1011
1012 template <typename T, typename U>
1013 inline
1018
1019 template <typename T, typename U>
1020 inline
1025
1026 template <typename T, typename U>
1027 inline
1032
1033 template <typename T, typename U>
1034 inline
1039
1040 template <typename T, typename U>
1041 inline
1046
1047 template <typename T, typename U>
1048 inline
1053
1054 template <typename T, typename U>
1055 inline
1060
1061 //--- VolumeRef [op] VolumeRef -----------------------------------------------
1062
1063 template <typename T, typename U>
1064 inline
1066 {
1068 return vol;
1069 }
1070
1071 template <typename T, typename U>
1072 inline
1074 {
1076 return vol;
1077 }
1078
1079 template <typename T, typename U>
1080 inline
1086
1087 template <typename T, typename U>
1088 inline
1090 {
1092 return vol;
1093 }
1094
1095 template <typename T, typename U>
1096 inline
1098 {
1100 return vol;
1101 }
1102
1103 template <typename T, typename U>
1104 inline
1110
1111 template <typename T, typename U>
1112 inline
1118
1119 template <typename T, typename U>
1120 inline
1126
1127
1128 //============================================================================
1129 // INCREMENTS
1130 //============================================================================
1131
1132 template <typename T>
1133 inline
1135 {
1137 ++vol;
1138 return output;
1139 }
1140
1141 template <typename T>
1142 inline
1148
1149 template <typename T>
1150 inline
1152 {
1154 --vol;
1155 return output;
1156 }
1157
1158 template <typename T>
1159 inline
1165
1166#endif // CARTO_VOLUME_AUTO_DEREFERENCE
1167
1168} // namespace carto
1169
1170#endif // CARTODATA_VOLUME_VOLUMEREF_D_OPERATORS_H
Convenient handle for a Volume - this is normally the entry point for all volumes handling.
Definition volumeref.h:60
bool any() const
True if at least one value compares to true.
VolumeRef< T > copyStructure() const
void fillBorder(const T &value)
Fill border with a constant value.
VolumeRef< T > & operator=(const T &value)
DataTypeTraits< T >::LongType sum() const
To avoid overflow, the biggest possible type (intmax_t, uintmax_t, double...) is used for computation...
VolumeRef< T > copy() const
void fill(const T &value)
Fills the volume with a given value.
bool all() const
True if all values compare to true.
VolumeRef< T > deepcopy() const
N-D Volume main class.
Definition volumebase.h:120
bool isNull() const
Volume< OUTP > & applyTowards(const Volume< T > &vol, Volume< OUTP > &dst, UnaryFunction func)
Apply a function to all the elements of a volume (already allocated output version)
Definition volumeutil.h:604
Volume< T > & selfApply(Volume< T > &vol, UnaryFunction func)
Apply a function to all the elements of a volume (in place version)
Definition volumeutil.h:568
Volume< typename UnaryFunction::result_type > apply(const Volume< T > &vol, UnaryFunction func)
Apply a function to all the elements of a volume (create output version)
Definition volumeutil.h:519
carto::Volume< T > & operator^=(carto::Volume< T > &vol, const U &value)
VoxelRGB operator/(const VoxelRGB &aa, const uint8_t &bb)
carto::Volume< T > operator++(carto::Volume< T > &vol, int)
Volume< T > deepcopy(const Volume< T > &src, const std::vector< int > &size=std::vector< int >())
Performs a copy of the data (not only a reference copy) The whole view hierarchy is fully duplicated.
Definition volumeutil.h:878
VoxelRGB operator+(const VoxelRGB &aa, const VoxelRGB &bb)
carto::Volume< bool > operator>=(const carto::Volume< T > &vol, const U &value)
carto::Volume< bool > operator==(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > operator~(const carto::Volume< T > &vol)
Volume< T > copyStructure(const Volume< T > &src)
Performs a copy of the view structure without transfering the data.
carto::Volume< bool > operator<=(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > & operator/=(carto::Volume< T > &vol, const U &value)
carto::Volume< bool > operator||(const carto::Volume< T > &vol, const U &value)
VoxelRGB operator-(const VoxelRGB &aa, const VoxelRGB &bb)
carto::Volume< typename carto::volumeutil::bitwise_or< T, U >::result_type > operator|(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > operator--(carto::Volume< T > &vol, int)
VoxelRGB operator*(const VoxelRGB &aa, const uint8_t &bb)
carto::Volume< T > & operator+=(carto::Volume< T > &vol, const U &value)
carto::Volume< typename carto::volumeutil::bitwise_xor< T, U >::result_type > operator^(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > & operator%=(carto::Volume< T > &vol, const U &value)
carto::Volume< bool > operator!(const carto::Volume< T > &vol)
carto::Volume< bool > operator!=(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > & operator|=(carto::Volume< T > &vol, const U &value)
carto::Volume< bool > operator&&(const carto::Volume< T > &vol, const U &value)
carto::Volume< bool > operator<(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > & operator&=(carto::Volume< T > &vol, const U &value)
carto::Volume< typename carto::volumeutil::bitwise_and< T, U >::result_type > operator&(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > & operator*=(carto::Volume< T > &vol, const U &value)
carto::Volume< bool > operator>(const carto::Volume< T > &vol, const U &value)
carto::Volume< typename carto::volumeutil::modulus< T, U >::result_type > operator%(const carto::Volume< T > &vol, const U &value)
carto::Volume< T > & operator-=(carto::Volume< T > &vol, const U &value)