| /************************************************************** |
| * |
| * 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 INCLUDED_COW_WRAPPER_CLIENTS_HXX |
| #define INCLUDED_COW_WRAPPER_CLIENTS_HXX |
| |
| #include "o3tl/cow_wrapper.hxx" |
| |
| /* Definition of Cow_Wrapper_Clients classes */ |
| |
| namespace o3tltests { |
| |
| /** This is a header and a separate compilation unit on purpose - |
| cow_wrapper needs destructor, copy constructor and assignment |
| operator to be outline, when pimpl idiom is used |
| */ |
| |
| /// test non-opaque impl type |
| class cow_wrapper_client1 |
| { |
| public: |
| cow_wrapper_client1() : maImpl() {} |
| explicit cow_wrapper_client1( int nVal ) : maImpl(nVal) {} |
| |
| void modify( int nVal ) { *maImpl = nVal; } |
| int queryUnmodified() const { return *maImpl; } |
| |
| void makeUnique() { maImpl.make_unique(); } |
| bool is_unique() const { return maImpl.is_unique(); } |
| oslInterlockedCount use_count() const { return maImpl.use_count(); } |
| void swap( cow_wrapper_client1& r ) { o3tl::swap(maImpl, r.maImpl); } |
| |
| bool operator==( const cow_wrapper_client1& rRHS ) const { return maImpl == rRHS.maImpl; } |
| bool operator!=( const cow_wrapper_client1& rRHS ) const { return maImpl != rRHS.maImpl; } |
| bool operator<( const cow_wrapper_client1& rRHS ) const { return maImpl < rRHS.maImpl; } |
| |
| private: |
| o3tl::cow_wrapper< int > maImpl; |
| }; |
| |
| |
| class cow_wrapper_client2_impl; |
| |
| /** test opaque impl type - need to explicitely declare lifetime |
| methods |
| */ |
| class cow_wrapper_client2 |
| { |
| public: |
| cow_wrapper_client2(); |
| explicit cow_wrapper_client2( int nVal ); |
| ~cow_wrapper_client2(); |
| |
| cow_wrapper_client2( const cow_wrapper_client2& ); |
| cow_wrapper_client2& operator=( const cow_wrapper_client2& ); |
| |
| void modify( int nVal ); |
| int queryUnmodified() const; |
| |
| void makeUnique(); |
| bool is_unique() const; |
| oslInterlockedCount use_count() const; |
| void swap( cow_wrapper_client2& r ); |
| |
| bool operator==( const cow_wrapper_client2& rRHS ) const; |
| bool operator!=( const cow_wrapper_client2& rRHS ) const; |
| bool operator<( const cow_wrapper_client2& rRHS ) const; |
| |
| private: |
| o3tl::cow_wrapper< cow_wrapper_client2_impl > maImpl; |
| }; |
| |
| /** test MT-safe cow_wrapper - basically the same as |
| cow_wrapper_client2, only with different refcounting policy |
| */ |
| class cow_wrapper_client3 |
| { |
| public: |
| cow_wrapper_client3(); |
| explicit cow_wrapper_client3( int nVal ); |
| ~cow_wrapper_client3(); |
| |
| cow_wrapper_client3( const cow_wrapper_client3& ); |
| cow_wrapper_client3& operator=( const cow_wrapper_client3& ); |
| |
| void modify( int nVal ); |
| int queryUnmodified() const; |
| |
| void makeUnique(); |
| bool is_unique() const; |
| oslInterlockedCount use_count() const; |
| void swap( cow_wrapper_client3& r ); |
| |
| bool operator==( const cow_wrapper_client3& rRHS ) const; |
| bool operator!=( const cow_wrapper_client3& rRHS ) const; |
| bool operator<( const cow_wrapper_client3& rRHS ) const; |
| |
| private: |
| o3tl::cow_wrapper< cow_wrapper_client2_impl, o3tl::ThreadSafeRefCountingPolicy > maImpl; |
| }; |
| |
| } // namespace o3tltests |
| |
| #endif /* INCLUDED_COW_WRAPPER_CLIENTS_HXX */ |