OPAL (Object Oriented Parallel Accelerator Library)  2021.1.99
OPAL
EndFieldModel.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017, Chris Rogers
3  * All rights reserved.
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  * 1. Redistributions of source code must retain the above copyright notice,
7  * this list of conditions and the following disclaimer.
8  * 2. Redistributions in binary form must reproduce the above copyright notice,
9  * this list of conditions and the following disclaimer in the documentation
10  * and/or other materials provided with the distribution.
11  * 3. Neither the name of STFC nor the names of its contributors may be used to
12  * endorse or promote products derived from this software without specific
13  * prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  * POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef ENDFIELDMODEL_ENDFIELDMODEL_H_
29 #define ENDFIELDMODEL_ENDFIELDMODEL_H_
30 
31 #include <iostream>
32 #include <vector>
33 
34 namespace endfieldmodel {
35 
37  public:
38  virtual ~EndFieldModel() {;}
39  virtual std::ostream& print(std::ostream& out) const = 0;
40  virtual double function(double x, int n) const = 0;
41  virtual EndFieldModel* clone() const = 0;
42 };
43 
44 std::vector< std::vector<int> > CompactVector
45  (std::vector< std::vector<int> > vec);
46 
48 bool GreaterThan(std::vector<int> v1, std::vector<int> v2);
49 
66 template <class TEMP_ITER>
67 bool IterableEquality(TEMP_ITER a_begin, TEMP_ITER a_end,
68  TEMP_ITER b_begin, TEMP_ITER b_end);
69 
86 template <class TEMP_ITER>
87 bool IterableEquality(TEMP_ITER a_begin, TEMP_ITER a_end,
88  TEMP_ITER b_begin, TEMP_ITER b_end);
89 
90 template <class TEMP_CLASS>
91 bool IterableEquality(const TEMP_CLASS& a, const TEMP_CLASS& b) {
92  return IterableEquality(a.begin(), a.end(), b.begin(), b.end());
93 }
94 
95 template <class TEMP_ITER>
96 bool IterableEquality(TEMP_ITER a_begin, TEMP_ITER a_end, TEMP_ITER b_begin,
97  TEMP_ITER b_end) {
98  TEMP_ITER a_it = a_begin;
99  TEMP_ITER b_it = b_begin;
100  while (a_it != a_end && b_it != b_end) {
101  if (*a_it != *b_it) return false;
102  ++a_it;
103  ++b_it;
104  }
105  if ( a_it != a_end || b_it != b_end ) return false;
106  return true;
107 }
108 
109 }
110 
111 #endif
112 
std::complex< double > a
std::vector< std::vector< int > > CompactVector(std::vector< std::vector< int > > vec)
bool IterableEquality(TEMP_ITER a_begin, TEMP_ITER a_end, TEMP_ITER b_begin, TEMP_ITER b_end)
Definition: EndFieldModel.h:96
bool GreaterThan(std::vector< int > v1, std::vector< int > v2)
CompactVector helper function, used for sorting.
virtual EndFieldModel * clone() const =0
virtual std::ostream & print(std::ostream &out) const =0
Definition: Vec.h:22