2 * Copyright 2011 BitMeister Inc.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package jp.bitmeister.asn1.type.builtin;
18 import java.util.ArrayList;
19 import java.util.Collection;
21 import jp.bitmeister.asn1.annotation.ASN1BuiltIn;
22 import jp.bitmeister.asn1.annotation.ASN1Identifier;
23 import jp.bitmeister.asn1.annotation.ASN1Tag;
24 import jp.bitmeister.asn1.annotation.ASN1XmlTypeName;
25 import jp.bitmeister.asn1.processor.ASN1Visitor;
26 import jp.bitmeister.asn1.type.ASN1TagClass;
27 import jp.bitmeister.asn1.type.ASN1TagMode;
28 import jp.bitmeister.asn1.type.ASN1Type;
29 import jp.bitmeister.asn1.type.CollectionType;
32 * Represents ASN.1 'SEQUENCE OF' type.
35 * This is the class used for defining 'SEQUENCE OF' types. Generic type
36 * parameter {@code T} indicates component type of the 'SEQUENCE OF' type.
37 * Constructors of a sub-class of {@code SEQUENCE_OF} must call parent
38 * constructor with {@code componentType} parameter that is the class object of
42 * @author WATANABE, Jun. <jwat at bitmeister.jp>
45 @ASN1Identifier("SEQUENCE")
46 @ASN1XmlTypeName("SEQUENCE_OF")
47 @ASN1Tag(tagClass = ASN1TagClass.UNIVERSAL, value = 16, tagMode = ASN1TagMode.IMPLICIT)
48 public abstract class SEQUENCE_OF<T extends ASN1Type> extends CollectionType<T> {
51 * Instantiate an empty {@code SEQUENCE_OF}.
53 * @param componentType
54 * The class instance of component type.
56 public SEQUENCE_OF(Class<T> componentType) {
61 * Instantiate a {@code SEQUENCE_OF} and initialize it with the components.
63 * @param componentType
64 * The class instance of component type.
66 * Components to be set this instance.
68 public SEQUENCE_OF(Class<T> componentType, T... components) {
69 super(componentType, components);
75 * @see jp.bitmeister.asn1.type.CollectionType#newCollection()
78 protected Collection<T> newCollection() {
79 return new ArrayList<T>();
86 * jp.bitmeister.asn1.type.ASN1Type#accept(jp.bitmeister.asn1.processor.
90 public <R, E extends Throwable> R accept(ASN1Visitor<R, E> visitor)
92 return visitor.visit(this);