Branch data Line data Source code
1 : : /******************************************************************************
2 : : ------------- Copyright (c) 2009-2023 H a r a l d A c h i t z ---------------
3 : : ---------- < h a r a l d dot a c h i t z at g m a i l dot c o m > ------------
4 : : ---- This Source Code Form is subject to the terms of the Mozilla Public -----
5 : : ---- License, v. 2.0. If a copy of the MPL was not distributed with this -----
6 : : ---------- file, You can obtain one at http://mozilla.org/MPL/2.0/. ----------
7 : : ******************************************************************************/
8 : :
9 : : #include <sl3/dbvalues.hpp>
10 : : #include <sl3/error.hpp>
11 : :
12 : : namespace sl3
13 : : {
14 : : #ifdef _MSC_VER
15 : : using std::initializer_list;
16 : :
17 : : DbValues::DbValues (conatiner_type c) noexcept (
18 : : std::is_nothrow_move_constructible<conatiner_type>::value)
19 : : : Container (std::move (c))
20 : : {
21 : : }
22 : :
23 : : DbValues::DbValues (initializer_list<typename conatiner_type::value_type> l)
24 : : : Container (std::move (l))
25 : : {
26 : : }
27 : : #endif
28 : :
29 : 163 : DbValues::DbValues () noexcept
30 : 163 : : Container ()
31 : : {
32 : 163 : }
33 : 15 : DbValues::DbValues (const DbValues& row)
34 : 15 : : Container (row)
35 : : {
36 : 15 : }
37 : :
38 : 86 : DbValues::DbValues (DbValues&& row) noexcept (
39 : 86 : std::is_nothrow_move_constructible<DbValue>::value)
40 : 86 : : Container (std::move (row))
41 : : {
42 : 86 : }
43 : :
44 : : DbValues&
45 : 3 : DbValues::operator= (const DbValues& row)
46 : : {
47 : : // in case of exception , both needs to stay unchanged
48 : : // first all checks, than assign
49 [ + + ]: 3 : if (size () != row.size ())
50 [ + - ]: 1 : throw ErrTypeMisMatch ();
51 : :
52 [ + + ]: 7 : for (size_t i = 0; i < size (); ++i)
53 : : {
54 [ + + ]: 6 : if (!_cont[i].canAssign (row[i]))
55 [ + - ]: 1 : throw ErrTypeMisMatch ();
56 : : }
57 : :
58 [ + + ]: 4 : for (size_t i = 0; i < size (); ++i)
59 : : {
60 : 3 : _cont[i].assign (row[i]);
61 : : }
62 : :
63 : 1 : return *this;
64 : : }
65 : :
66 : : DbValues&
67 : 12 : DbValues::operator= (DbValues&& row)
68 : : {
69 : : // in case of exception , both needs to stay unchanged
70 : : // first all checks, than assign
71 : : // if there is not size, it is OK, was possible moved
72 [ + + + + : 12 : if (size () && size () != row.size ())
+ + ]
73 [ + - ]: 1 : throw ErrTypeMisMatch ();
74 : :
75 [ + + ]: 16 : for (size_t i = 0; i < size (); ++i)
76 : : {
77 [ + + ]: 6 : if (!_cont[i].canAssign (row[i]))
78 [ + - ]: 1 : throw ErrTypeMisMatch ();
79 : : }
80 : :
81 : 10 : _cont = std::move (row._cont);
82 : 10 : return *this;
83 : : }
84 : :
85 : : void
86 : 3 : DbValues::swap (DbValues& other) noexcept
87 : : {
88 : : using std::swap;
89 : 3 : swap (_cont, other._cont);
90 : 3 : }
91 : :
92 : : void
93 : 1 : swap (DbValues& a, DbValues& b) noexcept
94 : : {
95 : 1 : a.swap (b);
96 : 1 : }
97 : : }
|