16d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/*
26d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Copyright (C) 2018 The Android Open Source Project
36d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
46d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Licensed under the Apache License, Version 2.0 (the "License");
56d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * you may not use this file except in compliance with the License.
66d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * You may obtain a copy of the License at
76d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
86d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *       http://www.apache.org/licenses/LICENSE-2.0
96d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
106d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Unless required by applicable law or agreed to in writing, software
116d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * distributed under the License is distributed on an "AS IS" BASIS,
126d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * See the License for the specific language governing permissions and
146d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * limitations under the License.
156d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
166d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
179c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonpackage androidx.core.content.res
186d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
196d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonimport android.content.res.ColorStateList
206d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonimport android.content.res.TypedArray
216d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonimport android.graphics.Typeface
226d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonimport android.graphics.drawable.Drawable
236889aa5fa8875d1a2842df11e24a5fbb2fd76a67Jake Whartonimport androidx.annotation.AnyRes
246889aa5fa8875d1a2842df11e24a5fbb2fd76a67Jake Whartonimport androidx.annotation.ColorInt
256889aa5fa8875d1a2842df11e24a5fbb2fd76a67Jake Whartonimport androidx.annotation.Dimension
266889aa5fa8875d1a2842df11e24a5fbb2fd76a67Jake Whartonimport androidx.annotation.RequiresApi
276889aa5fa8875d1a2842df11e24a5fbb2fd76a67Jake Whartonimport androidx.annotation.StyleableRes
286d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
296d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonprivate fun TypedArray.checkAttribute(@StyleableRes index: Int) {
306d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    if (!hasValue(index)) {
316d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton        throw IllegalArgumentException("Attribute not defined in set.")
326d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    }
336d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
346d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
356d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
366d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the boolean value for the attribute at [index] or throws [IllegalArgumentException]
376d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
386d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
396d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
406d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getBoolean
416d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
426d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getBooleanOrThrow(@StyleableRes index: Int): Boolean {
436d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
446d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getBoolean(index, false)
456d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
466d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
476d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
486d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the color value for the attribute at [index] or throws [IllegalArgumentException]
496d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
506d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
516d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
526d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getColor
536d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
546d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton@ColorInt
556d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getColorOrThrow(@StyleableRes index: Int): Int {
566d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
576d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getColor(index, 0)
586d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
596d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
606d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
616d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the color state list value for the attribute at [index] or throws
626d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * [IllegalArgumentException] if not defined.
636d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
646d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
656d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getColorStateList
666d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
676d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getColorStateListOrThrow(@StyleableRes index: Int): ColorStateList {
686d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
696d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return checkNotNull(getColorStateList(index)) {
706d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton        "Attribute value was not a color or color state list."
716d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    }
726d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
736d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
746d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
756d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the dimension value for the attribute at [index] or throws [IllegalArgumentException]
766d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
776d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
786d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
796d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getDimension
806d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
816d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getDimensionOrThrow(@StyleableRes index: Int): Float {
826d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
836d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getDimension(index, 0f)
846d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
856d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
866d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
876d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the dimension pixel offset value for the attribute at [index] or throws
886d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * [IllegalArgumentException] if not defined.
896d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
906d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
916d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getDimensionPixelOffset
926d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
936d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton@Dimension
946d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getDimensionPixelOffsetOrThrow(@StyleableRes index: Int): Int {
956d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
966d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getDimensionPixelOffset(index, 0)
976d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
986d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
996d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
1006d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the dimension pixel size value for the attribute at [index] or throws
1016d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * [IllegalArgumentException] if not defined.
1026d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
1036d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
1046d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getDimensionPixelSize
1056d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
1066d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton@Dimension
1076d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getDimensionPixelSizeOrThrow(@StyleableRes index: Int): Int {
1086d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
1096d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getDimensionPixelSize(index, 0)
1106d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
1116d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
1126d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
1136d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the drawable value for the attribute at [index] or throws [IllegalArgumentException]
1146d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
1156d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
1166d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
1176d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getDrawable
1186d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
1196d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getDrawableOrThrow(@StyleableRes index: Int): Drawable {
1206d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
1216d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getDrawable(index)
1226d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
1236d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
1246d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
1256d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the float value for the attribute at [index] or throws [IllegalArgumentException]
1266d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
1276d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
1286d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
1296d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getFloat
1306d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
1316d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getFloatOrThrow(@StyleableRes index: Int): Float {
1326d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
1336d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getFloat(index, 0f)
1346d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
1356d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
1366d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
1376d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the font value for the attribute at [index] or throws [IllegalArgumentException]
1386d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
1396d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
1406d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
1416d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getFont
1426d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
1436d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton@RequiresApi(26)
1446d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getFontOrThrow(@StyleableRes index: Int): Typeface {
1456d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
1466d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getFont(index)
1476d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
1486d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
1496d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
1506d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the integer value for the attribute at [index] or throws [IllegalArgumentException]
1516d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
1526d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
1536d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
1546d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getInt
1556d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
1566d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getIntOrThrow(@StyleableRes index: Int): Int {
1576d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
1586d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getInt(index, 0)
1596d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
1606d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
1616d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
1626d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the integer value for the attribute at [index] or throws [IllegalArgumentException]
1636d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
1646d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
1656d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
1666d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getInteger
1676d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
1686d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getIntegerOrThrow(@StyleableRes index: Int): Int {
1696d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
1706d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getInteger(index, 0)
1716d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
1726d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
1736d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
1742efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious * Retrieves the resource identifier for the attribute at [index] or throws
1752efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious * [IllegalArgumentException] if not defined.
1762efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious *
1772efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious * @see TypedArray.hasValue
1782efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious * @see TypedArray.getResourceId
1792efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious */
1802efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious@AnyRes
1812efd5d752e04a4b900d733d6df974d397923a2ddMatt Preciousfun TypedArray.getResourceIdOrThrow(@StyleableRes index: Int): Int {
1822efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious    checkAttribute(index)
1832efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious    return getResourceId(index, 0)
1842efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious}
1852efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious
1862efd5d752e04a4b900d733d6df974d397923a2ddMatt Precious/**
1876d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the string value for the attribute at [index] or throws [IllegalArgumentException]
1886d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
1896d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
1906d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
1916d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getString
1926d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
1936d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getStringOrThrow(@StyleableRes index: Int): String {
1946d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
1956d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return checkNotNull(getString(index)) {
1966d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton        "Attribute value could not be coerced to String."
1976d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    }
1986d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
1996d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
2006d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
2016d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the text value for the attribute at [index] or throws [IllegalArgumentException]
2026d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * if not defined.
2036d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
2046d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
2056d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getText
2066d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
2076d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getTextOrThrow(@StyleableRes index: Int): CharSequence {
2086d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
2096d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return checkNotNull(getText(index)) {
2106d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton        "Attribute value could not be coerced to CharSequence."
2116d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    }
2126d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
2136d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton
2146d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton/**
2156d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * Retrieve the text array value for the attribute at [index] or throws
2166d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * [IllegalArgumentException] if not defined.
2176d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton *
2186d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.hasValue
2196d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton * @see TypedArray.getTextArray
2206d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton */
2216d6a6a2697de3987e851b268f03a6554c14b59f7Jake Whartonfun TypedArray.getTextArrayOrThrow(@StyleableRes index: Int): Array<CharSequence> {
2226d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    checkAttribute(index)
2236d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton    return getTextArray(index)
2246d6a6a2697de3987e851b268f03a6554c14b59f7Jake Wharton}
22542dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen
22642dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen/**
22742dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen * Executes the given [block] function on this TypedArray and then recycles it.
22842dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen *
22942dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen * @see kotlin.io.use
23042dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen */
23142dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoeninline fun <R> TypedArray.use(block: (TypedArray) -> R): R {
23242dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen    return block(this).also {
23342dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen        recycle()
23442dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen    }
23542dd0f9b222d39029f748d8972dbc70d601ad572Steven Schoen}
236