BrookIntStreamImpl.cpp 6.07 KB
Newer Older
Mark Friedrichs's avatar
Mark Friedrichs committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* -------------------------------------------------------------------------- *
 *                                   OpenMM                                   *
 * -------------------------------------------------------------------------- *
 * This is part of the OpenMM molecular simulation toolkit originating from   *
 * Simbios, the NIH National Center for Physics-Based Simulation of           *
 * Biological Structures at Stanford, funded under the NIH Roadmap for        *
 * Medical Research, grant U54 GM072970. See https://simtk.org.               *
 *                                                                            *
 * Portions copyright (c) 2008 Stanford University and the Authors.           *
 * Authors: Peter Eastman, Mark Friedrichs                                    *
 * Contributors:                                                              *
 *                                                                            *
 * Permission is hereby granted, free of charge, to any person obtaining a    *
 * copy of this software and associated documentation files (the "Software"), *
 * to deal in the Software without restriction, including without limitation  *
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,   *
 * and/or sell copies of the Software, and to permit persons to whom the      *
 * Software is furnished to do so, subject to the following conditions:       *
 *                                                                            *
 * The above copyright notice and this permission notice shall be included in *
 * all copies or substantial portions of the Software.                        *
 *                                                                            *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   *
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    *
 * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,    *
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR      *
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE  *
 * USE OR OTHER DEALINGS IN THE SOFTWARE.                                     *
 * -------------------------------------------------------------------------- */

#include "BrookIntStreamImpl.h"
33
34
#include "OpenMMException.h"
#include <sstream>
Mark Friedrichs's avatar
Mark Friedrichs committed
35
36
37

using namespace OpenMM;

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/** 
 * BrookIntStreamImpl constructor
 * 
 * @param name                      stream name
 * @param size                      stream size
 * @param platform                  platform
 *
 */

BrookIntStreamImpl::BrookIntStreamImpl( std::string name, int size, Stream::DataType type, const Platform& platform ) : StreamImpl( name, size, type, platform ){

// ---------------------------------------------------------------------------------------

   static const std::string methodName      = "BrookIntStreamImpl::BrookIntStreamImpl";
   // static const int debug                   = 1;

// ---------------------------------------------------------------------------------------

   switch( type ){

      case Stream::Integer:
          width = 1;
          break;

      case Stream::Integer2:
          width = 2;
          break;

      case Stream::Integer3:
          width = 3;
          break;

      case Stream::Integer4:
          width = 4;
          break;

      default:
         std::stringstream message;
         message << methodName << " type=" << type << " not recognized.";
         throw OpenMMException( message.str() );
   }

   data = new int*[size];

   for( int ii = 0; ii < size; ii++ ){
       data[ii] = new int[width];
   }
Mark Friedrichs's avatar
Mark Friedrichs committed
85
86
}

87
88
89
90
91
/** 
 * BrookIntStreamImpl destructor
 * 
 */

Mark Friedrichs's avatar
Mark Friedrichs committed
92
BrookIntStreamImpl::~BrookIntStreamImpl() {
93
   delete[] data;
Mark Friedrichs's avatar
Mark Friedrichs committed
94
95
}

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/** 
 * Load data from array into stream
 * 
 * @param array                     array to load (length=size*width)
 *
 */

void BrookIntStreamImpl::loadFromArray( const void* array ){

// ---------------------------------------------------------------------------------------

   // static const std::string methodName      = "BrookIntStreamImpl::loadFromArray";
   // static const int debug                   = 1;

// ---------------------------------------------------------------------------------------

   int* arrayData = (int*) array;
   int index      = 0;
   for( int ii = 0; ii < getSize(); ii++ ){
      for( int jj = 0; jj < width; jj++ ){
         data[ii][jj] = arrayData[index++];
      }
   }
Mark Friedrichs's avatar
Mark Friedrichs committed
119
120
}

121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/** 
 * Save data from stream to array 
 * 
 * @param array                     array to save data to (length=size*width)
 *
 */

void BrookIntStreamImpl::saveToArray( void* array ){

// ---------------------------------------------------------------------------------------

   // static const std::string methodName      = "BrookIntStreamImpl::saveToArray";
   // static const int debug                   = 1;

// ---------------------------------------------------------------------------------------

   int* arrayData = (int*) array;
   int index      = 0;
   for( int ii = 0; ii < getSize(); ii++ ){
      for( int jj = 0; jj < width; jj++ ){
         arrayData[index++] = data[ii][jj];
      }
   }
Mark Friedrichs's avatar
Mark Friedrichs committed
144
145
}

146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/** 
 * Set all stream entries to input value
 * 
 * @param value                     value to load into stream
 *
 */

void BrookIntStreamImpl::fillWithValue( void* value ){

// ---------------------------------------------------------------------------------------

   // static const std::string methodName      = "BrookIntStreamImpl::fillWithValue";
   // static const int debug                   = 1;

// ---------------------------------------------------------------------------------------

   int valueData = *((int*) value);
   for( int ii = 0; ii < getSize(); ii++ ){
      for (int jj = 0; jj < width; jj++ ){
         data[ii][jj] = valueData;
      }
   }
Mark Friedrichs's avatar
Mark Friedrichs committed
168
169
}

170
171
172
173
174
175
176
177
178
/** 
 * Get data
 * 
 * @return data ptr
 *
 */

const int* const * BrookIntStreamImpl::getData( void ) const {
   return data;
Mark Friedrichs's avatar
Mark Friedrichs committed
179
180
}

181
182
183
184
185
186
187
188
189
/** 
 * Get data
 * 
 * @return data ptr
 *
 */

int** BrookIntStreamImpl::getData( void ){
   return data;
Mark Friedrichs's avatar
Mark Friedrichs committed
190
191
}