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