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