/*global define*/
define([
        './DeveloperError'
    ], function(
        DeveloperError) {
    "use strict";

    /**
     * Static interface for {@link Packable} types which are interpolated in a
     * different representation than their packed value.  These methods and
     * properties are expected to be defined on a constructor function.
     *
     * @exports PackableForInterpolation
     *
     * @see Packable
     */
    var PackableForInterpolation = {
        /**
         * The number of elements used to store the object into an array in its interpolatable form.
         * @type {Number}
         */
        packedInterpolationLength : undefined,

        /**
         * Converts a packed array into a form suitable for interpolation.
         * @function
         *
         * @param {Number[]} packedArray The packed array.
         * @param {Number} [startingIndex=0] The index of the first element to be converted.
         * @param {Number} [lastIndex=packedArray.length] The index of the last element to be converted.
         * @param {Number[]} result The object into which to store the result.
         */
        convertPackedArrayForInterpolation : DeveloperError.throwInstantiationError,

        /**
         * Retrieves an instance from a packed array converted with {@link PackableForInterpolation.convertPackedArrayForInterpolation}.
         * @function
         *
         * @param {Number[]} array The array previously packed for interpolation.
         * @param {Number[]} sourceArray The original packed array.
         * @param {Number} [startingIndex=0] The startingIndex used to convert the array.
         * @param {Number} [lastIndex=packedArray.length] The lastIndex used to convert the array.
         * @param {Object} [result] The object into which to store the result.
         * @returns {Object} The modified result parameter or a new Object instance if one was not provided.
         */
        unpackInterpolationResult : DeveloperError.throwInstantiationError
    };

    return PackableForInterpolation;
});