1d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein/* 2d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Copyright (C) 2011 The Android Open Source Project 3d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * 4d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Licensed under the Apache License, Version 2.0 (the "License"); 5d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * you may not use this file except in compliance with the License. 6d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * You may obtain a copy of the License at 7d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * 8d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * http://www.apache.org/licenses/LICENSE-2.0 9d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * 10d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Unless required by applicable law or agreed to in writing, software 11d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * distributed under the License is distributed on an "AS IS" BASIS, 12d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * See the License for the specific language governing permissions and 14d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * limitations under the License. 15d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 16d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 17537939ca06a47668f719ee06159303bcd3175c69Dan Bornsteinpackage com.android.dx.io.instructions; 18d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 19d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein/** 20d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Base implementation of {@link CodeCursor}. 21d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 22d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornsteinpublic abstract class BaseCodeCursor implements CodeCursor { 23d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein /** base address map */ 24d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein private final AddressMap baseAddressMap; 25d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 269289c847255727d063971b6f6ffe68ab870a3ebbOrion Hodson /** next index within {@link #baseAddressMap} to read from or write to */ 27d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein private int cursor; 28d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 29d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein /** 30d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Constructs an instance. 31d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 32d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public BaseCodeCursor() { 33d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein this.baseAddressMap = new AddressMap(); 34d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein this.cursor = 0; 35d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 36d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 37e8bf740e4843a2e7a41bfa6c2f96f8ae4a7147fcChris Warrington /** {@inheritDoc} */ 389dbd802c8c96c3a66873bc600bc7d1374a1d08e5Orion Hodson @Override 39d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public final int cursor() { 40d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein return cursor; 41d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 42d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 43e8bf740e4843a2e7a41bfa6c2f96f8ae4a7147fcChris Warrington /** {@inheritDoc} */ 449dbd802c8c96c3a66873bc600bc7d1374a1d08e5Orion Hodson @Override 45d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public final int baseAddressForCursor() { 46d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein int mapped = baseAddressMap.get(cursor); 47d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein return (mapped >= 0) ? mapped : cursor; 48d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 49d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 50e8bf740e4843a2e7a41bfa6c2f96f8ae4a7147fcChris Warrington /** {@inheritDoc} */ 519dbd802c8c96c3a66873bc600bc7d1374a1d08e5Orion Hodson @Override 52d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein public final void setBaseAddress(int targetAddress, int baseAddress) { 53d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein baseAddressMap.put(targetAddress, baseAddress); 54d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 55d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein 56d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein /** 57d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Advance the cursor by the indicated amount. 58d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */ 59d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein protected final void advance(int amount) { 60d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein cursor += amount; 61d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein } 62d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein} 63