michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- michael@0: * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ : michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "mozStorageBindingParamsArray.h" michael@0: #include "mozStorageBindingParams.h" michael@0: #include "StorageBaseStatementInternal.h" michael@0: michael@0: namespace mozilla { michael@0: namespace storage { michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: //// BindingParamsArray michael@0: michael@0: BindingParamsArray::BindingParamsArray( michael@0: StorageBaseStatementInternal *aOwningStatement michael@0: ) michael@0: : mOwningStatement(aOwningStatement) michael@0: , mLocked(false) michael@0: { michael@0: } michael@0: michael@0: void michael@0: BindingParamsArray::lock() michael@0: { michael@0: NS_ASSERTION(mLocked == false, "Array has already been locked!"); michael@0: mLocked = true; michael@0: michael@0: // We also no longer need to hold a reference to our statement since it owns michael@0: // us. michael@0: mOwningStatement = nullptr; michael@0: } michael@0: michael@0: const StorageBaseStatementInternal * michael@0: BindingParamsArray::getOwner() const michael@0: { michael@0: return mOwningStatement; michael@0: } michael@0: michael@0: NS_IMPL_ISUPPORTS( michael@0: BindingParamsArray, michael@0: mozIStorageBindingParamsArray michael@0: ) michael@0: michael@0: /////////////////////////////////////////////////////////////////////////////// michael@0: //// mozIStorageBindingParamsArray michael@0: michael@0: NS_IMETHODIMP michael@0: BindingParamsArray::NewBindingParams(mozIStorageBindingParams **_params) michael@0: { michael@0: NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED); michael@0: michael@0: nsCOMPtr params( michael@0: mOwningStatement->newBindingParams(this)); michael@0: NS_ENSURE_TRUE(params, NS_ERROR_UNEXPECTED); michael@0: michael@0: params.forget(_params); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: BindingParamsArray::AddParams(mozIStorageBindingParams *aParameters) michael@0: { michael@0: NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED); michael@0: michael@0: BindingParams *params = static_cast(aParameters); michael@0: michael@0: // Check to make sure that this set of parameters was created with us. michael@0: if (params->getOwner() != this) michael@0: return NS_ERROR_UNEXPECTED; michael@0: michael@0: NS_ENSURE_TRUE(mArray.AppendElement(params), NS_ERROR_OUT_OF_MEMORY); michael@0: michael@0: // Lock the parameters only after we've successfully added them. michael@0: params->lock(); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: BindingParamsArray::GetLength(uint32_t *_length) michael@0: { michael@0: *_length = length(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: } // namespace storage michael@0: } // namespace mozilla