123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- // (C) Copyright 2010 Just Software Solutions Ltd http://www.justsoftwaresolutions.co.uk
- // (C) Copyright 2012 Vicente Botet
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #define BOOST_THREAD_VERSION 4
- #include <iostream>
- #include <string>
- #include <boost/thread/synchronized_value.hpp>
- void addTrailingSlashIfMissing(boost::synchronized_value<std::string> & path)
- {
- boost::strict_lock_ptr<std::string> u=path.synchronize();
- if(u->empty() || (*u->rbegin()!='/'))
- {
- *u+='/';
- }
- }
- void f(const boost::synchronized_value<int> &v) {
- std::cout<<"v="<<*v<<std::endl;
- }
- void g(const boost::const_strict_lock_ptr<int> &v) {
- std::cout<<"v="<<*v<<std::endl;
- }
- bool checkIfMissingTrailingSlash(boost::synchronized_value<std::string> & path)
- {
- boost::strict_lock_ptr<std::string> u=path.synchronize();
- return (u->empty() || (*u->rbegin()!='/'));
- }
- int main()
- {
- {
- boost::synchronized_value<int> v1;
- *v1=42;
- std::cout<<"v1="<<*v1<<std::endl;
- f(v1);
- int i=*v1;
- std::cout<<"i="<<i<<std::endl;
- {
- boost::strict_lock_ptr<int> u=v1.synchronize();
- *u+=43;
- std::cout<<"v1="<<*u<<std::endl;
- g(u);
- }
- boost::synchronized_value<int> v2(2);
- std::cout<<"v2="<<*v2<<std::endl;
- v2 = 3;
- std::cout<<"v2="<<*v2<<std::endl;
- boost::synchronized_value<int> v3(v2);
- std::cout<<"v3="<<*v3<<std::endl;
- v3 = v1;
- std::cout<<"v3="<<*v3<<std::endl;
- std::cout<<"v2="<<*v3<<std::endl;
- std::cout<<"v3="<<*v3<<std::endl;
- swap(v3,v2);
- v1.swap(v2);
- std::cout<<"v3="<<*v3<<std::endl;
- }
- {
- boost::synchronized_value<std::string> s;
- addTrailingSlashIfMissing(s);
- std::cout<<"s="<<std::string(*s)<<std::endl;
- }
- {
- boost::synchronized_value<std::string> s;
- s->append("foo/");
- s.synchronize()->append("foo");
- addTrailingSlashIfMissing(s);
- std::cout<<"s="<<std::string(*s)<<std::endl;
- }
- {
- boost::synchronized_value<std::string> s;
- s = std::string("foo/");
- std::cout<<"ss="<< s << std::endl;
- }
- {
- boost::synchronized_value<std::string> s;
- s = "foo/";
- std::cout<<"ss="<< s << std::endl;
- }
- {
- boost::synchronized_value<std::string> s1("a");
- boost::synchronized_value<std::string> s2;
- s2=s1;
- std::cout<<"s1="<< s1 << std::endl;
- std::cout<<"s2="<< s2 << std::endl;
- }
- {
- boost::synchronized_value<std::string> s1("a");
- boost::synchronized_value<std::string> s2("b");
- std::cout<<"s1="<< s1 << std::endl;
- std::cout<<"s2="<< s2 << std::endl;
- swap(s1,s2);
- std::cout<<"s1="<< s1 << std::endl;
- std::cout<<"s2="<< s2 << std::endl;
- }
- #if ! defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
- {
- boost::synchronized_value<std::string> sts("a");
- std::string s(sts);
- std::cout<<"ssts="<< s << std::endl;
- }
- #endif
- {
- boost::synchronized_value<int> s1(1);
- boost::synchronized_value<int> s2(1);
- BOOST_ASSERT(s1==s2);
- BOOST_ASSERT(s1<=s2);
- BOOST_ASSERT(s1>=s2);
- BOOST_ASSERT(s1==1);
- BOOST_ASSERT(s1<=1);
- BOOST_ASSERT(s1>=1);
- }
- {
- boost::synchronized_value<int> s1(1);
- boost::synchronized_value<int> s2(2);
- BOOST_ASSERT(s1!=s2);
- BOOST_ASSERT(s1!=2);
- BOOST_ASSERT(2!=s1);
- }
- {
- boost::synchronized_value<int> s1(1);
- boost::synchronized_value<int> s2(2);
- BOOST_ASSERT(s1<s2);
- BOOST_ASSERT(s1<=s2);
- BOOST_ASSERT(s2>s1);
- BOOST_ASSERT(s2>=s1);
- BOOST_ASSERT(s1<2);
- BOOST_ASSERT(s1<=2);
- BOOST_ASSERT(s2>1);
- BOOST_ASSERT(s2>=1);
- }
- return 0;
- }
|