    /** * This class manages one side of a `Matrix`. * @private */Ext.define('Ext.data.matrix.Side', {    requires: [        'Ext.data.matrix.Slice'    ],     /**     * @property {Ext.data.matrix.Side} inverse     * Reference to the opposite side of the matrix.     * @readonly     */     constructor: function (matrix, index, role) {        var me = this;         /**         * @property {Ext.data.matrix.Matrix} matrix         * @readonly         */        me.matrix = matrix;         /**         * @property {Number} index          * Either 0 or 1 which is the index of our id value in an association entry.         * @readonly         */        me.index = index;         /**         * @property {Ext.data.schema.Role} role         * The role for this side of the matrix.         * @readonly         */        me.role = role;         /**         * @property {Object} slices          * Keyed by the id for this side of the matrix to yield a `Slice`.         * @readonly         */        me.slices = {};    },     commit: function() {        var slices = this.slices,            id;         for (id in slices) {            slices[id].commit();        }    },     get: function (id1, id2) {        var me = this,            slices = me.slices,            slice = slices[id1] ||                   (slices[id1] = new Ext.data.matrix.Slice(me, id1));         return (id2 || id2 === 0) ? slice.members[id2] : slice;    },     update: function (id1, id2, state) {        var slice = this.get(id1);        return slice.update(id2, state);    },     updateId: function(oldId, newId) {        var slice = this.get(oldId);        if (slice) {            slice.updateId(newId);        }    },     destroy: function() {        var me = this,            slices = me.slices,            id;         for (id in slices) {            slices[id].destroy();        }         me.inverse = me.matrix = me.role = me.slices = null;        me.callParent();    }});