The TELEMAC-MASCARET system  trunk
hash_table.f
Go to the documentation of this file.
1  MODULE hash_table
2 !
4  IMPLICIT NONE
5 !
6  INTEGER, PARAMETER :: max_file = 3000
7 !
8  CONTAINS
9 !
10  SUBROUTINE get_obj
11 !***********************************************************************
12 !
13  &(hash,file_id,hashed_id,ierr)
14 !
15 !***********************************************************************
16 ! HERMES V7P0 01/05/2014
17 !***********************************************************************
18 !
19 !brief Returns the index in the obj_tab for a give file id
20 !
21 !history Y AUDOUIN (LNHE)
22 !+ 24/03/2014
23 !+ V7P0
24 !+
25 !
26 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 !| HASH |<->| HASH TABLE
28 !| FILE_ID |-->| ID OF THE FILE
29 !| HASHED_ID |<->| ID IN THE SRF_OBJ_TAB
30 !| IERR |-->| 0 IF EVERYTHING WENT FINE, ERROR INDEX OTHERWISE
31 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32 !
33  IMPLICIT NONE
34  !
35  INTEGER, INTENT(IN) :: FILE_ID
36  INTEGER, INTENT(INOUT) :: HASHED_ID
37  INTEGER, INTENT(INOUT) :: HASH(max_file)
38  INTEGER, INTENT(OUT) :: IERR
39  !
40  INTEGER :: I
41  !
42  hashed_id = 0
43  ! LOOK FOR THE ID LINKED TO THAT FILE_ID
44  DO i=1,max_file
45  IF (hash(i).EQ.file_id) THEN
46  hashed_id = i
47  EXIT
48  ENDIF
49  ENDDO
50  ! IF HASHED_ID == 0 THEN NO ID WAS FOUND RETURN ERROR
51  IF(hashed_id.EQ.0) THEN
53  ELSE
54  ierr = 0
55  ENDIF
56  hashed_id = hashed_id
57  !
58  RETURN
59  END SUBROUTINE
60 
61 !***********************************************************************
62  SUBROUTINE add_obj
63 !***********************************************************************
64 !
65  &(hash,file_id,hashed_id,ierr)
66 !
67 !***********************************************************************
68 ! HERMES V7P0 01/05/2014
69 !***********************************************************************
70 !
71 !brief Add a new file to the obj_tab and returns its new id
72 !
73 !history Y AUDOUIN (LNHE)
74 !+ 24/03/2014
75 !+ V7P0
76 !+
77 !
78 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79 !| HASH |<->| HASH TABLE
80 !| FILE_ID |-->| ID OF THE FILE
81 !| HASHED_ID |<->| ID IN THE SRF_OBJ_TAB
82 !| IERR |-->| 0 IF EVERYTHING WENT FINE, ERROR INDEX OTHERWISE
83 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84 !
85  IMPLICIT NONE
86  !
87  INTEGER, INTENT(INOUT) :: HASH(max_file)
88  INTEGER, INTENT(IN) :: FILE_ID
89  INTEGER, INTENT(INOUT) :: HASHED_ID
90  INTEGER, INTENT(OUT) :: IERR
91  !
92  hashed_id = 0
93  ! CHECK IF THE FILE IS ALREADY OPEN
94  CALL get_obj(hash,file_id,hashed_id,ierr)
95  IF(hashed_id.NE.0) THEN
97  RETURN
98  ENDIF
99  ! WE RESET THE IERR TO ZERO AS THE PREVIOUS CALL SHOULD
100  ! HAVE CRASHED AS THE FILES IS NOT OPENED YET
101  ierr = 0
102  !
103  ! Look far a place in the hash table
104  hashed_id = 1
105  DO
106  IF(hashed_id.GT.max_file) EXIT
107  IF(hash(hashed_id).EQ.0) EXIT
108  hashed_id = hashed_id + 1
109  ENDDO
110  ! CHECK IF WE'VE REACH THE MAXIMUM NUMBER OF FILES
111  IF(hashed_id.GT.max_file) THEN
112  ierr = hermes_max_file_err
113  RETURN
114  ELSE
115  hash(hashed_id) = file_id
116  ENDIF
117  !
118  RETURN
119  END SUBROUTINE
120 
121  END MODULE hash_table
subroutine add_obj(HASH, FILE_ID, HASHED_ID, IERR)
Definition: hash_table.f:66
subroutine get_obj(HASH, FILE_ID, HASHED_ID, IERR)
Definition: hash_table.f:15
integer, parameter hermes_file_id_already_in_use_err
integer, parameter hermes_max_file_err
integer, parameter max_file
Definition: hash_table.f:7
integer, parameter hermes_file_not_opened_err