source: Sophya/trunk/SophyaProg/Examples/MyPPF/vfs.cc@ 4060

Last change on this file since 4060 was 3420, checked in by ansari, 18 years ago

Ajout du repetoire MyPPF (exemple de handler PPersist) dans le module Example - Reza 07/12/2007

File size: 2.6 KB
Line 
1#include "vfs.h"
2#include "pexceptions.h"
3#include "fiondblock.h" // To use NDataBlock PPF services
4
5/* Vfs class constructor */
6Vfs::Vfs(int sz)
7 : mFVal(sz)
8{
9 for(int k=0; k<sz; k++)
10 mSVal.push_back("");
11}
12
13void Vfs::Set(int k, r_4 fv, string const sv)
14{
15 if ((k < 0) || (k>= (int)mFVal.Size()))
16 throw SOPHYA::RangeCheckError("Vfs::Set() Out of range index!");
17 mFVal(k) = fv;
18 mSVal[k] = sv;
19}
20
21r_4 Vfs::GetF(int k)
22{
23 if ((k < 0) || (k>= (int)mFVal.Size()))
24 throw SOPHYA::RangeCheckError("Vfs::GetF() Out of range index!");
25 return mFVal(k);
26}
27
28string Vfs::GetS(int k)
29{
30 if ((k < 0) || (k>= (int)mFVal.Size()))
31 throw SOPHYA::RangeCheckError("Vfs::GetS() Out of range index!");
32 return mSVal[k];
33}
34
35void Vfs::Print(ostream& os) const
36{
37 os << "Vfs::Print() - Size= " << mFVal.Size() << endl;
38 for(int k=0; k<(int)mFVal.Size(); k++)
39 os << "K=" << k << " FVal= " << mFVal(k) << " SVal=" << mSVal[k] << endl;
40 os << endl;
41}
42
43//-----------------------------------------------------------------------
44// The PPF handler : ObjFileIO<T> is in namespace SOPHYA ,
45// We declare ObjFileIO<Vfs> in the SOPHYA namespace ...
46// Only, the WriteSelf() and ReadSelf() methods have to be provided
47//-----------------------------------------------------------------------
48
49namespace SOPHYA {
50
51DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
52void ObjFileIO<Vfs>::WriteSelf(POutPersist& s) const
53{
54// On ecrit 2 uint_4 ....
55// 0: Numero de version, 2 : reserve
56 uint_4 itab[2];
57 itab[0] = 1; // Numero de version a 1
58 itab[1] = 0; // Reserved for future use
59 s.Put(itab, 2);
60 s << dobj->mFVal; // We write the float data block
61// We write now the string vector , as a series of strings
62 for(int k=0; k<(int)dobj->mFVal.Size(); k++)
63 s.PutStr(dobj->mSVal[k]);
64}
65
66DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
67void ObjFileIO<Vfs>::ReadSelf(PInPersist& s)
68{
69// We read in the same order as the write
70 // First the two integer containing the version numer
71 uint_4 itab[2];
72 s.Get(itab, 2);
73// next, we read in the float data vector
74 s >> dobj->mFVal;
75// We resest the vector<string> dobj->mSVal
76 dobj->mSVal.clear();
77// We read in the mFVal.Size() and keep them in dobj->mSVal
78 string buff;
79 for(int k=0; k<(int)dobj->mFVal.Size(); k++) {
80 s.GetStr(buff);
81 dobj->mSVal.push_back(buff);
82 }
83}
84
85// We force the instanciation of the template class ObjFileIO<Vfs>
86#ifdef __CXX_PRAGMA_TEMPLATES__
87#pragma define_template ObjFileIO<Vfs>
88#endif
89
90#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
91template class ObjFileIO<Vfs>;
92#endif
93
94} // End of namespace SOPHYA
95
Note: See TracBrowser for help on using the repository browser.