Merge remote-tracking branch 'origin/master' into windows
[scilab.git] / scilab / modules / ast / src / cpp / analysis / Data.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include "tools.hxx"
17 #include "data/Data.hxx"
18
19 namespace analysis
20 {
21
22 Data::Data(const bool _known, const symbol::Symbol & sym) : known(_known), valid(true), sharedSyms()
23 {
24     sharedSyms.emplace(sym);
25 }
26
27 void Data::clear()
28 {
29     valid = true;
30     sharedSyms.clear();
31 }
32
33 void Data::add(const symbol::Symbol & sym)
34 {
35     if (valid)
36     {
37         sharedSyms.emplace(sym);
38     }
39 }
40
41 void Data::rem(const symbol::Symbol & sym)
42 {
43     if (valid)
44     {
45         sharedSyms.erase(sym);
46     }
47 }
48
49 bool Data::hasOneOwner() const
50 {
51     return valid && known && (sharedSyms.size() == 1);
52 }
53
54 bool Data::isDeletable() const
55 {
56     return valid && known && sharedSyms.empty();
57 }
58
59 bool Data::same(Data * data)
60 {
61     return (valid && data->valid) && (data == this || (known == data->known && sharedSyms == data->sharedSyms));
62 }
63
64 void Data::setValidity(const bool v)
65 {
66     if (valid && !v)
67     {
68         valid = false;
69         sharedSyms.clear();
70     }
71 }
72
73 std::ostream & operator<<(std::ostream & out, const Data & data)
74 {
75     out << "known:" << (data.known ? "T" : "F")
76         << ", valid:" << (data.valid ? "T" : "F")
77         << ", ";
78
79     tools::printSet(data.sharedSyms, out);
80
81     return out;
82 }
83
84 } // namespace analysis