1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include <precomp.h>
23 #include "protarea.hxx"
24 
25 
26 // NOT FULLY DEFINED SERVICES
27 #include "hdimpl.hxx"
28 
29 
30 inline UINT8
Index(ary::cpp::E_ClassKey i_eClassKey) const31 ProtectionArea::Index( ary::cpp::E_ClassKey i_eClassKey ) const
32 {
33  	return i_eClassKey == ary::cpp::CK_class
34                 ?   0
35                 :   i_eClassKey == ary::cpp::CK_struct
36                         ?   1
37                         :   2;
38 }
39 
40 
41 
ProtectionArea(const char * i_sLabel,const char * i_sTitle)42 ProtectionArea::ProtectionArea( const char *        i_sLabel,
43                                 const char *        i_sTitle )
44     :   pSglTable( new S_Slot_Table(i_sTitle) ),
45         aClassesTables(),
46         sLabel(i_sLabel)
47 {
48 }
49 
~ProtectionArea()50 ProtectionArea::~ProtectionArea()
51 {
52 
53 }
54 
55 csi::html::Table &
GetTable()56 ProtectionArea::GetTable()
57 {
58     csv_assert(pSglTable);
59 
60     return pSglTable->GetTable();
61 }
62 
63 csi::html::Table &
GetTable(ary::cpp::E_ClassKey i_eClassKey)64 ProtectionArea::GetTable( ary::cpp::E_ClassKey i_eClassKey )
65 {
66     csv_assert(aClassesTables[Index(i_eClassKey)]);
67     return aClassesTables[Index(i_eClassKey)]->GetTable();
68 }
69 
70 DYN csi::html::Table *
ReleaseTable()71 ProtectionArea::ReleaseTable()
72 {
73     csv_assert(pSglTable);
74     return pSglTable->ReleaseTable();
75 }
76 
77 DYN csi::html::Table *
ReleaseTable(ary::cpp::E_ClassKey i_eClassKey)78 ProtectionArea::ReleaseTable( ary::cpp::E_ClassKey i_eClassKey )
79 {
80     csv_assert(aClassesTables[Index(i_eClassKey)]);
81     return aClassesTables[Index(i_eClassKey)]->ReleaseTable();
82 }
83 
84 const char *
Label() const85 ProtectionArea::Label() const
86 {
87     return sLabel;
88 }
89 
90 
91 bool
WasUsed_Area() const92 ProtectionArea::WasUsed_Area() const
93 {
94     if ( pSglTable )
95     {
96      	return pSglTable->WasUsed();
97     }
98 
99     typedef const Dyn<ProtectionArea::S_Slot_Table> cdyntab;
100 
101     // Workaround a maybe compiler bug in Solaris5-CC ?
102     //   should normally work without the cast,
103     //   because that is exactly the genuine type, given:
104     return static_cast< cdyntab& >(aClassesTables[0])->WasUsed()
105            OR static_cast< cdyntab& >(aClassesTables[1])->WasUsed()
106            OR static_cast< cdyntab& >(aClassesTables[2])->WasUsed();
107 }
108 
109 //*******************        S_Slot_Table        **********************//
110 
111 ProtectionArea::
S_Slot_Table(const char * i_sTitle)112 S_Slot_Table::S_Slot_Table(const char * i_sTitle)
113     :   sTableTitle(i_sTitle)
114 {
115 }
116 
117 ProtectionArea::
~S_Slot_Table()118 S_Slot_Table::~S_Slot_Table()
119 {
120 }
121 
122 csi::html::Table &
123 ProtectionArea::
GetTable()124 S_Slot_Table::GetTable()
125 {
126     return pTable
127                 ?   *pTable
128                 :   *( pTable = &Create_ChildListTable(sTableTitle) );
129 }
130 
131 
132 
133