• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "talk/xmllite/qname.h"
6 
7 #include "talk/base/common.h"
8 #include "talk/xmllite/xmlelement.h"
9 #include "talk/xmllite/xmlconstants.h"
10 
11 namespace buzz {
12 
QName()13 QName::QName() : namespace_(QN_EMPTY.namespace_),
14                  local_part_(QN_EMPTY.local_part_) {}
15 
QName(const std::string & ns,const std::string & local)16 QName::QName(const std::string & ns, const std::string & local) :
17   namespace_(ns), local_part_(local) {}
18 
QName(bool add,const std::string & ns,const std::string & local)19 QName::QName(bool add, const std::string & ns, const std::string & local) :
20   namespace_(ns), local_part_(local) {}
21 
22 static std::string
QName_LocalPart(const std::string & name)23 QName_LocalPart(const std::string & name) {
24   size_t i = name.rfind(':');
25   if (i == std::string::npos)
26     return name;
27   return name.substr(i + 1);
28 }
29 
30 static std::string
QName_Namespace(const std::string & name)31 QName_Namespace(const std::string & name) {
32   size_t i = name.rfind(':');
33   if (i == std::string::npos)
34     return STR_EMPTY;
35   return name.substr(0, i);
36 }
37 
QName(const std::string & mergedOrLocal)38 QName::QName(const std::string & mergedOrLocal) :
39   namespace_(QName_Namespace(mergedOrLocal)),
40   local_part_(QName_LocalPart(mergedOrLocal)) {}
41 
42 std::string
Merged() const43 QName::Merged() const {
44   if (namespace_ == STR_EMPTY)
45     return local_part_;
46   return namespace_ + ':' + local_part_;
47 }
48 
49 bool
operator ==(const QName & other) const50 QName::operator==(const QName & other) const {
51   return
52     local_part_ == other.local_part_ &&
53     namespace_ == other.namespace_;
54 }
55 
56 int
Compare(const QName & other) const57 QName::Compare(const QName & other) const {
58   int result = local_part_.compare(other.local_part_);
59   if (result)
60     return result;
61 
62   return namespace_.compare(other.namespace_);
63 }
64 
65 }  // namespace buzz
66