source: XMLIO_V2/dev/common/src/buffer_ym_impl.hpp @ 300

Last change on this file since 300 was 300, checked in by ymipsl, 12 years ago

nouvelle version de developpement de xios

  • nouvelle interface fortran
  • recodage complet de la couche de communication
  • et bien d'autres choses...

YM

File size: 8.0 KB
Line 
1#ifndef __BUFFER_YM_IMPL_HPP__
2#define __BUFFER_YM_IMPL_HPP__
3
4namespace xmlioserver
5{
6  namespace ym
7  {
8
9// template spectialisation : CBuffer::put
10    template <> bool CBuffer::put<char>(const char& data) { return put_template(data) ; } 
11    template <> bool CBuffer::put<int>(const int& data)   { return put_template(data) ; }
12    template <> bool CBuffer::put<short>(const short& data) { return put_template(data) ; } 
13    template <> bool CBuffer::put<long>(const long& data)  { return put_template(data) ; } 
14    template <> bool CBuffer::put<uint>(const uint& data)  { return put_template(data) ; } 
15    template <> bool CBuffer::put<ushort>(const ushort& data) { return put_template(data) ; } 
16    template <> bool CBuffer::put<ulong>(const ulong& data) { return put_template(data) ; } 
17    template <> bool CBuffer::put<float>(const float& data) { return put_template(data) ; } 
18    template <> bool CBuffer::put<double>(const double& data) { return put_template(data) ; } 
19    template <> bool CBuffer::put<long double>(const long double& data) { return put_template(data) ;} 
20
21    template <> bool CBuffer::put<char>(const char* data, size_t n) { return put_template(data,n) ; } 
22    template <> bool CBuffer::put<int>(const int* data, size_t n)   { return put_template(data,n) ; }
23    template <> bool CBuffer::put<short>(const short* data, size_t n) { return put_template(data,n) ; } 
24    template <> bool CBuffer::put<long>(const long* data, size_t n)  { return put_template(data,n) ; } 
25    template <> bool CBuffer::put<uint>(const uint* data, size_t n)  { return put_template(data,n) ; } 
26    template <> bool CBuffer::put<ushort>(const ushort* data, size_t n) { return put_template(data,n) ; } 
27    template <> bool CBuffer::put<ulong>(const ulong* data, size_t n) { return put_template(data,n) ; } 
28    template <> bool CBuffer::put<float>(const float* data, size_t n) { return put_template(data,n) ; } 
29    template <> bool CBuffer::put<double>(const double* data, size_t n) { return put_template(data,n) ; } 
30    template <> bool CBuffer::put<long double>(const long double* data, size_t n) { return put_template(data,n) ;} 
31
32
33    template <> bool CBuffer::put_ptr<char>(const char*& data, size_t n) { return put_ptr_template(data,n) ; } 
34    template <> bool CBuffer::put_ptr<int>(const int*& data, size_t n)   { return put_ptr_template(data,n) ; }
35    template <> bool CBuffer::put_ptr<short>(const short*& data, size_t n) { return put_ptr_template(data,n) ; } 
36    template <> bool CBuffer::put_ptr<long>(const long*& data, size_t n)  { return put_ptr_template(data,n) ; } 
37    template <> bool CBuffer::put_ptr<uint>(const uint*& data, size_t n)  { return put_ptr_template(data,n) ; } 
38    template <> bool CBuffer::put_ptr<ushort>(const ushort*& data, size_t n) { return put_ptr_template(data,n) ; } 
39    template <> bool CBuffer::put_ptr<ulong>(const ulong*& data, size_t n) { return put_ptr_template(data,n) ; } 
40    template <> bool CBuffer::put_ptr<float>(const float*& data, size_t n) { return put_ptr_template(data,n) ; } 
41    template <> bool CBuffer::put_ptr<double>(const double*& data, size_t n) { return put_ptr_template(data,n) ; } 
42    template <> bool CBuffer::put_ptr<long double>(const long double*& data, size_t n) { return put_ptr_template(data,n) ;} 
43
44
45// template spectialisation : CBuffer::get
46    template <> bool CBuffer::get<char>(char& data) { return get_template(data) ; } 
47    template <> bool CBuffer::get<int>(int& data)   { return get_template(data) ; }
48    template <> bool CBuffer::get<short>(short& data) { return get_template(data) ; } 
49    template <> bool CBuffer::get<long>(long& data)  { return get_template(data) ; } 
50    template <> bool CBuffer::get<uint>(uint& data)  { return get_template(data) ; } 
51    template <> bool CBuffer::get<ushort>(ushort& data) { return get_template(data) ; } 
52    template <> bool CBuffer::get<ulong>(ulong& data) { return get_template(data) ; } 
53    template <> bool CBuffer::get<float>(float& data) { return get_template(data) ; } 
54    template <> bool CBuffer::get<double>(double& data) { return get_template(data) ; } 
55    template <> bool CBuffer::get<long double>(long double& data) { return get_template(data) ;} 
56
57    template <> bool CBuffer::get<char>(char* data, size_t n) { return get_template(data,n) ; } 
58    template <> bool CBuffer::get<int>(int* data, size_t n)   { return get_template(data,n) ; }
59    template <> bool CBuffer::get<short>(short* data, size_t n) { return get_template(data,n) ; } 
60    template <> bool CBuffer::get<long>(long* data, size_t n)  { return get_template(data,n) ; } 
61    template <> bool CBuffer::get<uint>(uint* data, size_t n)  { return get_template(data,n) ; } 
62    template <> bool CBuffer::get<ushort>(ushort* data, size_t n) { return get_template(data,n) ; } 
63    template <> bool CBuffer::get<ulong>(ulong* data, size_t n) { return get_template(data,n) ; } 
64    template <> bool CBuffer::get<float>(float* data, size_t n) { return get_template(data,n) ; } 
65    template <> bool CBuffer::get<double>(double* data, size_t n) { return get_template(data,n) ; } 
66    template <> bool CBuffer::get<long double>(long double* data, size_t n) { return get_template(data,n) ;} 
67
68    template <> bool CBuffer::get_ptr<char>(char*& data, size_t n) { return get_ptr_template(data,n) ; } 
69    template <> bool CBuffer::get_ptr<int>(int*& data, size_t n)   { return get_ptr_template(data,n) ; }
70    template <> bool CBuffer::get_ptr<short>(short*& data, size_t n) { return get_ptr_template(data,n) ; } 
71    template <> bool CBuffer::get_ptr<long>(long*& data, size_t n)  { return get_ptr_template(data,n) ; } 
72    template <> bool CBuffer::get_ptr<uint>(uint*& data, size_t n)  { return get_ptr_template(data,n) ; } 
73    template <> bool CBuffer::get_ptr<ushort>(ushort*& data, size_t n) { return get_ptr_template(data,n) ; } 
74    template <> bool CBuffer::get_ptr<ulong>(ulong*& data, size_t n) { return get_ptr_template(data,n) ; } 
75    template <> bool CBuffer::get_ptr<float>(float*& data, size_t n) { return get_ptr_template(data,n) ; } 
76    template <> bool CBuffer::get_ptr<double>(double*& data, size_t n) { return get_ptr_template(data,n) ; } 
77    template <> bool CBuffer::get_ptr<long double>(long double*& data, size_t n) { return get_ptr_template(data,n) ;} 
78   
79   
80    template <class T>
81    bool CBuffer::put_template(const T& data)
82    {
83      return put_template<T>(&data,1);
84    }
85   
86    template <class T>
87    bool CBuffer::put_template(const T* data, size_t n)
88    {
89      bool ret;
90      char* dataBuff ;
91 
92      size_t dataSize=sizeof(T)*n ;
93 
94      if (count+dataSize<=size)
95      {
96        dataBuff=(char*) data ;
97        for(size_t i=0;i<dataSize;i++) write[i]=dataBuff[i] ;
98        write+=dataSize ;
99        count+=dataSize;
100        ret=true ;
101      }
102      else ret=false ;
103 
104      return ret ;
105    }
106
107    template <class T>
108    bool CBuffer::put_ptr_template(const T*& data, size_t n)
109    {
110      bool ret;
111      char* dataBuff ;
112 
113      size_t dataSize=sizeof(T)*n ;
114 
115      if (count+dataSize<=size)
116      {
117        data=(T*) write ;
118        write+=dataSize ;
119        count+=dataSize;
120        ret=true ;
121      }
122      else ret=false ;
123 
124      return ret ;
125    }
126
127
128    template <class T>
129    bool CBuffer::get_template(T& data)
130    {
131      return get_template<T>(&data,1) ;
132     
133    }
134       
135    template <class T>
136    bool CBuffer::get_template(T* data, size_t n)
137    {
138      bool ret;
139      char* dataBuff ;
140 
141      size_t dataSize=sizeof(T)*n ;
142 
143      if (read+dataSize<=buffer+size)
144      {
145        dataBuff=(char*) data ;
146        for(size_t i=0;i<dataSize;i++) dataBuff[i]=read[i] ;
147        read+=dataSize ;
148        ret=true ;
149      }
150      else ret=false ;
151 
152      return ret ;
153    }
154
155    template <class T>
156    bool CBuffer::get_ptr_template(T*& data, size_t n)
157    {
158      bool ret;
159      char* dataBuff ;
160 
161      size_t dataSize=sizeof(T)*n ;
162 
163      if (read+dataSize<=buffer+size)
164      {
165        data=(T*) read ;
166        read+=dataSize ;
167        ret=true ;
168      }
169      else ret=false ;
170 
171      return ret ;
172    }   
173
174  }
175}
176 
177
178#endif
Note: See TracBrowser for help on using the repository browser.