/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: NPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is 
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or 
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the NPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the NPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

#include "nsISupports.idl"

[ptr] native nsAString(nsAString);
[ptr] native nsACString(nsACString);

/**
 * nsIStringService - A factory for nsAString and nsACString objects.
 *
 * UNDER_REVIEW
 */

[uuid(1e66d70c-d649-441b-ac90-bf6429ead7da)]
interface nsIStringService : nsISupports 
{
  /**
   * Creates an nsAString from a |PRUnichar| buffer and length.
   *
   * Must be destroyed by deleteAString();
   * 
   * @param aString : A unicode string assigned to the new nsAString
   * @param aLength : The length of the string to be assigned to the new 
   *                  nsAString
   */

  nsAString createAString(in wstring aString, in long aLength); 

  /**
   * Creates an nsAString from a |char| buffer and lenth.
   * 
   * Must be destroyed by deleteACString();
   *
   * @param aString : A string assigned to the new nsACString
   * @param aLength : The length of the string to be assigned to the new 
   *                  nsACString
   */

  nsACString createACString(in string aString, in long aLength); 



  /**
   * Frees memory associated with the |nsAString|.  After calling this method,
   * the |aString| is no longer valid.
   *
   * @param aString : The |nsAString| object.
   */
  void deleteAString(in nsAString aString);

  /**
   * Frees memory associated with the |nsACString|.  After calling this method,
   * the |aString| is no longer valid.
   *
   * @param aString : The |nsACString| object.
   */
  void deleteACString(in nsACString aString);

  /**
   * Returns a new |PRUnichar| buffer containing the bytes of |aString|.  This new 
   * buffer may contain embedded null characters.  The length of this new buffer
   * is given by |aString.Length()|.
   *
   * Allocates and returns a new |char| buffer which you must free with 
   * |nsMemory::Free|.
   *
   * @param aString : The |nsAString| object.
   * @return a new |PRUnichar| buffer you must free with |nsMemory::Free|.
   */

  wstring getWString(in AString aString);

  /**
   * Returns a new |char| buffer containing the bytes of |aString|.  This new 
   * buffer may contain embedded null characters.  The length of this new buffer
   * is given by |aString.Length()|.
   *
   * Allocates and returns a new |char| buffer which you must free with 
   * |nsMemory::Free|.
   *
   * @param aString : The |nsACString| object.
   * @return a new |char| buffer you must free with |nsMemory::Free|.
   */

  string getString(in ACString aString);
};
