source: ThirdParty/mpqc_open/src/lib/util/state/translate.cc@ 398fcd

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_levmar Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since 398fcd was 860145, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '0b990dfaa8c6007a996d030163a25f7f5fc8a7e7' as 'ThirdParty/mpqc_open'

  • Property mode set to 100644
File size: 13.0 KB
Line 
1
2// translate.cc
3//
4// Copyright (C) 1997 Limit Point Systems, Inc.
5//
6// Author: Curtis Janssen <cljanss@limitpt.com>
7// Maintainer: LPS
8//
9// This file is part of the SC Toolkit.
10//
11// The SC Toolkit is free software; you can redistribute it and/or modify
12// it under the terms of the GNU Library General Public License as published by
13// the Free Software Foundation; either version 2, or (at your option)
14// any later version.
15//
16// The SC Toolkit 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 Library General Public License for more details.
20//
21// You should have received a copy of the GNU Library General Public License
22// along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24//
25// The U.S. Government is granted a limited license as per AL 91-7.
26//
27
28#include <util/state/state.h>
29#include <util/state/translate.h>
30#include <util/state/stateio.h>
31
32using namespace sc;
33
34////////////////////////////////////////////////////////////////////////
35
36static inline void
37swap(char *d, int c1, int c2)
38{
39 char tmp = d[c1];
40 d[c1] = d[c2];
41 d[c2] = tmp;
42}
43
44static inline void
45swap(char *d, const char *e, int c1, int c2)
46{
47 d[c1] = e[c2];
48 d[c2] = e[c1];
49}
50
51static inline void
52byte_swap2(char*d)
53{
54 swap(d,0,1);
55}
56
57static inline void
58byte_swap2(char*d, const char *e)
59{
60 swap(d,e,0,1);
61}
62
63static inline void
64byte_swap4(char*d)
65{
66 swap(d,0,3);
67 swap(d,1,2);
68}
69
70static inline void
71byte_swap4(char*d, const char *e)
72{
73 swap(d,e,0,3);
74 swap(d,e,1,2);
75}
76
77static inline void
78byte_swap8(char*d)
79{
80 swap(d,0,7);
81 swap(d,1,6);
82 swap(d,2,5);
83 swap(d,3,4);
84}
85
86static inline void
87byte_swap8(char*d, const char *e)
88{
89 swap(d,e,0,7);
90 swap(d,e,1,6);
91 swap(d,e,2,5);
92 swap(d,e,3,4);
93}
94
95static inline void
96byte_swap16(char*d)
97{
98 swap(d,0,15);
99 swap(d,1,14);
100 swap(d,2,13);
101 swap(d,3,12);
102 swap(d,4,11);
103 swap(d,5,10);
104 swap(d,6, 9);
105 swap(d,7, 8);
106}
107
108static inline void
109byte_swap16(char*d, const char *e)
110{
111 swap(d,e,0,15);
112 swap(d,e,1,14);
113 swap(d,e,2,13);
114 swap(d,e,3,12);
115 swap(d,e,4,11);
116 swap(d,e,5,10);
117 swap(d,e,6, 9);
118 swap(d,e,7, 8);
119}
120
121static inline void
122byte_swap2(void*data,int n)
123{
124 char *d = (char*)data;
125 for (int i=0; i<n; i++) byte_swap2(&d[i<<1]);
126}
127
128static inline void
129byte_swap2(void*data,const void*edata,int n)
130{
131 char *d = (char*)data;
132 char *e = (char*)edata;
133 for (int i=0; i<n; i++) byte_swap2(&d[i<<1],&e[i<<1]);
134}
135
136static inline void
137byte_swap4(void*data,int n)
138{
139 char *d = (char*)data;
140 for (int i=0; i<n; i++) byte_swap4(&d[i<<2]);
141}
142
143static inline void
144byte_swap4(void*data,const void*edata,int n)
145{
146 char *d = (char*)data;
147 char *e = (char*)edata;
148 for (int i=0; i<n; i++) byte_swap4(&d[i<<2],&e[i<<2]);
149}
150
151static inline void
152byte_swap8(void*data,int n)
153{
154 char *d = (char*)data;
155 for (int i=0; i<n; i++) byte_swap8(&d[i<<3]);
156}
157
158static inline void
159byte_swap8(void*data,const void*edata,int n)
160{
161 char *d = (char*)data;
162 char *e = (char*)edata;
163 for (int i=0; i<n; i++) byte_swap8(&d[i<<3],&e[i<<3]);
164}
165
166static inline void
167byte_swap16(void*data,int n)
168{
169 char *d = (char*)data;
170 for (int i=0; i<n; i++) byte_swap16(&d[i<<4]);
171}
172
173static inline void
174byte_swap16(void*data,const void*edata,int n)
175{
176 char *d = (char*)data;
177 char *e = (char*)edata;
178 for (int i=0; i<n; i++) byte_swap16(&d[i<<4],&e[i<<4]);
179}
180
181#define BST(T) \
182static inline void byte_swap(T*d,int n) \
183{ \
184 if (sizeof(T) == 2) byte_swap2(d,n); \
185 else if (sizeof(T) == 4) byte_swap4(d,n); \
186 else if (sizeof(T) == 8) byte_swap8(d,n); \
187 else if (sizeof(T) == 16) byte_swap16(d,n); \
188}
189
190#define BSTV(T) \
191static inline void byte_swap(T*d,const void*e,int n) \
192{ \
193 if (sizeof(T) == 2) byte_swap2(d,e,n); \
194 else if (sizeof(T) == 4) byte_swap4(d,e,n); \
195 else if (sizeof(T) == 8) byte_swap8(d,e,n); \
196 else if (sizeof(T) == 16) byte_swap16(d,e,n); \
197}
198
199#define BSVT(T) \
200static inline void byte_swap(void*d,const T*e,int n) \
201{ \
202 if (sizeof(T) == 2) byte_swap2(d,e,n); \
203 else if (sizeof(T) == 4) byte_swap4(d,e,n); \
204 else if (sizeof(T) == 8) byte_swap8(d,e,n); \
205 else if (sizeof(T) == 16) byte_swap16(d,e,n); \
206}
207
208BSVT(short);
209BSVT(unsigned int);
210BSVT(int);
211BSVT(long);
212BSVT(float);
213BSVT(double);
214
215BSTV(short);
216BSTV(unsigned int);
217BSTV(int);
218BSTV(long);
219BSTV(float);
220BSTV(double);
221
222BST(short);
223BST(unsigned int);
224BST(int);
225BST(long);
226BST(float);
227BST(double);
228
229////////////////////////////////////////////////////////////////////////
230
231TranslateData::TranslateData() {}
232TranslateData::~TranslateData() {}
233
234char
235TranslateData::format_code()
236{
237#if BIGENDIAN
238 return 'b';
239#else
240 return 'l';
241#endif
242}
243
244TranslateData *
245TranslateData::vctor(char code)
246{
247 if (code == 'b') return new TranslateDataBigEndian;
248 if (code == 'l') return new TranslateDataLittleEndian;
249 return 0;
250}
251
252void TranslateData::to_native (char *, int n) {}
253void TranslateData::to_external(char *, int n) {}
254void TranslateData::to_native (short *, int n) {}
255void TranslateData::to_external(short *, int n) {}
256void TranslateData::to_native (unsigned int *, int n) {}
257void TranslateData::to_external(unsigned int *, int n) {}
258void TranslateData::to_native (int *, int n) {}
259void TranslateData::to_external(int *, int n) {}
260void TranslateData::to_native (long *, int n) {}
261void TranslateData::to_external(long *, int n) {}
262void TranslateData::to_native (float *, int n) {}
263void TranslateData::to_external(float *, int n) {}
264void TranslateData::to_native (double *, int n) {}
265void TranslateData::to_external(double *, int n) {}
266void TranslateData::to_native (char *d, const void *s, int n)
267{ memcpy(d,s,n); }
268void TranslateData::to_external(void *d, const char *s, int n)
269{ memcpy(d,s,n); }
270void TranslateData::to_native (short *d, const void *s, int n)
271{ memcpy(d,s,n*sizeof(short)); }
272void TranslateData::to_external(void *d, const short *s, int n)
273{ memcpy(d,s,n*sizeof(short)); }
274void TranslateData::to_native (unsigned int *d, const void *s, int n)
275{ memcpy(d,s,n*sizeof(unsigned int)); }
276void TranslateData::to_external(void *d, const unsigned int *s, int n)
277{ memcpy(d,s,n*sizeof(unsigned int)); }
278void TranslateData::to_native (int *d, const void *s, int n)
279{ memcpy(d,s,n*sizeof(int)); }
280void TranslateData::to_external(void *d, const int *s, int n)
281{ memcpy(d,s,n*sizeof(int)); }
282void TranslateData::to_native (long *d, const void *s, int n)
283{ memcpy(d,s,n*sizeof(long)); }
284void TranslateData::to_external(void *d, const long *s, int n)
285{ memcpy(d,s,n*sizeof(long)); }
286void TranslateData::to_native (float *d, const void *s, int n)
287{ memcpy(d,s,n*sizeof(float)); }
288void TranslateData::to_external(void *d, const float *s, int n)
289{ memcpy(d,s,n*sizeof(float)); }
290void TranslateData::to_native (double *d, const void *s, int n)
291{ memcpy(d,s,n*sizeof(double)); }
292void TranslateData::to_external(void *d, const double *s, int n)
293{ memcpy(d,s,n*sizeof(double)); }
294
295////////////////////////////////////////////////////////////////////////
296
297TranslateDataByteSwap::TranslateDataByteSwap() {}
298TranslateDataByteSwap::~TranslateDataByteSwap() {}
299
300char
301TranslateDataByteSwap::format_code()
302{
303#if BIGENDIAN
304 return 'l';
305#else
306 return 'b';
307#endif
308}
309
310void TranslateDataByteSwap::to_native (char *d, int n) {}
311void TranslateDataByteSwap::to_external(char *d, int n) {}
312void TranslateDataByteSwap::to_native (short *d, int n) { byte_swap(d,n); }
313void TranslateDataByteSwap::to_external(short *d, int n) { byte_swap(d,n); }
314void TranslateDataByteSwap::to_native (unsigned int *d, int n)
315{ byte_swap(d,n); }
316void TranslateDataByteSwap::to_external(unsigned int *d, int n)
317{ byte_swap(d,n); }
318void TranslateDataByteSwap::to_native (int *d, int n) { byte_swap(d,n); }
319void TranslateDataByteSwap::to_external(int *d, int n) { byte_swap(d,n); }
320void TranslateDataByteSwap::to_native (long *d, int n) { byte_swap(d,n); }
321void TranslateDataByteSwap::to_external(long *d, int n) { byte_swap(d,n); }
322void TranslateDataByteSwap::to_native (float *d, int n) { byte_swap(d,n); }
323void TranslateDataByteSwap::to_external(float *d, int n) { byte_swap(d,n); }
324void TranslateDataByteSwap::to_native (double *d, int n) { byte_swap(d,n); }
325void TranslateDataByteSwap::to_external(double *d, int n) { byte_swap(d,n); }
326void TranslateDataByteSwap::to_native (char *d, const void *s, int n)
327{ memcpy(d,s,n); }
328void TranslateDataByteSwap::to_external(void *d, const char *s, int n)
329{ memcpy(d,s,n); }
330void TranslateDataByteSwap::to_native (short *d, const void *s, int n)
331{ byte_swap(d,s,n); }
332void TranslateDataByteSwap::to_external(void *d, const short *s, int n)
333{ byte_swap(d,s,n); }
334void TranslateDataByteSwap::to_native (unsigned int *d, const void *s, int n)
335{ byte_swap(d,s,n); }
336void TranslateDataByteSwap::to_external(void *d, const unsigned int *s, int n)
337{ byte_swap(d,s,n); }
338void TranslateDataByteSwap::to_native (int *d, const void *s, int n)
339{ byte_swap(d,s,n); }
340void TranslateDataByteSwap::to_external(void *d, const int *s, int n)
341{ byte_swap(d,s,n); }
342void TranslateDataByteSwap::to_native (long *d, const void *s, int n)
343{ byte_swap(d,s,n); }
344void TranslateDataByteSwap::to_external(void *d, const long *s, int n)
345{ byte_swap(d,s,n); }
346void TranslateDataByteSwap::to_native (float *d, const void *s, int n)
347{ byte_swap(d,s,n); }
348void TranslateDataByteSwap::to_external(void *d, const float *s, int n)
349{ byte_swap(d,s,n); }
350void TranslateDataByteSwap::to_native (double *d, const void *s, int n)
351{ byte_swap(d,s,n); }
352void TranslateDataByteSwap::to_external(void *d, const double *s, int n)
353{ byte_swap(d,s,n); }
354
355////////////////////////////////////////////////////////////////////////
356
357TranslateDataOut::TranslateDataOut(StateOut*so, TranslateData*t):
358 so_(so),
359 translate_(t)
360{
361}
362
363TranslateDataOut::~TranslateDataOut()
364{
365 delete translate_;
366}
367
368inline int
369TranslateDataOut::putv(const void*d,int s)
370{
371 return so_->put_array_void(d,s);
372}
373
374int
375TranslateDataOut::put(const char*d,int s)
376{
377 const int bsize = bufsize;
378 int o=0,r=0;
379 while (s) {
380 int l = (s>bsize?bsize:s);
381 translate_->to_external(buf_,&d[o],l);
382 r += putv(buf_,l);
383 s-=l;
384 o+=l;
385 }
386 return r;
387}
388
389int
390TranslateDataOut::put(const short*d,int s)
391{
392 const int bsize = bufsize/sizeof(*d);
393 int o=0,r=0;
394 while (s) {
395 int l = (s>bsize?bsize:s);
396 translate_->to_external(buf_,&d[o],l);
397 r += putv(buf_,l*sizeof(*d));
398 s-=l;
399 o+=l;
400 }
401 return r;
402}
403
404int
405TranslateDataOut::put(const unsigned int*d,int s)
406{
407 const int bsize = bufsize/sizeof(*d);
408 int o=0,r=0;
409 while (s) {
410 int l = (s>bsize?bsize:s);
411 translate_->to_external(buf_,&d[o],l);
412 r += putv(buf_,l*sizeof(*d));
413 s-=l;
414 o+=l;
415 }
416 return r;
417}
418
419int
420TranslateDataOut::put(const int*d,int s)
421{
422 const int bsize = bufsize/sizeof(*d);
423 int o=0,r=0;
424 while (s) {
425 int l = (s>bsize?bsize:s);
426 translate_->to_external(buf_,&d[o],l);
427 r += putv(buf_,l*sizeof(*d));
428 s-=l;
429 o+=l;
430 }
431 return r;
432}
433
434int
435TranslateDataOut::put(const long*d,int s)
436{
437 const int bsize = bufsize/sizeof(*d);
438 int o=0,r=0;
439 while (s) {
440 int l = (s>bsize?bsize:s);
441 translate_->to_external(buf_,&d[o],l);
442 r += putv(buf_,l*sizeof(*d));
443 s-=l;
444 o+=l;
445 }
446 return r;
447}
448
449int
450TranslateDataOut::put(const float*d,int s)
451{
452 const int bsize = bufsize/sizeof(*d);
453 int o=0,r=0;
454 while (s) {
455 int l = (s>bsize?bsize:s);
456 translate_->to_external(buf_,&d[o],l);
457 r += putv(buf_,l*sizeof(*d));
458 s-=l;
459 o+=l;
460 }
461 return r;
462}
463
464int
465TranslateDataOut::put(const double*d,int s)
466{
467 const int bsize = bufsize/sizeof(*d);
468 int o=0,r=0;
469 while (s) {
470 int l = (s>bsize?bsize:s);
471 translate_->to_external(buf_,&d[o],l);
472 r += putv(buf_,l*sizeof(*d));
473 s-=l;
474 o+=l;
475 }
476 return r;
477}
478
479////////////////////////////////////////////////////////////////////////
480
481TranslateDataIn::TranslateDataIn(StateIn*si,TranslateData *t):
482 si_(si),
483 translate_(t)
484{
485}
486
487TranslateDataIn::~TranslateDataIn()
488{
489 delete translate_;
490}
491
492inline int
493TranslateDataIn::getv(void*d,int s)
494{
495 return si_->get_array_void(d,s);
496}
497
498int
499TranslateDataIn::get(char*d,int s)
500{
501 int r = getv(d,s);
502 translate_->to_native(d,s);
503 return r;
504}
505
506int
507TranslateDataIn::get(short*d,int s)
508{
509 int r = getv(d,s*sizeof(short));
510 translate_->to_native(d,s);
511 return r;
512}
513
514int
515TranslateDataIn::get(unsigned int*d,int s)
516{
517 int r = getv(d,s*sizeof(unsigned int));
518 translate_->to_native(d,s);
519 return r;
520}
521
522int
523TranslateDataIn::get(int*d,int s)
524{
525 int r = getv(d,s*sizeof(int));
526 translate_->to_native(d,s);
527 return r;
528}
529
530int
531TranslateDataIn::get(long*d,int s)
532{
533 int r = getv(d,s*sizeof(long));
534 translate_->to_native(d,s);
535 return r;
536}
537
538int
539TranslateDataIn::get(float*d,int s)
540{
541 int r = getv(d,s*sizeof(float));
542 translate_->to_native(d,s);
543 return r;
544}
545
546int
547TranslateDataIn::get(double*d,int s)
548{
549 int r = getv(d,s*sizeof(double));
550 translate_->to_native(d,s);
551 return r;
552}
553
554////////////////////////////////////////////////////////////////////////
555
556// Local Variables:
557// mode: c++
558// c-file-style: "CLJ"
559// End:
Note: See TracBrowser for help on using the repository browser.