source: XIOS/dev/XIOS_DEV_CMIP6/src/buffer_impl.hpp @ 1566

Last change on this file since 1566 was 501, checked in by ymipsl, 9 years ago

Add licence copyright to all file ond directory src using the command :
svn propset -R copyright -F header_licence src

XIOS is now officialy under CeCILL licence

YM

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 8.0 KB
Line 
1#ifndef __BUFFER_IMPL_HPP__
2#define __BUFFER_IMPL_HPP__
3
4namespace xios
5{
6
7// template spectialisation : CBuffer::put
8    template <> bool CBuffer::put<char>(const char& data) { return put_template(data) ; } 
9    template <> bool CBuffer::put<int>(const int& data)   { return put_template(data) ; }
10    template <> bool CBuffer::put<short>(const short& data) { return put_template(data) ; } 
11    template <> bool CBuffer::put<long>(const long& data)  { return put_template(data) ; } 
12    template <> bool CBuffer::put<uint>(const uint& data)  { return put_template(data) ; } 
13    template <> bool CBuffer::put<ushort>(const ushort& data) { return put_template(data) ; } 
14    template <> bool CBuffer::put<ulong>(const ulong& data) { return put_template(data) ; } 
15    template <> bool CBuffer::put<float>(const float& data) { return put_template(data) ; } 
16    template <> bool CBuffer::put<double>(const double& data) { return put_template(data) ; } 
17    template <> bool CBuffer::put<long double>(const long double& data) { return put_template(data) ;} 
18
19    template <> bool CBuffer::put<char>(const char* data, size_t n) { return put_template(data,n) ; } 
20    template <> bool CBuffer::put<int>(const int* data, size_t n)   { return put_template(data,n) ; }
21    template <> bool CBuffer::put<short>(const short* data, size_t n) { return put_template(data,n) ; } 
22    template <> bool CBuffer::put<long>(const long* data, size_t n)  { return put_template(data,n) ; } 
23    template <> bool CBuffer::put<uint>(const uint* data, size_t n)  { return put_template(data,n) ; } 
24    template <> bool CBuffer::put<ushort>(const ushort* data, size_t n) { return put_template(data,n) ; } 
25    template <> bool CBuffer::put<ulong>(const ulong* data, size_t n) { return put_template(data,n) ; } 
26    template <> bool CBuffer::put<float>(const float* data, size_t n) { return put_template(data,n) ; } 
27    template <> bool CBuffer::put<double>(const double* data, size_t n) { return put_template(data,n) ; } 
28    template <> bool CBuffer::put<long double>(const long double* data, size_t n) { return put_template(data,n) ;} 
29
30
31    template <> bool CBuffer::put_ptr<char>(const char*& data, size_t n) { return put_ptr_template(data,n) ; } 
32    template <> bool CBuffer::put_ptr<int>(const int*& data, size_t n)   { return put_ptr_template(data,n) ; }
33    template <> bool CBuffer::put_ptr<short>(const short*& data, size_t n) { return put_ptr_template(data,n) ; } 
34    template <> bool CBuffer::put_ptr<long>(const long*& data, size_t n)  { return put_ptr_template(data,n) ; } 
35    template <> bool CBuffer::put_ptr<uint>(const uint*& data, size_t n)  { return put_ptr_template(data,n) ; } 
36    template <> bool CBuffer::put_ptr<ushort>(const ushort*& data, size_t n) { return put_ptr_template(data,n) ; } 
37    template <> bool CBuffer::put_ptr<ulong>(const ulong*& data, size_t n) { return put_ptr_template(data,n) ; } 
38    template <> bool CBuffer::put_ptr<float>(const float*& data, size_t n) { return put_ptr_template(data,n) ; } 
39    template <> bool CBuffer::put_ptr<double>(const double*& data, size_t n) { return put_ptr_template(data,n) ; } 
40    template <> bool CBuffer::put_ptr<long double>(const long double*& data, size_t n) { return put_ptr_template(data,n) ;} 
41
42
43// template spectialisation : CBuffer::get
44    template <> bool CBuffer::get<char>(char& data) { return get_template(data) ; } 
45    template <> bool CBuffer::get<int>(int& data)   { return get_template(data) ; }
46    template <> bool CBuffer::get<short>(short& data) { return get_template(data) ; } 
47    template <> bool CBuffer::get<long>(long& data)  { return get_template(data) ; } 
48    template <> bool CBuffer::get<uint>(uint& data)  { return get_template(data) ; } 
49    template <> bool CBuffer::get<ushort>(ushort& data) { return get_template(data) ; } 
50    template <> bool CBuffer::get<ulong>(ulong& data) { return get_template(data) ; } 
51    template <> bool CBuffer::get<float>(float& data) { return get_template(data) ; } 
52    template <> bool CBuffer::get<double>(double& data) { return get_template(data) ; } 
53    template <> bool CBuffer::get<long double>(long double& data) { return get_template(data) ;} 
54
55    template <> bool CBuffer::get<char>(char* data, size_t n) { return get_template(data,n) ; } 
56    template <> bool CBuffer::get<int>(int* data, size_t n)   { return get_template(data,n) ; }
57    template <> bool CBuffer::get<short>(short* data, size_t n) { return get_template(data,n) ; } 
58    template <> bool CBuffer::get<long>(long* data, size_t n)  { return get_template(data,n) ; } 
59    template <> bool CBuffer::get<uint>(uint* data, size_t n)  { return get_template(data,n) ; } 
60    template <> bool CBuffer::get<ushort>(ushort* data, size_t n) { return get_template(data,n) ; } 
61    template <> bool CBuffer::get<ulong>(ulong* data, size_t n) { return get_template(data,n) ; } 
62    template <> bool CBuffer::get<float>(float* data, size_t n) { return get_template(data,n) ; } 
63    template <> bool CBuffer::get<double>(double* data, size_t n) { return get_template(data,n) ; } 
64    template <> bool CBuffer::get<long double>(long double* data, size_t n) { return get_template(data,n) ;} 
65
66    template <> bool CBuffer::get_ptr<char>(char*& data, size_t n) { return get_ptr_template(data,n) ; } 
67    template <> bool CBuffer::get_ptr<int>(int*& data, size_t n)   { return get_ptr_template(data,n) ; }
68    template <> bool CBuffer::get_ptr<short>(short*& data, size_t n) { return get_ptr_template(data,n) ; } 
69    template <> bool CBuffer::get_ptr<long>(long*& data, size_t n)  { return get_ptr_template(data,n) ; } 
70    template <> bool CBuffer::get_ptr<uint>(uint*& data, size_t n)  { return get_ptr_template(data,n) ; } 
71    template <> bool CBuffer::get_ptr<ushort>(ushort*& data, size_t n) { return get_ptr_template(data,n) ; } 
72    template <> bool CBuffer::get_ptr<ulong>(ulong*& data, size_t n) { return get_ptr_template(data,n) ; } 
73    template <> bool CBuffer::get_ptr<float>(float*& data, size_t n) { return get_ptr_template(data,n) ; } 
74    template <> bool CBuffer::get_ptr<double>(double*& data, size_t n) { return get_ptr_template(data,n) ; } 
75    template <> bool CBuffer::get_ptr<long double>(long double*& data, size_t n) { return get_ptr_template(data,n) ;} 
76   
77   
78    template <class T>
79    bool CBuffer::put_template(const T& data)
80    {
81      return put_template<T>(&data,1);
82    }
83   
84    template <class T>
85    bool CBuffer::put_template(const T* data, size_t n)
86    {
87      bool ret;
88      char* dataBuff ;
89 
90      size_t dataSize=sizeof(T)*n ;
91 
92      if (count+dataSize<=size)
93      {
94        dataBuff=(char*) data ;
95        for(size_t i=0;i<dataSize;i++) write[i]=dataBuff[i] ;
96        write+=dataSize ;
97        count+=dataSize;
98        ret=true ;
99      }
100      else ret=false ;
101 
102      return ret ;
103    }
104
105    template <class T>
106    bool CBuffer::put_ptr_template(const T*& data, size_t n)
107    {
108      bool ret;
109      char* dataBuff ;
110 
111      size_t dataSize=sizeof(T)*n ;
112 
113      if (count+dataSize<=size)
114      {
115        data=(T*) write ;
116        write+=dataSize ;
117        count+=dataSize;
118        ret=true ;
119      }
120      else ret=false ;
121 
122      return ret ;
123    }
124
125
126    template <class T>
127    bool CBuffer::get_template(T& data)
128    {
129      return get_template<T>(&data,1) ;
130     
131    }
132       
133    template <class T>
134    bool CBuffer::get_template(T* data, size_t n)
135    {
136      bool ret;
137      char* dataBuff ;
138 
139      size_t dataSize=sizeof(T)*n ;
140 
141      if (read+dataSize<=buffer+size)
142      {
143        dataBuff=(char*) data ;
144        for(size_t i=0;i<dataSize;i++) dataBuff[i]=read[i] ;
145        read+=dataSize ;
146        ret=true ;
147      }
148      else ret=false ;
149 
150      return ret ;
151    }
152
153    template <class T>
154    bool CBuffer::get_ptr_template(T*& data, size_t n)
155    {
156      bool ret;
157      char* dataBuff ;
158 
159      size_t dataSize=sizeof(T)*n ;
160 
161      if (read+dataSize<=buffer+size)
162      {
163        data=(T*) read ;
164        read+=dataSize ;
165        ret=true ;
166      }
167      else ret=false ;
168 
169      return ret ;
170    }   
171
172}
173 
174
175#endif
Note: See TracBrowser for help on using the repository browser.