xref: /trunk/main/autodoc/inc/cosv/openclose.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
1*11c03c6dSDamjan Jovanovic /**************************************************************
2*11c03c6dSDamjan Jovanovic  *
3*11c03c6dSDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4*11c03c6dSDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5*11c03c6dSDamjan Jovanovic  * distributed with this work for additional information
6*11c03c6dSDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7*11c03c6dSDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8*11c03c6dSDamjan Jovanovic  * "License"); you may not use this file except in compliance
9*11c03c6dSDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10*11c03c6dSDamjan Jovanovic  *
11*11c03c6dSDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12*11c03c6dSDamjan Jovanovic  *
13*11c03c6dSDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14*11c03c6dSDamjan Jovanovic  * software distributed under the License is distributed on an
15*11c03c6dSDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*11c03c6dSDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17*11c03c6dSDamjan Jovanovic  * specific language governing permissions and limitations
18*11c03c6dSDamjan Jovanovic  * under the License.
19*11c03c6dSDamjan Jovanovic  *
20*11c03c6dSDamjan Jovanovic  *************************************************************/
21*11c03c6dSDamjan Jovanovic 
22*11c03c6dSDamjan Jovanovic 
23*11c03c6dSDamjan Jovanovic 
24*11c03c6dSDamjan Jovanovic #ifndef CSV_OPENCLOSE_HXX
25*11c03c6dSDamjan Jovanovic #define CSV_OPENCLOSE_HXX
26*11c03c6dSDamjan Jovanovic 
27*11c03c6dSDamjan Jovanovic 
28*11c03c6dSDamjan Jovanovic namespace csv
29*11c03c6dSDamjan Jovanovic {
30*11c03c6dSDamjan Jovanovic 
31*11c03c6dSDamjan Jovanovic // Open modes for storages:
32*11c03c6dSDamjan Jovanovic enum E_RWMode
33*11c03c6dSDamjan Jovanovic {
34*11c03c6dSDamjan Jovanovic     rwDefault   = 0x0000,       //  Keep old settings. If there are none, set default.
35*11c03c6dSDamjan Jovanovic     rwRead      = 0x0001,       //  Reads only
36*11c03c6dSDamjan Jovanovic     rwWrite     = 0x0002,       //  Writes only
37*11c03c6dSDamjan Jovanovic     rwReadWrite = 0x0003        //  Reads and writes.
38*11c03c6dSDamjan Jovanovic };
39*11c03c6dSDamjan Jovanovic 
40*11c03c6dSDamjan Jovanovic enum E_OpenMode
41*11c03c6dSDamjan Jovanovic {
42*11c03c6dSDamjan Jovanovic     omCreateIfNecessary     = 0x0000,   // Creates a new file only, if file does not exist.
43*11c03c6dSDamjan Jovanovic     omCreateNot             = 0x0010,   // Open fails, if file does not exist.
44*11c03c6dSDamjan Jovanovic     omCreate                = 0x0020    // Existing file will be deleted.
45*11c03c6dSDamjan Jovanovic };
46*11c03c6dSDamjan Jovanovic enum E_ShareMode
47*11c03c6dSDamjan Jovanovic {
48*11c03c6dSDamjan Jovanovic     shmShareNot     = 0x0000,       // Allow others nothing
49*11c03c6dSDamjan Jovanovic     shmShareRead    = 0x0004,       // Allow others to read
50*11c03c6dSDamjan Jovanovic     shmShareAll     = 0x000C        // Allow others to read and write
51*11c03c6dSDamjan Jovanovic };
52*11c03c6dSDamjan Jovanovic 
53*11c03c6dSDamjan Jovanovic /** Constants for filemode combinations
54*11c03c6dSDamjan Jovanovic     These combinations are the only ones, guaranteed to be supported.
55*11c03c6dSDamjan Jovanovic */
56*11c03c6dSDamjan Jovanovic const UINT32    CFM_RW      = rwReadWrite;
57*11c03c6dSDamjan Jovanovic const UINT32    CFM_CREATE  =
58*11c03c6dSDamjan Jovanovic     static_cast< UINT32 >(rwReadWrite) | static_cast< UINT32 >(omCreate);
59*11c03c6dSDamjan Jovanovic const UINT32    CFM_READ    =
60*11c03c6dSDamjan Jovanovic     static_cast< UINT32 >(rwRead) | static_cast< UINT32 >(omCreateNot) |
61*11c03c6dSDamjan Jovanovic     static_cast< UINT32 >(shmShareRead);
62*11c03c6dSDamjan Jovanovic 
63*11c03c6dSDamjan Jovanovic 
64*11c03c6dSDamjan Jovanovic 
65*11c03c6dSDamjan Jovanovic class OpenClose
66*11c03c6dSDamjan Jovanovic {
67*11c03c6dSDamjan Jovanovic   public:
~OpenClose()68*11c03c6dSDamjan Jovanovic     virtual ~OpenClose() {}
69*11c03c6dSDamjan Jovanovic 
70*11c03c6dSDamjan Jovanovic     bool                open(
71*11c03c6dSDamjan Jovanovic                             UINT32          in_nOpenModeInfo = 0 ); /// Combination of values of E_RWMode and E_ShareMode und E_OpenMode. 0 := Keep existing mode.
72*11c03c6dSDamjan Jovanovic     void                close();
73*11c03c6dSDamjan Jovanovic 
74*11c03c6dSDamjan Jovanovic     bool                is_open() const;
75*11c03c6dSDamjan Jovanovic 
76*11c03c6dSDamjan Jovanovic   private:
77*11c03c6dSDamjan Jovanovic     virtual bool        do_open(
78*11c03c6dSDamjan Jovanovic                             UINT32          in_nOpenModeInfo ) = 0;
79*11c03c6dSDamjan Jovanovic     virtual void        do_close() = 0;
80*11c03c6dSDamjan Jovanovic     virtual bool        inq_is_open() const = 0;
81*11c03c6dSDamjan Jovanovic };
82*11c03c6dSDamjan Jovanovic 
83*11c03c6dSDamjan Jovanovic 
84*11c03c6dSDamjan Jovanovic 
85*11c03c6dSDamjan Jovanovic class OpenCloseGuard
86*11c03c6dSDamjan Jovanovic {
87*11c03c6dSDamjan Jovanovic   public:
88*11c03c6dSDamjan Jovanovic                         OpenCloseGuard(
89*11c03c6dSDamjan Jovanovic                             OpenClose &         i_rOpenClose,
90*11c03c6dSDamjan Jovanovic                             UINT32              i_nOpenModeInfo = 0 );
91*11c03c6dSDamjan Jovanovic                         ~OpenCloseGuard();
92*11c03c6dSDamjan Jovanovic                         operator bool() const;
93*11c03c6dSDamjan Jovanovic 
94*11c03c6dSDamjan Jovanovic   private:
95*11c03c6dSDamjan Jovanovic     // Forbidden:
96*11c03c6dSDamjan Jovanovic                         OpenCloseGuard(OpenCloseGuard&);
97*11c03c6dSDamjan Jovanovic     OpenCloseGuard &    operator=(OpenCloseGuard&);
98*11c03c6dSDamjan Jovanovic 
99*11c03c6dSDamjan Jovanovic     // DATA
100*11c03c6dSDamjan Jovanovic     OpenClose &         rOpenClose;
101*11c03c6dSDamjan Jovanovic };
102*11c03c6dSDamjan Jovanovic 
103*11c03c6dSDamjan Jovanovic 
104*11c03c6dSDamjan Jovanovic // IMPLEMENTATION
105*11c03c6dSDamjan Jovanovic 
106*11c03c6dSDamjan Jovanovic inline bool
open(UINT32 i_nOpenModeInfo)107*11c03c6dSDamjan Jovanovic OpenClose::open( UINT32 i_nOpenModeInfo )
108*11c03c6dSDamjan Jovanovic     { return do_open(i_nOpenModeInfo); }
109*11c03c6dSDamjan Jovanovic inline void
close()110*11c03c6dSDamjan Jovanovic OpenClose::close()
111*11c03c6dSDamjan Jovanovic     { do_close(); }
112*11c03c6dSDamjan Jovanovic inline bool
is_open() const113*11c03c6dSDamjan Jovanovic OpenClose::is_open() const
114*11c03c6dSDamjan Jovanovic     { return inq_is_open(); }
115*11c03c6dSDamjan Jovanovic 
116*11c03c6dSDamjan Jovanovic inline
OpenCloseGuard(OpenClose & i_rOpenClose,UINT32 i_nOpenModeInfo)117*11c03c6dSDamjan Jovanovic OpenCloseGuard::OpenCloseGuard( OpenClose & i_rOpenClose,
118*11c03c6dSDamjan Jovanovic                                 UINT32      i_nOpenModeInfo )
119*11c03c6dSDamjan Jovanovic     :   rOpenClose(i_rOpenClose)
120*11c03c6dSDamjan Jovanovic     { rOpenClose.open(i_nOpenModeInfo); }
121*11c03c6dSDamjan Jovanovic inline
~OpenCloseGuard()122*11c03c6dSDamjan Jovanovic OpenCloseGuard::~OpenCloseGuard()
123*11c03c6dSDamjan Jovanovic     { if (rOpenClose.is_open()) rOpenClose.close(); }
124*11c03c6dSDamjan Jovanovic inline
operator bool() const125*11c03c6dSDamjan Jovanovic OpenCloseGuard::operator bool() const
126*11c03c6dSDamjan Jovanovic     { return rOpenClose.is_open(); }
127*11c03c6dSDamjan Jovanovic 
128*11c03c6dSDamjan Jovanovic 
129*11c03c6dSDamjan Jovanovic 
130*11c03c6dSDamjan Jovanovic 
131*11c03c6dSDamjan Jovanovic }   // namespace csv
132*11c03c6dSDamjan Jovanovic 
133*11c03c6dSDamjan Jovanovic 
134*11c03c6dSDamjan Jovanovic 
135*11c03c6dSDamjan Jovanovic 
136*11c03c6dSDamjan Jovanovic 
137*11c03c6dSDamjan Jovanovic 
138*11c03c6dSDamjan Jovanovic #endif
139