1 // Copyright (C) 2018-2020 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #include <config.h>
8 
9 #include <cc/stamped_element.h>
10 
11 namespace isc {
12 namespace data {
13 
StampedElement()14 StampedElement::StampedElement()
15     : BaseStampedElement(), server_tags_() {
16 }
17 
18 bool
hasServerTag(const ServerTag & server_tag) const19 StampedElement::hasServerTag(const ServerTag& server_tag) const {
20     return (server_tags_.count(server_tag) > 0);
21 }
22 
23 void
delServerTag(const std::string & server_tag)24 StampedElement::delServerTag(const std::string& server_tag) {
25     if (!server_tags_.erase(ServerTag(server_tag))) {
26         isc_throw(NotFound, "can't find server tag '" << server_tag << "' to delete");
27     }
28 }
29 
30 bool
hasAllServerTag() const31 StampedElement::hasAllServerTag() const {
32     return (hasServerTag(ServerTag(ServerTag::ALL)));
33 }
34 
35 
36 ElementPtr
getMetadata() const37 StampedElement::getMetadata() const {
38     ElementPtr metadata = Element::createMap();
39     ElementPtr tags = Element::createList();
40 
41     for (auto server_tag : server_tags_) {
42         tags->add(Element::create(server_tag.get()));
43     }
44 
45     metadata->set("server-tags", tags);
46     return (metadata);
47 }
48 
49 } // end of namespace isc::data
50 } // end of namespace isc
51