Salome HOME
970404c7d47a6194cb2469784e100069dc1d1df1
[modules/kernel.git] / src / HDFPersist / HDFconvert.cc
1 using namespace std;
2 #include "HDFconvert.hxx"
3
4 int HDFConvert::FromAscii(const string& file, const HDFcontainerObject & hdf_container, const string& nomdataset)
5 {
6   
7   HDFdataset   * hdf_dataset;
8   char         * buffer;
9   int          fd;
10   struct stat  status;
11   size_t       length;
12   hdf_size     length_long;
13   
14   // Ouverture du fichier source
15   if ( (fd = open(file.c_str(),O_RDONLY)) <0) { 
16     perror("HDFConvert::FromAscii");
17     return -1;
18   };
19   
20   // Lit l'état du fichier
21   if ( fstat(fd,&status) < 0) {
22     perror("HDFConvert::FromAscii");
23     return -1;
24   };
25   
26   length = status.st_size; //Calcul la taille du fichier en octets
27   length_long = length;
28   
29 #ifdef _POSIX_MAPPED_FILES
30   
31   // Map le fichier en mémoire
32   if ( (buffer = (char *)  mmap(0,length,PROT_READ,MAP_SHARED,fd,0)) == MAP_FAILED ) {
33     perror("HDFConvert::FromAscii");
34     return -1;
35   };
36   
37 #else
38
39   // Sort de la compilation
40 #error Necessite l''utilisation de la primitive mmap
41   
42 #endif
43   
44   // Creation du Dataset utilisateur 
45   hdf_dataset = new HDFdataset::HDFdataset( (char *) nomdataset.c_str(),            /*discard const */
46                                             (HDFcontainerObject*) &hdf_container,   /*discard const, pas de constructeur par référence */
47                                             HDF_STRING,
48                                             &length_long,1);
49   // Cree le Dataset sur le disk
50   hdf_dataset->CreateOnDisk();
51   
52   // Effectue la copie
53   hdf_dataset->WriteOnDisk(buffer);
54   
55   // Ferme le fichier hdf
56   hdf_dataset->CloseOnDisk();
57   
58   // Memory Clean
59   delete hdf_dataset;
60   
61 #ifdef _POSIX_MAPPED_FILES
62   
63   // Desalloue le mapping
64   if (munmap(buffer,length) < 0 ) {
65     perror("HDFConvert::FromAscii");
66     return -1;
67   };
68 #endif
69   
70   // Ferme le fichier ASCII
71   if (close(fd) <0) {
72     perror("HDFConvert::FromAscii");
73     return -1;
74   };
75     
76 };