Subversion Repositories mkgmap

Rev

Rev 3408 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * Copyright (C) 2007 Steve Ratcliffe
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *
 * Author: Steve Ratcliffe
 * Create date: Jan 1, 2008
 */

package uk.me.parabola.imgfmt.app.lbl;

import uk.me.parabola.imgfmt.app.ImgFileWriter;
import uk.me.parabola.imgfmt.app.Label;

/**
 * Represent a facility at a motorway exit
 *
 * @author Mark Burton
 */

public class ExitFacility {

        private final int index;
        private final Label description;
        private final   int type;       // truck stop - 24 hour diesel + food
        private final   int direction;  // undefined
        private final   int facilities; // none
        private final boolean last;

        public ExitFacility(int type, char direction, int facilities, Label description, boolean last, int index) {
                this.type = type;
                this.direction = directionCode(direction);
                this.facilities = facilities;
                this.description = description;
                this.last = last;
                this.index = index;
        }

        void write(ImgFileWriter writer) {
                int word = 0;
                word |= description.getOffset(); // 0:21 = label offset
                // 22 = unknown
                if(last)
                        word |= 1 << 23; // 23 = last facility for this exit
                word |= type << 24;      // 24:27 = 4 bit type
                // 28 = unknown
                word |= direction << 29; // 29:31 = 3 bit direction
                writer.putChar((char)word);
                writer.putChar((char)(word >> 16));
                writer.put((byte)facilities);
        }

        public int getIndex() {
                return index;
        }

        public boolean getOvernightParking() {
                return false;
        }

        private int directionCode(char direction) {
                int code = "NSEWIOB".indexOf(direction);
                if(code < 0)
                        code = 7; // undefined
                return code;
        }
}