source: XMLIO_SERVER/trunk/src/XMLIO/mod_file_group.f90 @ 8

Last change on this file since 8 was 8, checked in by ymipsl, 15 years ago

Importation des sources du serveur XMLIO

File size: 5.0 KB
Line 
1MODULE mod_file_group
2  USE mod_file
3  USE mod_xmlio_parameters
4
5  IMPLICIT NONE
6
7  TYPE file_group
8    CHARACTER(LEN=str_len)                    :: id
9    LOGICAL                                   :: has_id
10    TYPE(vector_file_group), POINTER          :: groups
11    TYPE(vector_file),POINTER                 :: files     
12    TYPE(file), POINTER                       :: default_attribut
13  END TYPE file_group
14
15  INCLUDE "vector_file_group_def.inc" 
16
17  TYPE(vector_file_group),POINTER       :: file_group_Ids
18  TYPE(sorted_list),POINTER,PRIVATE     :: Ids 
19
20CONTAINS
21
22  INCLUDE "vector_file_group_contains.inc"
23
24  SUBROUTINE file_group__init
25  IMPLICIT NONE
26   
27    ALLOCATE(file_group_Ids)
28    ALLOCATE(Ids)
29   
30    CALL vector_file_group__new(file_group_Ids)
31    CALL sorted_list__new(Ids)
32   
33  END SUBROUTINE file_group__init
34
35  SUBROUTINE file_group__get(Id,Pt_fg)
36  USE string_function
37  IMPLICIT NONE
38    CHARACTER(LEN=*),INTENT(IN)     :: Id
39    TYPE(file_group),POINTER        :: Pt_fg
40
41    INTEGER                         :: Pos
42    LOGICAL                         :: success
43   
44    CALL sorted_list__find(Ids,hash(Id),Pos,success)
45    IF (success) THEN
46      Pt_fg=>file_group_ids%at(Pos)%Pt
47    ELSE
48      Pt_fg=>NULL()
49    ENDIF
50   
51  END SUBROUTINE file_group__get
52   
53  RECURSIVE SUBROUTINE file_group__new(Pt_fg,Id)
54  USE string_function
55  IMPLICIT NONE
56    TYPE(file_group),POINTER                :: Pt_fg
57    CHARACTER(LEN=*),OPTIONAL,INTENT(IN)     :: Id
58   
59    INTEGER :: Pos
60   
61    ALLOCATE(Pt_fg%groups)
62    ALLOCATE(Pt_fg%files)
63    ALLOCATE(Pt_fg%default_attribut)
64   
65    CALL vector_file_group__new(Pt_fg%groups)
66    CALL vector_file__new(Pt_fg%files)
67    CALL file__new(Pt_fg%default_attribut)
68    Pt_fg%has_id=.FALSE.
69     
70    IF (PRESENT(Id)) THEN
71      Pt_fg%id=TRIM(Id)
72      Pt_fg%has_id=.TRUE.
73      CALL vector_file_group__set_new(file_group_Ids,Pt_fg,Pos)
74      CALL sorted_list__Add(Ids,hash(id),Pos)
75    ENDIF
76
77  END SUBROUTINE file_group__new
78
79     
80  SUBROUTINE file_group__get_new_group(Pt_fg,Pt_fg_out,Id)
81  IMPLICIT NONE
82    TYPE(file_group),POINTER             :: Pt_fg
83    TYPE(file_group),POINTER             :: Pt_fg_out
84    CHARACTER(LEN=str_len),OPTIONAL      :: Id
85   
86    CALL vector_file_group__get_new(Pt_fg%groups,Pt_fg_out)
87    CALL file_group__new(Pt_fg_out)
88
89    IF (PRESENT(id)) THEN
90      CALL file_group__new(Pt_fg_out,Id)
91    ELSE
92      CALL file_group__new(Pt_fg_out)
93    ENDIF
94   
95  END SUBROUTINE file_group__get_new_group
96
97 
98  SUBROUTINE file_group__get_new_file(Pt_fg,Pt_f_out,Id)
99  IMPLICIT NONE
100    TYPE(file_group),POINTER            :: Pt_fg
101    TYPE(file),POINTER                  :: Pt_f_out
102    CHARACTER(LEN=*),OPTIONAL      :: Id
103   
104    CALL vector_file__get_new(Pt_fg%files,Pt_f_out)
105   
106    IF (PRESENT(id)) THEN
107      CALL file__new(Pt_f_out,Id)
108    ELSE
109      CALL file__new(Pt_f_out)
110    ENDIF
111   
112  END SUBROUTINE file_group__get_new_file
113 
114 
115  SUBROUTINE file_group__get_default_attribut(Pt_fg,Pt_f)
116  IMPLICIT NONE
117    TYPE(file_group),POINTER  :: Pt_fg
118    TYPE(file),POINTER        :: Pt_f
119   
120    Pt_f=>Pt_fg%default_attribut
121  END SUBROUTINE file_group__get_default_attribut
122 
123  RECURSIVE SUBROUTINE file_group__apply_default(Pt_fg,default)
124  IMPLICIT NONE
125    TYPE(file_group),POINTER  :: Pt_fg
126    TYPE(file),POINTER,OPTIONAL        :: default
127   
128    INTEGER :: i
129   
130    IF (PRESENT(default)) THEN
131      CALL file__apply_default(default,Pt_fg%default_attribut,Pt_fg%default_attribut)
132    ENDIF
133     
134    DO i=1,Pt_fg%groups%size
135      CALL file_group__apply_default(Pt_fg%groups%at(i)%pt,Pt_fg%default_attribut)
136    ENDDO
137   
138    DO i=1,Pt_fg%files%size
139      CALL file__apply_default(Pt_fg%default_attribut,Pt_fg%files%at(i)%pt,Pt_fg%files%at(i)%pt)
140    ENDDO
141 
142  END SUBROUTINE file_group__apply_default
143
144  SUBROUTINE file_group__solve_field_ref(pt_fg)
145  IMPLICIT NONE
146    TYPE(file_group),POINTER  :: Pt_fg
147
148    INTEGER :: i
149   
150    DO i=1,Pt_fg%files%size
151      CALL file__solve_field_ref(Pt_fg%files%at(i)%pt)
152    ENDDO
153 
154  END SUBROUTINE file_group__solve_field_ref
155 
156 
157  RECURSIVE SUBROUTINE file_group__print(Pt_fg)
158  IMPLICIT NONE
159    TYPE(file_group),POINTER  :: Pt_fg
160   
161    INTEGER :: i
162   
163    PRINT *,"--- FILE GROUP ---"
164    IF (Pt_fg%has_id) THEN
165      PRINT *,"id :",TRIM(Pt_fg%id)
166    ELSE
167      PRINT *,"id undefined"
168    ENDIF
169   
170    PRINT *,"file default attribut :"
171    CALL file__print(Pt_fg%default_attribut)   
172
173    PRINT *,"owned file groups :"     
174    DO i=1,Pt_fg%groups%size
175      CALL file_group__print(Pt_fg%groups%at(i)%pt)
176    ENDDO
177
178    PRINT *,"owned file :"     
179    DO i=1,Pt_fg%files%size
180      CALL file__print(Pt_fg%files%at(i)%pt)
181    ENDDO
182 
183  END SUBROUTINE file_group__print     
184
185  RECURSIVE SUBROUTINE file_group__Check(Pt_fg)
186  IMPLICIT NONE
187 
188    TYPE(file_group),POINTER  :: Pt_fg
189    INTEGER :: i
190   
191    DO i=1,Pt_fg%groups%size
192      CALL file_group__check(pt_fg%groups%at(i)%pt)
193    ENDDO
194
195    DO i=1,Pt_fg%files%size
196      CALL file__check(pt_fg%files%at(i)%pt)
197    ENDDO
198 
199  END SUBROUTINE file_group__check     
200         
201END MODULE mod_file_group
202
Note: See TracBrowser for help on using the repository browser.