Ejemplo n.º 1
0
/**
 * See nsIMutableArray
 */
NS_IMETHODIMP
sbPropertyArray::AppendElement(nsISupports* aElement,
                               bool aWeak)
{
  NS_ENSURE_ARG_POINTER(aElement);

  // No support for weak references here
  NS_ENSURE_FALSE(aWeak, NS_ERROR_FAILURE);

  nsresult rv;
  nsCOMPtr<sbIProperty> property = do_QueryInterface(aElement, &rv);
  NS_ENSURE_SUCCESS(rv, rv);

  nsAutoLock lock(mArrayLock);

  if (mStrict) {
    bool valid;
    rv = PropertyIsValid(property, &valid);
    NS_ENSURE_SUCCESS(rv, rv);

    NS_ENSURE_TRUE(valid, NS_ERROR_ILLEGAL_VALUE);
  }

  bool success = mArray.AppendObject(property);
  NS_ENSURE_STATE(success);

  return NS_OK;
}
Ejemplo n.º 2
0
/**
 * See nsIMutableArray
 */
NS_IMETHODIMP
sbPropertyArray::ReplaceElementAt(nsISupports* aElement,
                                  PRUint32 aIndex,
                                  bool aWeak)
{
  NS_ENSURE_ARG_POINTER(aElement);
  NS_ENSURE_ARG(aIndex < static_cast<PRUint32>(mArray.Count()));

  // No support for weak references here
  NS_ENSURE_FALSE(aWeak, NS_ERROR_NOT_IMPLEMENTED);

  nsresult rv;
  nsCOMPtr<sbIProperty> property = do_QueryInterface(aElement, &rv);
  NS_ENSURE_SUCCESS(rv, rv);

  nsAutoLock lock(mArrayLock);

  if (mStrict) {
    bool valid;
    rv = PropertyIsValid(property, &valid);
    NS_ENSURE_SUCCESS(rv, rv);

    NS_ENSURE_TRUE(valid, NS_ERROR_ILLEGAL_VALUE);
  }

  bool success = mArray.ReplaceObjectAt(property, aIndex);
  NS_ENSURE_STATE(success);

  return NS_OK;
}
/**
 * See nsIMutableArray
 */
NS_IMETHODIMP
sbPropertyArray::InsertElementAt(nsISupports* aElement,
                                 PRUint32 aIndex,
                                 PRBool aWeak)
{
  NS_ENSURE_ARG_POINTER(aElement);
  NS_ENSURE_ARG_MAX((PRInt32)aIndex, mArray.Count());

  // No support for weak references here
  NS_ENSURE_FALSE(aWeak, NS_ERROR_FAILURE);

  nsresult rv;
  nsCOMPtr<sbIProperty> property = do_QueryInterface(aElement, &rv);
  NS_ENSURE_SUCCESS(rv, rv);

  nsAutoLock lock(mArrayLock);

  if (mStrict) {
    PRBool valid;
    rv = PropertyIsValid(property, &valid);
    NS_ENSURE_SUCCESS(rv, rv);

    NS_ENSURE_TRUE(valid, NS_ERROR_ILLEGAL_VALUE);
  }

  PRBool success = mArray.InsertObjectAt(property, aIndex);
  NS_ENSURE_STATE(success);

  return NS_OK;
}