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/. */
7 #ifndef mozStorageBindingParamsArray_h
8 #define mozStorageBindingParamsArray_h
10 #include "nsAutoPtr.h"
12 #include "mozilla/Attributes.h"
14 #include "mozIStorageBindingParamsArray.h"
19 class StorageBaseStatementInternal
;
21 class BindingParamsArray MOZ_FINAL
: public mozIStorageBindingParamsArray
23 typedef nsTArray
< nsCOMPtr
<mozIStorageBindingParams
> > array_type
;
25 ~BindingParamsArray() {}
28 NS_DECL_THREADSAFE_ISUPPORTS
29 NS_DECL_MOZISTORAGEBINDINGPARAMSARRAY
31 explicit BindingParamsArray(StorageBaseStatementInternal
*aOwningStatement
);
33 typedef array_type::size_type size_type
;
36 * Locks the array and prevents further modification to it (such as adding
37 * more elements to it).
42 * @return the pointer to the owning BindingParamsArray.
44 const StorageBaseStatementInternal
*getOwner() const;
47 * @return the number of elemets the array contains.
49 const size_type
length() const { return mArray
.Length(); }
53 iterator(BindingParamsArray
*aArray
,
60 iterator
&operator++(int)
66 bool operator==(const iterator
&aOther
) const
68 return mIndex
== aOther
.mIndex
;
70 bool operator!=(const iterator
&aOther
) const
72 return !(*this == aOther
);
74 mozIStorageBindingParams
*operator*()
76 NS_ASSERTION(mIndex
< mArray
->length(),
77 "Dereferenceing an invalid value!");
78 return mArray
->mArray
[mIndex
].get();
82 BindingParamsArray
*mArray
;
87 * Obtains an iterator pointing to the beginning of the array.
89 inline iterator
begin()
91 NS_ASSERTION(length() != 0,
92 "Obtaining an iterator to the beginning with no elements!");
93 return iterator(this, 0);
97 * Obtains an iterator pointing to the end of the array.
101 NS_ASSERTION(mLocked
,
102 "Obtaining an iterator to the end when we are not locked!");
103 return iterator(this, length());
106 nsCOMPtr
<StorageBaseStatementInternal
> mOwningStatement
;
110 friend class iterator
;
113 } // namespace storage
114 } // namespace mozilla
116 #endif // mozStorageBindingParamsArray_h