source: XIOS/dev/dev_olga/src/extern/blitz/include/blitz/array/ops.h @ 1022

Last change on this file since 1022 was 1022, checked in by mhnguyen, 7 years ago
File size: 5.8 KB
Line 
1// -*- C++ -*-
2/***************************************************************************
3 * blitz/array/ops.h  Array operators
4 *
5 * $Id$
6 *
7 * Copyright (C) 1997-2011 Todd Veldhuizen <tveldhui@acm.org>
8 *
9 * This file is a part of Blitz.
10 *
11 * Blitz is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation, either version 3
14 * of the License, or (at your option) any later version.
15 *
16 * Blitz is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with Blitz.  If not, see <http://www.gnu.org/licenses/>.
23 *
24 * Suggestions:          blitz-devel@lists.sourceforge.net
25 * Bugs:                 blitz-support@lists.sourceforge.net   
26 *
27 * For more information, please see the Blitz++ Home Page:
28 *    https://sourceforge.net/projects/blitz/
29 *
30 ****************************************************************************/
31#ifndef BZ_ARRAY_OPS_H
32#define BZ_ARRAY_OPS_H
33
34#include <blitz/ops.h>
35#include <blitz/funcs.h>
36#include <blitz/array/newet-macros.h>
37
38BZ_NAMESPACE(blitz)
39   
40// unary operators
41   
42BZ_DECLARE_ARRAY_ET_UNARY(operator~, BitwiseNot)
43BZ_DECLARE_ARRAY_ET_UNARY(operator!, LogicalNot)
44BZ_DECLARE_ARRAY_ET_UNARY(operator+, UnaryPlus)
45BZ_DECLARE_ARRAY_ET_UNARY(operator-, UnaryMinus)
46
47// binary operators
48   
49BZ_DECLARE_ARRAY_ET_BINARY(operator+,  Add)
50BZ_DECLARE_ARRAY_ET_BINARY(operator-,  Subtract)
51BZ_DECLARE_ARRAY_ET_BINARY(operator*,  Multiply)
52BZ_DECLARE_ARRAY_ET_BINARY(operator/,  Divide)
53BZ_DECLARE_ARRAY_ET_BINARY(operator%,  Modulo)
54BZ_DECLARE_ARRAY_ET_BINARY(operator^,  BitwiseXor)
55BZ_DECLARE_ARRAY_ET_BINARY(operator&,  BitwiseAnd)
56BZ_DECLARE_ARRAY_ET_BINARY(operator|,  BitwiseOr)
57BZ_DECLARE_ARRAY_ET_BINARY(operator>>, ShiftRight)
58BZ_DECLARE_ARRAY_ET_BINARY(operator<<, ShiftLeft)
59BZ_DECLARE_ARRAY_ET_BINARY(operator>,  Greater)
60BZ_DECLARE_ARRAY_ET_BINARY(operator<,  Less)
61BZ_DECLARE_ARRAY_ET_BINARY(operator>=, GreaterOrEqual)
62BZ_DECLARE_ARRAY_ET_BINARY(operator<=, LessOrEqual)
63BZ_DECLARE_ARRAY_ET_BINARY(operator==, Equal)
64BZ_DECLARE_ARRAY_ET_BINARY(operator!=, NotEqual)
65BZ_DECLARE_ARRAY_ET_BINARY(operator&&, LogicalAnd)
66BZ_DECLARE_ARRAY_ET_BINARY(operator||, LogicalOr)
67
68// \todo are these for Arrays of TinyVectors? How do we distinguish these from element-wise operations? they must now be done using the scalar() function
69/*
70// Declare binary ops between Array and "scalar-like" TinyVector
71BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator+,  Add)
72BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator-,  Subtract)
73BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator*,  Multiply)
74BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator/,  Divide)
75BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator%,  Modulo)
76BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator^,  BitwiseXor)
77BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator&,  BitwiseAnd)
78BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator|,  BitwiseOr)
79BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator>,  Greater)
80BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator<,  Less)
81BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator>=, GreaterOrEqual)
82BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator<=, LessOrEqual)
83BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator==, Equal)
84BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator!=, NotEqual)
85BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator&&, LogicalAnd)
86BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC(operator||, LogicalOr)
87BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC((min), Min)
88BZ_DECLARE_ARRAY_ET_BINARY_TINYVEC((max), Max)
89*/
90
91#define BZ_DECLARE_ARRAY_ET_SCALAR_OPS(sca)                            \
92BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator+,  Add, sca)                \
93BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator-,  Subtract, sca)           \
94BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator*,  Multiply, sca)           \
95BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator/,  Divide, sca)             \
96BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator%,  Modulo, sca)             \
97BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator^,  BitwiseXor, sca)         \
98BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator&,  BitwiseAnd, sca)         \
99BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator|,  BitwiseOr, sca)          \
100BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator>>, ShiftRight, sca)         \
101BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator<<, ShiftLeft, sca)          \
102BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator>,  Greater, sca)            \
103BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator<,  Less, sca)               \
104BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator>=, GreaterOrEqual, sca)     \
105BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator<=, LessOrEqual, sca)        \
106BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator==, Equal, sca)              \
107BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator!=, NotEqual, sca)           \
108BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator&&, LogicalAnd, sca)         \
109BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(operator||, LogicalOr, sca)          \
110BZ_DECLARE_ARRAY_ET_BINARY_SCALAR((min), Min, sca)                     \
111BZ_DECLARE_ARRAY_ET_BINARY_SCALAR((max), Max, sca)
112
113BZ_DECLARE_ARRAY_ET_SCALAR_OPS(char)
114BZ_DECLARE_ARRAY_ET_SCALAR_OPS(unsigned char)
115BZ_DECLARE_ARRAY_ET_SCALAR_OPS(short)
116BZ_DECLARE_ARRAY_ET_SCALAR_OPS(unsigned short)
117BZ_DECLARE_ARRAY_ET_SCALAR_OPS(int)
118BZ_DECLARE_ARRAY_ET_SCALAR_OPS(unsigned int)
119BZ_DECLARE_ARRAY_ET_SCALAR_OPS(long)
120BZ_DECLARE_ARRAY_ET_SCALAR_OPS(unsigned long)
121BZ_DECLARE_ARRAY_ET_SCALAR_OPS(float)
122BZ_DECLARE_ARRAY_ET_SCALAR_OPS(double)
123BZ_DECLARE_ARRAY_ET_SCALAR_OPS(long double)
124#ifdef BZ_HAVE_COMPLEX
125BZ_DECLARE_ARRAY_ET_SCALAR_OPS(complex<float>)
126BZ_DECLARE_ARRAY_ET_SCALAR_OPS(complex<double>)
127BZ_DECLARE_ARRAY_ET_SCALAR_OPS(complex<long double>)
128#endif
129
130
131BZ_NAMESPACE_END
132
133#endif // BZ_ARRAY_OPS_H
Note: See TracBrowser for help on using the repository browser.