1917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/*
2917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Copyright (C) 2008 The Android Open Source Project
3917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *
4917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Licensed under the Apache License, Version 2.0 (the "License");
5917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * you may not use this file except in compliance with the License.
6917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * You may obtain a copy of the License at
7917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *
8917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *      http://www.apache.org/licenses/LICENSE-2.0
9917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *
10917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Unless required by applicable law or agreed to in writing, software
11917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * distributed under the License is distributed on an "AS IS" BASIS,
12917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * See the License for the specific language governing permissions and
14917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * limitations under the License.
15917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */
16917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
17917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpackage com.android.dexgen.rop.cst;
18917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
19917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.rop.type.Type;
20917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
21917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/**
22917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Utility for turning types into zeroes.
23917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */
24917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpublic final class Zeroes {
25917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
26917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * This class is uninstantiable.
27917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
28917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    private Zeroes() {
29917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        // This space intentionally left blank.
30917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
31917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
32917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
33917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Gets the "zero" (or {@code null}) value for the given type.
34917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
35917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param type {@code non-null;} the type in question
36917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @return {@code non-null;} its "zero" value
37917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
38917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public static Constant zeroFor(Type type) {
39917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        switch (type.getBasicType()) {
40917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_BOOLEAN: return CstBoolean.VALUE_FALSE;
41917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_BYTE:    return CstByte.VALUE_0;
42917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_CHAR:    return CstChar.VALUE_0;
43917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_DOUBLE:  return CstDouble.VALUE_0;
44917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_FLOAT:   return CstFloat.VALUE_0;
45917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_INT:     return CstInteger.VALUE_0;
46917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_LONG:    return CstLong.VALUE_0;
47917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_SHORT:   return CstShort.VALUE_0;
48917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            case Type.BT_OBJECT:  return CstKnownNull.THE_ONE;
49917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            default: {
50917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul                throw new UnsupportedOperationException("no zero for type: " +
51917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul                        type.toHuman());
52917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            }
53917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        }
54917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
55917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul}
56