/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
// EXTERNAL INCLUDES
-#include <cstring>
#include <algorithm>
+#include <cctype>
+#include <string>
+#include <string_view>
// INTERNAL INCLUDES
#include "dali-toolkit/devel-api/builder/tree-node.h"
#include "dali-toolkit/internal/builder/tree-node-manipulator.h"
-namespace
+namespace Dali
{
-bool CaseInsensitiveCharacterCompare( unsigned char a, unsigned char b )
-{
- // Converts to lower case in the current locale.
- return std::tolower( a ) == std::tolower( b );
-}
-
/**
* return true if the lower cased ASCII strings are equal.
*/
-bool CaseInsensitiveStringCompare( const std::string& a, const std::string& b )
+bool CaseInsensitiveStringCompare(std::string_view a, std::string_view b)
{
- bool result = false;
- if( a.length() == b.length() )
- {
- result = std::equal( a.begin(), a.end(), b.begin(), CaseInsensitiveCharacterCompare );
- }
- return result;
+ return (a.length() == b.length()) && std::equal(a.begin(), a.end(), b.begin(), [](auto x, auto y) {
+ return std::tolower(x) == std::tolower(y);
+ });
}
-} // anonymous namespace
-
-
-namespace Dali
-{
-
namespace Toolkit
{
-
TreeNode::TreeNode()
- : mName(NULL),
- mParent(NULL),
- mNextSibling(NULL),
- mFirstChild(NULL),
- mLastChild(NULL),
- mStringValue(NULL),
- mType(TreeNode::IS_NULL),
- mSubstituion(false)
+: mName(NULL),
+ mParent(NULL),
+ mNextSibling(NULL),
+ mFirstChild(NULL),
+ mLastChild(NULL),
+ mStringValue(NULL),
+ mType(TreeNode::IS_NULL),
+ mSubstituion(false)
{
}
TreeNode::~TreeNode()
{
-
}
const char* TreeNode::GetName() const
size_t TreeNode::Size() const
{
- size_t c = 0;
+ size_t c = 0;
TreeNode* p = mFirstChild;
while(p)
{
return c;
}
-size_t TreeNode::Count(const std::string& childName) const
+size_t TreeNode::Count(std::string_view childName) const
{
const TreeNode* c = GetChild(childName);
if(c)
}
}
-const TreeNode* TreeNode::GetChild(const std::string& childName) const
+const TreeNode* TreeNode::GetChild(std::string_view childName) const
{
const TreeNode* p = mFirstChild;
while(p)
{
- if(p->mName && (std::string(p->mName) == childName) )
+ if(p->mName && (std::string_view(p->mName) == childName))
{
return p;
}
return NULL;
}
-
-const TreeNode* TreeNode::GetChildIgnoreCase(const std::string& childName) const
+const TreeNode* TreeNode::GetChildIgnoreCase(std::string_view childName) const
{
const TreeNode* p = mFirstChild;
while(p)
{
- if(p->mName)
+ if(p->mName && CaseInsensitiveStringCompare(p->mName, childName))
{
- std::string nodeName(p->mName);
- if( CaseInsensitiveStringCompare( nodeName, childName) )
- {
- return p;
- }
+ return p;
}
p = p->mNextSibling;
}
return NULL;
}
-const TreeNode* TreeNode::Find(const std::string& childName) const
+const TreeNode* TreeNode::Find(std::string_view childName) const
{
- if(mName && std::string(mName) == childName)
+ if(mName && std::string_view(mName) == childName)
{
return this;
}
return ConstIterator(mFirstChild);
}
-
TreeNode::ConstIterator TreeNode::CEnd() const
{
return ConstIterator(NULL);
}
-
-TreeNode::ConstIterator::ConstIterator(TreeNode* v) : mNode(v)
+TreeNode::ConstIterator::ConstIterator(TreeNode* v)
+: mNode(v)
{
-
}
-TreeNode::ConstIterator& TreeNode::ConstIterator::operator ++()
+TreeNode::ConstIterator& TreeNode::ConstIterator::operator++()
{
if(mNode)
{
return *this;
}
-TreeNode::ConstIterator TreeNode::ConstIterator::operator ++(int)
+TreeNode::ConstIterator TreeNode::ConstIterator::operator++(int)
{
TreeNode::ConstIterator ret(mNode);
return ret;
}
-TreeNode::KeyNodePair TreeNode::ConstIterator::operator *()
+TreeNode::KeyNodePair TreeNode::ConstIterator::operator*()
{
return KeyNodePair(mNode->mName, *mNode);
}
-bool TreeNode::ConstIterator::operator!=( const TreeNode::ConstIterator& rhs ) const
+bool TreeNode::ConstIterator::operator!=(const TreeNode::ConstIterator& rhs) const
{
return mNode != rhs.mNode;
}