mozStorageBindingParamsArray.cpp (2241B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 2 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ : 3 * This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "mozStorageBindingParamsArray.h" 8 #include "mozStorageBindingParams.h" 9 #include "StorageBaseStatementInternal.h" 10 11 namespace mozilla { 12 namespace storage { 13 14 //////////////////////////////////////////////////////////////////////////////// 15 //// BindingParamsArray 16 17 BindingParamsArray::BindingParamsArray( 18 StorageBaseStatementInternal* aOwningStatement) 19 : mOwningStatement(aOwningStatement), mLocked(false) {} 20 21 void BindingParamsArray::lock() { 22 NS_ASSERTION(mLocked == false, "Array has already been locked!"); 23 mLocked = true; 24 25 // We also no longer need to hold a reference to our statement since it owns 26 // us. 27 mOwningStatement = nullptr; 28 } 29 30 const StorageBaseStatementInternal* BindingParamsArray::getOwner() const { 31 return mOwningStatement; 32 } 33 34 NS_IMPL_ISUPPORTS(BindingParamsArray, mozIStorageBindingParamsArray) 35 36 /////////////////////////////////////////////////////////////////////////////// 37 //// mozIStorageBindingParamsArray 38 39 NS_IMETHODIMP 40 BindingParamsArray::NewBindingParams(mozIStorageBindingParams** _params) { 41 NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED); 42 43 nsCOMPtr<mozIStorageBindingParams> params( 44 mOwningStatement->newBindingParams(this)); 45 NS_ENSURE_TRUE(params, NS_ERROR_UNEXPECTED); 46 47 params.forget(_params); 48 return NS_OK; 49 } 50 51 NS_IMETHODIMP 52 BindingParamsArray::AddParams(mozIStorageBindingParams* aParameters) { 53 NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED); 54 55 BindingParams* params = static_cast<BindingParams*>(aParameters); 56 57 // Check to make sure that this set of parameters was created with us. 58 if (params->getOwner() != this) return NS_ERROR_UNEXPECTED; 59 60 mArray.AppendElement(params); 61 62 // Lock the parameters only after we've successfully added them. 63 params->lock(); 64 65 return NS_OK; 66 } 67 68 NS_IMETHODIMP 69 BindingParamsArray::GetLength(uint32_t* _length) { 70 *_length = length(); 71 return NS_OK; 72 } 73 74 } // namespace storage 75 } // namespace mozilla