Mercurial > hg > orthanc
diff Core/RestApi/RestApiPath.cpp @ 966:886652370ff2
accelerating REST API matching
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 27 Jun 2014 15:33:22 +0200 |
parents | a811bdf8b8eb |
children | c550e99c452b |
line wrap: on
line diff
--- a/Core/RestApi/RestApiPath.cpp Fri Jun 27 13:58:02 2014 +0200 +++ b/Core/RestApi/RestApiPath.cpp Fri Jun 27 15:33:22 2014 +0200 @@ -33,6 +33,8 @@ #include "../PrecompiledHeaders.h" #include "RestApiPath.h" +#include "../OrthancException.h" + #include <cassert> namespace Orthanc @@ -89,6 +91,8 @@ UriComponents& trailing, const UriComponents& uri) const { + assert(uri_.size() == components_.size()); + if (uri.size() < uri_.size()) { return false; @@ -135,4 +139,42 @@ UriComponents trailing; return Match(components, trailing, uri); } + + + bool RestApiPath::IsWildcardLevel(size_t level) const + { + assert(uri_.size() == components_.size()); + + if (level >= uri_.size()) + { + throw OrthancException(ErrorCode_ParameterOutOfRange); + } + + return uri_[level].length() == 0; + } + + const std::string& RestApiPath::GetWildcardName(size_t level) const + { + assert(uri_.size() == components_.size()); + + if (!IsWildcardLevel(level)) + { + throw OrthancException(ErrorCode_BadParameterType); + } + + return components_[level]; + } + + const std::string& RestApiPath::GetLevelName(size_t level) const + { + assert(uri_.size() == components_.size()); + + if (IsWildcardLevel(level)) + { + throw OrthancException(ErrorCode_BadParameterType); + } + + return uri_[level]; + } } +