1 //
2 // Author:
3 //   Jb Evain (jbevain@gmail.com)
4 //
5 // Copyright (c) 2008 - 2015 Jb Evain
6 // Copyright (c) 2008 - 2011 Novell, Inc.
7 //
8 // Licensed under the MIT/X11 license.
9 //
10 
11 using System;
12 
13 using Mono.Collections.Generic;
14 
15 namespace Mono.Cecil {
16 
17 	sealed class ParameterDefinitionCollection : Collection<ParameterDefinition> {
18 
19 		readonly IMethodSignature method;
20 
ParameterDefinitionCollection(IMethodSignature method)21 		internal ParameterDefinitionCollection (IMethodSignature method)
22 		{
23 			this.method = method;
24 		}
25 
ParameterDefinitionCollection(IMethodSignature method, int capacity)26 		internal ParameterDefinitionCollection (IMethodSignature method, int capacity)
27 			: base (capacity)
28 		{
29 			this.method = method;
30 		}
31 
OnAdd(ParameterDefinition item, int index)32 		protected override void OnAdd (ParameterDefinition item, int index)
33 		{
34 			item.method = method;
35 			item.index = index;
36 		}
37 
OnInsert(ParameterDefinition item, int index)38 		protected override void OnInsert (ParameterDefinition item, int index)
39 		{
40 			item.method = method;
41 			item.index = index;
42 
43 			for (int i = index; i < size; i++)
44 				items [i].index = i + 1;
45 		}
46 
OnSet(ParameterDefinition item, int index)47 		protected override void OnSet (ParameterDefinition item, int index)
48 		{
49 			item.method = method;
50 			item.index = index;
51 		}
52 
OnRemove(ParameterDefinition item, int index)53 		protected override void OnRemove (ParameterDefinition item, int index)
54 		{
55 			item.method = null;
56 			item.index = -1;
57 
58 			for (int i = index + 1; i < size; i++)
59 				items [i].index = i - 1;
60 		}
61 	}
62 }
63