/* * $Id: URI.cpp,v 1.5 2006/03/05 05:00:09 ozawa Exp $ * * Copyright 2005- ONGS Inc. All rights reserved. * * author: Masanori OZAWA (ozawa@ongs.co.jp) * version: $Revision: 1.5 $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY ONGS INC ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL ONGS INC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are * those of the authors and should not be interpreted as representing official * policies, either expressed or implied, of the ONGS Inc. * */ #include "xdtp.h" #include "URI.h" #include "URI_Impl.h" #include "URI_OldImpl.h" using namespace XDTP; URI::URI() { m_URIPtr = NULL; } URI::~URI() { if (m_URIPtr) xmlFreeURI(m_URIPtr); } /** * URIを解析します。 * * @param uri URI * @return 解析結果を処理するURIオブジェクト */ RefPtr URI::parse(const Glib::ustring& uri) { if (getenv(XDTP_URI_TRANSITION)) { #ifdef DEBUG static bool first = false; if (!first) { fprintf(stdout, "%s: enable XDTP_URI_TRANSITION" LINE_SEP, APP_NAME); first = true; } #endif RefPtr result(new URI_OldImpl(uri)); return result; } RefPtr result(new URI_Impl(uri)); return result; } const URI& URI::operator=(const URI& uri) { if (m_URIPtr) { xmlFreeURI(m_URIPtr); m_URIPtr = NULL; } /** * URIは正規化後の問題のない状態を保持するため、 * URI_Impl , URI_OldImpl 双方の違いをここで * 処理する必要はない。 * これらクラスは、コンストラクタの段階で問題を * 吸収する処理を行う。 by ozawa 2005/11/02 */ xmlChar* uristr = xmlSaveUri(uri.m_URIPtr); if (!uristr) THROW("Out of memory!"); m_URIPtr = xmlParseURI((const char*)uristr); xmlFree(uristr); return (*this); } Glib::ustring URI::toString() const { Glib::ustring result; xmlChar* uristr = xmlSaveUri(m_URIPtr); if (!uristr) THROW("Out of memory!"); result = (const char*)uristr; xmlFree(uristr); return result; }