diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2006-05-09 15:59:35 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2006-05-09 15:59:35 +0000 |
commit | 77ce2751912eef6e7d8af75959358de220e7eb80 (patch) | |
tree | 88bf0da7b6719df5bd53c9738ce60acb80f844dc /cpp/src/Ice/IdentityUtil.cpp | |
parent | Cleaned up slice files, fixed IceGrid node with collocated registry warning (diff) | |
download | ice-77ce2751912eef6e7d8af75959358de220e7eb80.tar.bz2 ice-77ce2751912eef6e7d8af75959358de220e7eb80.tar.xz ice-77ce2751912eef6e7d8af75959358de220e7eb80.zip |
Added back static identity string functions
Diffstat (limited to 'cpp/src/Ice/IdentityUtil.cpp')
-rw-r--r-- | cpp/src/Ice/IdentityUtil.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/cpp/src/Ice/IdentityUtil.cpp b/cpp/src/Ice/IdentityUtil.cpp new file mode 100644 index 00000000000..c46bcb50178 --- /dev/null +++ b/cpp/src/Ice/IdentityUtil.cpp @@ -0,0 +1,90 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <Ice/IdentityUtil.h> +#include <Ice/LocalException.h> +#include <IceUtil/StringUtil.h> + +using namespace std; +using namespace Ice; +using namespace IceInternal; + +Identity +Ice::stringToIdentity(const string& s) +{ + Identity ident; + + // + // Find unescaped separator. + // + string::size_type slash = string::npos, pos = 0; + while((pos = s.find('/', pos)) != string::npos) + { + if(pos == 0 || s[pos - 1] != '\\') + { + if(slash == string::npos) + { + slash = pos; + } + else + { + // + // Extra unescaped slash found. + // + IdentityParseException ex(__FILE__, __LINE__); + ex.str = s; + throw ex; + } + } + pos++; + } + + if(slash == string::npos) + { + if(!IceUtil::unescapeString(s, 0, s.size(), ident.name)) + { + IdentityParseException ex(__FILE__, __LINE__); + ex.str = s; + throw ex; + } + } + else + { + if(!IceUtil::unescapeString(s, 0, slash, ident.category)) + { + IdentityParseException ex(__FILE__, __LINE__); + ex.str = s; + throw ex; + } + if(slash + 1 < s.size()) + { + if(!IceUtil::unescapeString(s, slash + 1, s.size(), ident.name)) + { + IdentityParseException ex(__FILE__, __LINE__); + ex.str = s; + throw ex; + } + } + } + + return ident; +} + +string +Ice::identityToString(const Identity& ident) +{ + if(ident.category.empty()) + { + return IceUtil::escapeString(ident.name, "/"); + } + else + { + return IceUtil::escapeString(ident.category, "/") + '/' + IceUtil::escapeString(ident.name, "/"); + } +} |