mirror of
https://github.com/ETLCPP/etl.git
synced 2026-06-29 22:08:45 +08:00
commit 70651fc29bb3eb8832d4dc7ba9aa24b16c0a1de3
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 19:24:46 2020 +0100
CircleCI works
commit bdffb3635fe00b8089bd7afa6b8b689616d4abb1
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 19:08:17 2020 +0100
Attempt at getting CircleCI to work
commit 3f3c1f1c23b8fb9ce43bd70f99bca33df82648c1
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 18:25:25 2020 +0100
Attempt at getting CircleCI to work
commit 253c9b0171f38877ef6d62d8afa9f7dcb55bcc4a
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 18:21:03 2020 +0100
Attempt at getting CircleCI to work
commit df730d4de5cec878bbf01b015d08fdf2d847497d
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 18:16:38 2020 +0100
Attempt at getting CircleCI to work
commit 48d692ddd2701ad6c3145ef3251274f1df75853f
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 18:03:20 2020 +0100
Attempt at getting CircleCI to work
commit 13a6a578046869cba60ef078c66c3c3edd88fa59
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:57:26 2020 +0100
Attempt at getting CircleCI to work
commit 9bf22248d0bb9d802b616ae54257c62d47ec31e1
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:55:38 2020 +0100
Attempt at getting CircleCI to work
commit da5cb68c97229e214ab0b737c8e48b48c777b842
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:51:17 2020 +0100
Attempt at getting CircleCI to work
commit 94a59d4b9a9ceda22ba794c238c43ab8cf27d31c
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:40:30 2020 +0100
Attempt at getting CircleCI to work
commit 07d17bfe01adb8ee4731dfa8d9f64216700a6324
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:38:46 2020 +0100
Attempt at getting CircleCI to work
commit 4c9ae8a90ae7e785f618e95d484470d66c248477
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:33:13 2020 +0100
Attempt at getting CircleCI to work
commit 72438721c15763790cbf55b1b8baf9c118924fdf
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:23:29 2020 +0100
Attempt at getting CircleCI to work
commit 4ccc85ef071f4a5706a06a0cef6b6f166e672cd9
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:22:21 2020 +0100
Attempt at getting CircleCI to work
commit 2a555f55b18eb56dd6a3e0e4dcbdc86ca8d47c1d
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:21:16 2020 +0100
Attempt at getting CircleCI to work
commit a6c1c84aa9472f119bcf416c6cd6ebda611944ce
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:20:15 2020 +0100
Attempt at getting CircleCI to work
commit ae535f3c79dfe1448327869e28f751eeac703744
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:18:31 2020 +0100
Attempt at getting CircleCI to work
commit d34c6e46dacf38700dbe49ef716ca5455c5e4824
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:16:44 2020 +0100
Attempt at getting CircleCI to work
commit 156ae5220c9781ea2fa5d8c07eadab47afd5b1c7
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 17:02:19 2020 +0100
Attempt at getting CircleCI to work
commit 07c2910ded57185b946e9ff39795c90729ff8540
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 16:59:50 2020 +0100
Attempt at getting CircleCI to work
commit 7ac59e5f2086e44bf3d22d9699670973d763eba2
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 16:54:57 2020 +0100
Attempt at getting CircleCI to work
commit 12a5e406faf4186ec5c4357ecf50d7dfaf5b6b10
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 16:53:08 2020 +0100
Attempt at getting CircleCI to work
commit e1c0294019dc680f973e6d7220d58cc4655c75c4
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 16:50:49 2020 +0100
Attempt at getting CircleCI to work
commit 0e3537526b6df30d0b329144ad8f509f57a230dc
Merge: ebe0bb66 db1ed024
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 16:47:24 2020 +0100
Merge branch 'development' into feature/add_circle-ci_support
commit ebe0bb6667322005387931cccbf064ee3a896569
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 14:55:33 2020 +0100
Attempt at getting CircleCI to work
commit 8fc4565599c0d6937fb34016501a6d5408749f53
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 14:53:32 2020 +0100
Attempt at getting CircleCI to work
commit 3793b591226459456c31f0b6bacfa65022abc977
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 14:44:44 2020 +0100
Attempt at getting CircleCI to work
commit 6795d4132c55367e797b428be9cc33f4e3b05a44
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 12:59:58 2020 +0100
Attempt at getting CircleCI to work
commit 9206209392251120407665e8778e25163c3d5796
Merge: d7ac41b9 638d6ac8
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Tue May 12 12:34:06 2020 +0100
Merge branch 'development' into feature/add_circle-ci_support
# Conflicts:
# include/etl/version.h
# library.json
# library.properties
# support/Release notes.txt
# test/test_make_string.cpp
# test/test_string_char.cpp
# test/vs2017/etl.vcxproj.filters
commit d7ac41b96c8529a74fb15cedfb69cad0ae8ba3c7
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 22:16:14 2019 +0000
Removed artifacts path
commit af768e0cad2869cb46041e060cbd7e00c8b7f512
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 22:13:48 2019 +0000
Added artifacts path
commit e0403d85ebe8ed8c28114361638ae889b67ce0d0
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 22:02:51 2019 +0000
restore old CMakeLists.txt
commit 63cc9b6acdd2c4e143d29568d4fbde6795e82ea3
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:49:45 2019 +0000
Added install git
commit 01bb5cb7b88d5fb9c21f75e9b40ceff7786cef29
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:46:46 2019 +0000
Added install git
commit 42876cad96d2bff58957b2e41698fdf61c212f7f
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:43:19 2019 +0000
Added install git
commit 3e5b19d30718fb91ba7daef3788cd51e70610ba0
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:39:39 2019 +0000
Alternate CMakeLists.txt
commit f4ce6e75c8d9a03fc9784bf1ad48711727fc47ab
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:25:50 2019 +0000
cat log file
commit 06983faf02621355690134aed70e73c2eae76c4e
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:16:31 2019 +0000
Listing
commit f7670253bf97a29518843a6e329b1c6e3ffa1f8f
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:11:00 2019 +0000
Touch config.yml file
commit bf167aa0303e3a89716098a95b0f3b9525e7cacd
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 21:05:01 2019 +0000
Touch config.yml file
commit 5bca35821384c28bd93e3b993369365c36681e2f
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 20:20:57 2019 +0000
Change image to ubuntu:latest
commit ad63db02c762f20d4bfd3ef10ca17f89e633c7e0
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 20:12:14 2019 +0000
Touch config.yml file
commit 3f33be8ac03e572cd6dc2baca69a7d2a5c72e7ec
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 20:08:28 2019 +0000
Touch config.yml file
commit 3bf0e93d4cb7b5f36097a502902cccb6cd1509e0
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 19:36:08 2019 +0000
Update readme
commit 68653df3fe57d7a668b59bc7a6cefed43c01da2b
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 19:25:45 2019 +0000
Fix readme
commit 12bfc61ed14f563a9aa7c6d5a8ff657932bab490
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 18:57:31 2019 +0000
Touch config.yml file
commit 984534e89cad59675d1752768dada90a56b624f6
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 18:39:10 2019 +0000
Added virtual destructors
commit 1d7f7bb44399a37433003320583bd39dc195ca51
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 18:21:08 2019 +0000
Touch config.yml file
commit c66c5eb12204c1028d9071cd6e29e38722089760
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 14:34:11 2019 +0000
Added master branch
commit d31ec7b7a674b19d9c30796f2676876017ef9450
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 14:14:15 2019 +0000
Removed tabs
commit dad04c0a56abe25c5a4f2ecc9c79b569d4014f81
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 14:06:31 2019 +0000
Removed tabs
commit a265c68fcb9abf622e3b4ab708b79a2b260f3863
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 14:03:58 2019 +0000
Updated selected branch in config.yml
commit 7abf39b83d308dc7cc459bf27ad11f688197b11c
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 13:58:40 2019 +0000
Updated selected branch in config.yml
commit 10f8d63cf2d926ee61dca691abce503ec5e08a4e
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 13:56:43 2019 +0000
Updated selected branch in config.yml
commit e9db085677ad620e227800acc6fad2bee6f59456
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 13:52:42 2019 +0000
Changed bin directory
commit 2dfff5b5c2c993ed14cc5fd7a936560faa6eedc0
Author: John Wellbelove <github@wellbelove.co.uk>
Date: Fri Dec 6 13:50:56 2019 +0000
Merge remote-tracking branch 'origin/master' into feature/add_circle-ci_support
# Conflicts:
# include/etl/cstring.h
# include/etl/u16string.h
# include/etl/u32string.h
# include/etl/wstring.h
571 lines
18 KiB
C++
571 lines
18 KiB
C++
///\file
|
|
|
|
/******************************************************************************
|
|
The MIT License(MIT)
|
|
|
|
Embedded Template Library.
|
|
https://github.com/ETLCPP/etl
|
|
https://www.etlcpp.com
|
|
|
|
Copyright(c) 2014 jwellbelove
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files(the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions :
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
******************************************************************************/
|
|
|
|
#ifndef ETL_VISITOR_INCLUDED
|
|
#define ETL_VISITOR_INCLUDED
|
|
|
|
#include "platform.h"
|
|
|
|
//*****************************************************************************
|
|
///\defgroup visitor visitor
|
|
/// A set of template classes for easy implementation of the visitor pattern.<br>
|
|
/// The visitor design pattern is a way of separating an algorithm from an object
|
|
/// structure on which it operates. A practical result of this separation is the
|
|
/// ability to add new operations to existing object structures without modifying
|
|
/// those structures. It is one way to easily follow the open/closed principle.
|
|
/// In essence, the visitor allows one to add new virtual functions to a family
|
|
/// of classes without modifying the classes themselves; instead, one creates a
|
|
/// visitor class that implements all of the appropriate specialisations of the
|
|
/// virtual function. The visitor takes the instance as input, and implements
|
|
/// the goal through double dispatch.<br>
|
|
/// \ingroup patterns
|
|
//*****************************************************************************
|
|
|
|
namespace etl
|
|
{
|
|
#if ETL_CPP11_SUPPORTED && !defined(ETL_VISITOR_FORCE_CPP03)
|
|
|
|
//*****************************************************************
|
|
/// The visitable class for N types.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename... Types>
|
|
class visitable : public visitable<T1>, public visitable<Types...>
|
|
{
|
|
public:
|
|
|
|
using visitable<T1>::accept;
|
|
using visitable<Types...>::accept;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The specialised visitable class for 1 type.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1>
|
|
class visitable<T1>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitable() {}
|
|
|
|
virtual void accept(T1&) = 0;
|
|
};
|
|
|
|
#else
|
|
|
|
//*****************************************************************
|
|
/// The visitable base class for four visitor types.
|
|
/// Derive visitable classes from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2 = void, typename T3 = void, typename T4 = void>
|
|
class visitable
|
|
{
|
|
public:
|
|
|
|
virtual ~visitable() {}
|
|
|
|
virtual void accept(T1&) = 0;
|
|
virtual void accept(T2&) = 0;
|
|
virtual void accept(T3&) = 0;
|
|
virtual void accept(T4&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitable base class for three visitor types.
|
|
/// Derive visitable classes from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3>
|
|
class visitable<T1, T2, T3>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitable() {}
|
|
|
|
virtual void accept(T1&) = 0;
|
|
virtual void accept(T2&) = 0;
|
|
virtual void accept(T3&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitable base class for two visitor types.
|
|
/// Derive visitable classes from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2>
|
|
class visitable<T1, T2>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitable() {}
|
|
|
|
virtual void accept(T1&) = 0;
|
|
virtual void accept(T2&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitable base class for one visitor type.
|
|
/// Derive visitable classes from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1>
|
|
class visitable<T1>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitable() {}
|
|
|
|
virtual void accept(T1&) = 0;
|
|
};
|
|
|
|
#endif
|
|
|
|
#if ETL_CPP11_SUPPORTED && !defined(ETL_VISITOR_FORCE_CPP03)
|
|
|
|
//*****************************************************************
|
|
/// The visitor class for N types.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename... Types>
|
|
class visitor : public visitor<T1>, public visitor<Types...>
|
|
{
|
|
public:
|
|
|
|
using visitor<T1>::visit;
|
|
using visitor<Types...>::visit;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The specialised visitor class for 1 type.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1>
|
|
class visitor<T1>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
};
|
|
|
|
#else
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for sixteen types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2 = void, typename T3 = void, typename T4 = void,
|
|
typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void,
|
|
typename T9 = void, typename T10 = void, typename T11 = void, typename T12 = void,
|
|
typename T13 = void, typename T14 = void, typename T15 = void, typename T16 = void>
|
|
class visitor
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
virtual void visit(T10&) = 0;
|
|
virtual void visit(T11&) = 0;
|
|
virtual void visit(T12&) = 0;
|
|
virtual void visit(T13&) = 0;
|
|
virtual void visit(T14&) = 0;
|
|
virtual void visit(T15&) = 0;
|
|
virtual void visit(T16&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for fifteen types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8,
|
|
typename T9, typename T10, typename T11, typename T12,
|
|
typename T13, typename T14, typename T15>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
virtual void visit(T10&) = 0;
|
|
virtual void visit(T11&) = 0;
|
|
virtual void visit(T12&) = 0;
|
|
virtual void visit(T13&) = 0;
|
|
virtual void visit(T14&) = 0;
|
|
virtual void visit(T15&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for fourteen types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8,
|
|
typename T9, typename T10, typename T11, typename T12,
|
|
typename T13, typename T14>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
virtual void visit(T10&) = 0;
|
|
virtual void visit(T11&) = 0;
|
|
virtual void visit(T12&) = 0;
|
|
virtual void visit(T13&) = 0;
|
|
virtual void visit(T14&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for thirteen types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8,
|
|
typename T9, typename T10, typename T11, typename T12,
|
|
typename T13>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
virtual void visit(T10&) = 0;
|
|
virtual void visit(T11&) = 0;
|
|
virtual void visit(T12&) = 0;
|
|
virtual void visit(T13&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for twelve types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8,
|
|
typename T9, typename T10, typename T11, typename T12>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
virtual void visit(T10&) = 0;
|
|
virtual void visit(T11&) = 0;
|
|
virtual void visit(T12&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for eleven types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8,
|
|
typename T9, typename T10, typename T11>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
virtual void visit(T10&) = 0;
|
|
virtual void visit(T11&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for ten types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8,
|
|
typename T9, typename T10>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
virtual void visit(T10&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for nine types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8,
|
|
typename T9>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
virtual void visit(T9&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for eight types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7, typename T8>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7, T8>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
virtual void visit(T8&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for seven types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6, typename T7>
|
|
class visitor<T1, T2, T3, T4, T5, T6, T7>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
virtual void visit(T7&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for six types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5, typename T6>
|
|
class visitor<T1, T2, T3, T4, T5, T6>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
virtual void visit(T6&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for five types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4,
|
|
typename T5>
|
|
class visitor<T1, T2, T3, T4, T5>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
virtual void visit(T5&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for four types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3, typename T4>
|
|
class visitor<T1, T2, T3, T4>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
virtual void visit(T4&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for three types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2, typename T3>
|
|
class visitor<T1, T2, T3>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
virtual void visit(T3&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for two types.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1, typename T2>
|
|
class visitor<T1, T2>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
virtual void visit(T2&) = 0;
|
|
};
|
|
|
|
//*****************************************************************
|
|
/// The visitor base class for one type.
|
|
/// Derive visitors from this.
|
|
///\ingroup visitor
|
|
//*****************************************************************
|
|
template <typename T1>
|
|
class visitor<T1>
|
|
{
|
|
public:
|
|
|
|
virtual ~visitor() {}
|
|
|
|
virtual void visit(T1&) = 0;
|
|
};
|
|
|
|
#endif
|
|
}
|
|
|
|
#endif
|