diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2005-12-01 12:20:20 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2005-12-01 12:20:20 +0000 |
commit | 9e28024aeb0a31037280e3cc579e7c289287d8ee (patch) | |
tree | 77bed436cfc4b173dec8644258fba81df08eef57 /gcc | |
parent | 5d352b2d0a626db647dc54d7b61f37545c8b2852 (diff) | |
download | gcc-9e28024aeb0a31037280e3cc579e7c289287d8ee.zip gcc-9e28024aeb0a31037280e3cc579e7c289287d8ee.tar.gz gcc-9e28024aeb0a31037280e3cc579e7c289287d8ee.tar.bz2 |
* vec.h (VEC_block_remove): New.
From-SVN: r107817
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/vec.h | 31 |
2 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e0715c4..17808f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2005-12-01 Nathan Sidwell <nathan@codesourcery.com> + + * vec.h (VEC_block_remove): New. + 2005-12-01 Gabriel Dos Reis <gdr@integrable-solutions.net> PR c/13384 @@ -366,6 +366,15 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #define VEC_unordered_remove(T,V,I) \ (VEC_OP(T,base,unordered_remove)(VEC_BASE(V),I VEC_CHECK_INFO)) +/* Remove a block of elements + void VEC_T_block_remove (VEC(T) *v, unsigned ix, unsigned len); + + Remove LEN elements starting at the IXth. Ordering is retained. + This is an O(1) operation. */ + +#define VEC_block_remove(T,V,I,L) \ + (VEC_OP(T,base,block_remove)(VEC_BASE(V),I,L VEC_CHECK_INFO)) + /* Get the address of the array of elements T *VEC_T_address (VEC(T) v) @@ -636,6 +645,17 @@ static inline T VEC_OP (T,base,unordered_remove) \ return obj_; \ } \ \ +static inline void VEC_OP (T,base,block_remove) \ + (VEC(T,base) *vec_, unsigned ix_, unsigned len_ VEC_CHECK_DECL) \ +{ \ + T *slot_; \ + \ + VEC_ASSERT (ix_ + len_ <= vec_->num, "block_remove", T, base); \ + slot_ = &vec_->vec[ix_]; \ + vec_->num -= len_; \ + memmove (slot_, slot_ + len_, (vec_->num - ix_) * sizeof (T)); \ +} \ + \ static inline T *VEC_OP (T,base,address) \ (VEC(T,base) *vec_) \ { \ @@ -886,6 +906,17 @@ static inline void VEC_OP (T,base,unordered_remove) \ vec_->vec[ix_] = vec_->vec[--vec_->num]; \ } \ \ +static inline void VEC_OP (T,base,block_remove) \ + (VEC(T,base) *vec_, unsigned ix_, unsigned len_ VEC_CHECK_DECL) \ +{ \ + T *slot_; \ + \ + VEC_ASSERT (ix_ + len_ <= vec_->num, "block_remove", T, base); \ + slot_ = &vec_->vec[ix_]; \ + vec_->num -= len_; \ + memmove (slot_, slot_ + len_, (vec_->num - ix_) * sizeof (T)); \ +} \ + \ static inline T *VEC_OP (T,base,address) \ (VEC(T,base) *vec_) \ { \ |