| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef CSV_OPENCLOSE_HXX |
| #define CSV_OPENCLOSE_HXX |
| |
| |
| namespace csv |
| { |
| |
| // Open modes for storages: |
| enum E_RWMode |
| { |
| rwDefault = 0x0000, // Keep old settings. If there are none, set default. |
| rwRead = 0x0001, // Reads only |
| rwWrite = 0x0002, // Writes only |
| rwReadWrite = 0x0003 // Reads and writes. |
| }; |
| |
| enum E_OpenMode |
| { |
| omCreateIfNecessary = 0x0000, // Creates a new file only, if file does not exist. |
| omCreateNot = 0x0010, // Open fails, if file does not exist. |
| omCreate = 0x0020 // Existing file will be deleted. |
| }; |
| enum E_ShareMode |
| { |
| shmShareNot = 0x0000, // Allow others nothing |
| shmShareRead = 0x0004, // Allow others to read |
| shmShareAll = 0x000C // Allow others to read and write |
| }; |
| |
| /** Constants for filemode combinations |
| These combinations are the only ones, guaranteed to be supported. |
| */ |
| const UINT32 CFM_RW = rwReadWrite; |
| const UINT32 CFM_CREATE = |
| static_cast< UINT32 >(rwReadWrite) | static_cast< UINT32 >(omCreate); |
| const UINT32 CFM_READ = |
| static_cast< UINT32 >(rwRead) | static_cast< UINT32 >(omCreateNot) | |
| static_cast< UINT32 >(shmShareRead); |
| |
| |
| |
| class OpenClose |
| { |
| public: |
| virtual ~OpenClose() {} |
| |
| bool open( |
| UINT32 in_nOpenModeInfo = 0 ); /// Combination of values of E_RWMode and E_ShareMode und E_OpenMode. 0 := Keep existing mode. |
| void close(); |
| |
| bool is_open() const; |
| |
| private: |
| virtual bool do_open( |
| UINT32 in_nOpenModeInfo ) = 0; |
| virtual void do_close() = 0; |
| virtual bool inq_is_open() const = 0; |
| }; |
| |
| |
| |
| class OpenCloseGuard |
| { |
| public: |
| OpenCloseGuard( |
| OpenClose & i_rOpenClose, |
| UINT32 i_nOpenModeInfo = 0 ); |
| ~OpenCloseGuard(); |
| operator bool() const; |
| |
| private: |
| // Forbidden: |
| OpenCloseGuard(OpenCloseGuard&); |
| OpenCloseGuard & operator=(OpenCloseGuard&); |
| |
| // DATA |
| OpenClose & rOpenClose; |
| }; |
| |
| |
| // IMPLEMENTATION |
| |
| inline bool |
| OpenClose::open( UINT32 i_nOpenModeInfo ) |
| { return do_open(i_nOpenModeInfo); } |
| inline void |
| OpenClose::close() |
| { do_close(); } |
| inline bool |
| OpenClose::is_open() const |
| { return inq_is_open(); } |
| |
| inline |
| OpenCloseGuard::OpenCloseGuard( OpenClose & i_rOpenClose, |
| UINT32 i_nOpenModeInfo ) |
| : rOpenClose(i_rOpenClose) |
| { rOpenClose.open(i_nOpenModeInfo); } |
| inline |
| OpenCloseGuard::~OpenCloseGuard() |
| { if (rOpenClose.is_open()) rOpenClose.close(); } |
| inline |
| OpenCloseGuard::operator bool() const |
| { return rOpenClose.is_open(); } |
| |
| |
| |
| |
| } // namespace csv |
| |
| |
| |
| |
| |
| |
| #endif |
| |
| |