You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2002/07/18 22:08:16 UTC

cvs commit: xml-xerces/c/src/xercesc/util EncodingValidator.cpp EncodingValidator.hpp

knoaman     2002/07/18 13:08:16

  Added:       c/src/xercesc/util EncodingValidator.cpp
                        EncodingValidator.hpp
  Log:
  Initial checkin: feature to control strict IANA encoding name.
  
  Revision  Changes    Path
  1.1                  xml-xerces/c/src/xercesc/util/EncodingValidator.cpp
  
  Index: EncodingValidator.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * 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.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache\@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation, and was
   * originally based on software copyright (c) 2001, International
   * Business Machines, Inc., http://www.ibm.com .  For more information
   * on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * $Log: EncodingValidator.cpp,v $
   * Revision 1.1  2002/07/18 20:08:16  knoaman
   * Initial checkin: feature to control strict IANA encoding name.
   *
   */
  
  // ---------------------------------------------------------------------------
  //  Includes
  // ---------------------------------------------------------------------------
  #include <xercesc/util/EncodingValidator.hpp>
  #include <xercesc/internal/IANAEncodings.hpp>
  #include <xercesc/util/PlatformUtils.hpp>
  #include <xercesc/util/XMLRegisterCleanup.hpp>
  
  // ---------------------------------------------------------------------------
  //  Static member data initialization
  // ---------------------------------------------------------------------------
  EncodingValidator* EncodingValidator::fInstance = 0;
  
  
  // ---------------------------------------------------------------------------
  //  EncodingValidator: Constructors and Destructor
  // ---------------------------------------------------------------------------
  EncodingValidator::EncodingValidator() :
      fEncodingRegistry(0)
  {
      initializeRegistry();
  }
  
  EncodingValidator::~EncodingValidator() {
  
      delete fEncodingRegistry;
      fEncodingRegistry = 0;
  
      fInstance = 0;
  }
  
  // ---------------------------------------------------------------------------
  //  EncodingValidator: Validation methods
  // ---------------------------------------------------------------------------
  bool EncodingValidator::isValidEncoding(const XMLCh* const encName) {
  
      if (fEncodingRegistry->containsKey(encName))
  		return true;
  
  	return false;
  }
  
  
  // ---------------------------------------------------------------------------
  //  EncodingValidator: Initialization methods
  // ---------------------------------------------------------------------------
  void EncodingValidator::initializeRegistry() {
  
      fEncodingRegistry = new ValueHashTableOf<bool>(109);
  
      for (unsigned int i=0; i < gEncodingArraySize; i++) {
          fEncodingRegistry->put((void*) gEncodingArray[i], true);
      }
  }
  
  
  // ---------------------------------------------------------------------------
  //  EncodingValidator: Instance methods
  // ---------------------------------------------------------------------------
  EncodingValidator* EncodingValidator::instance() {
      static XMLRegisterCleanup instanceCleanup;
  
      if (!fInstance) {
          EncodingValidator* t = new EncodingValidator();
          if (XMLPlatformUtils::compareAndSwap((void **)&fInstance, t, 0) != 0)
          {
              delete t;
          }
          else
          {
              instanceCleanup.registerCleanup(reinitInstance);
          }
  
      }
      return (fInstance);
  }
  
  // -----------------------------------------------------------------------
  //  Notification that lazy data has been deleted
  // -----------------------------------------------------------------------
  void EncodingValidator::reinitInstance() {
  
  	delete fInstance;
  	fInstance = 0;
  }
  
  /**
    * End of file EncodingValidator.cpp
    */
  
  
  
  1.1                  xml-xerces/c/src/xercesc/util/EncodingValidator.hpp
  
  Index: EncodingValidator.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * 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.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache\@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 THE APACHE SOFTWARE FOUNDATION OR
   * ITS 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.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation, and was
   * originally based on software copyright (c) 2001, International
   * Business Machines, Inc., http://www.ibm.com .  For more information
   * on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * $Id: EncodingValidator.hpp,v 1.1 2002/07/18 20:08:16 knoaman Exp $
   */
  
  #if !defined(ENCODINGVALIDATOR_HPP)
  #define ENCODINGVALIDATOR_HPP
  
  // ---------------------------------------------------------------------------
  //  Includes
  // ---------------------------------------------------------------------------
  #include <xercesc/util/ValueHashTableOf.hpp>
  
  
  /**
    * A singleton class that checks whether an encoding name is a valid IANA
    * encoding
    */
  
  class XMLUTIL_EXPORT EncodingValidator {
  
  public:
  	// -----------------------------------------------------------------------
      //  Constructors and destructors
      // -----------------------------------------------------------------------
      ~EncodingValidator();
  
      // -----------------------------------------------------------------------
      //  Validation methods
      // -----------------------------------------------------------------------
      bool isValidEncoding(const XMLCh* const encName);
  
      // -----------------------------------------------------------------------
      //  Instance methods
      // -----------------------------------------------------------------------
  	static EncodingValidator* instance();
  
  	// -----------------------------------------------------------------------
      //  Notification that lazy data has been deleted
      // -----------------------------------------------------------------------
  	static void reinitInstance();
  
  private:
      // -----------------------------------------------------------------------
      //  Constructor and destructors
      // -----------------------------------------------------------------------
      EncodingValidator();
  
      // -----------------------------------------------------------------------
      //  Private Helpers methods
      // -----------------------------------------------------------------------
      /*
       *  Initializes the registry with a set of valid IANA encoding names
       */
       void initializeRegistry();
  
      // -----------------------------------------------------------------------
      //  Private data members
      //
      //  fEncodingRegistry
      //      Contains a set of IANA encoding names
  	//
      //  fInstance
      //      An EncodingValidator singleton instance
      // -----------------------------------------------------------------------
      ValueHashTableOf<bool>*   fEncodingRegistry;
      static EncodingValidator* fInstance;
  };
  
  
  #endif
  
  /**
    *	End file EncodingValidator.hpp
    */
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org