Rev 2045 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright (C) 2011.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 or
* 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.
*/
package uk.me.parabola.imgfmt.app.mdr;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
/**
* This section is a simple index into the streets section (mdr7).
*
* @author Steve Ratcliffe
*/
public class Mdr8
extends MdrSection
implements HasHeaderFlags
{
private static final int STRING_WIDTH =
4;
private List<Mdr8Record
> index =
new ArrayList<Mdr8Record
>();
public Mdr8
(MdrConfig config
) {
setConfig
(config
);
}
/**
* Write out the contents of this section.
*
* @param writer Where to write it.
*/
public void writeSectData
(ImgFileWriter writer
) {
int size = associatedSize
();
Charset charset = getConfig
().
getSort().
getCharset();
for (Mdr8Record s : index
) {
writer.
put(s.
getPrefix().
getBytes(charset
),
0, STRING_WIDTH
);
putN
(writer, size, s.
getRecordNumber());
}
}
protected int associatedSize
() {
return getSizes
().
getStreetSize();
}
/**
* The number of records in this section.
*
* @return The number of items in the section.
*/
protected int numberOfItems
() {
return index.
size();
}
/**
* The size of a record in the section. This is not a constant and might vary
* on various factors, such as the file version, if we are preparing for a
* device, the number of maps etc.
*
* @return The size of a record in this section.
*/
public int getItemSize
() {
return STRING_WIDTH + associatedSize
();
}
public void setIndex
(List<Mdr8Record
> index
) {
this.
index = index
;
}
/**
* The header flags for the section.
* Possible values are not known.
*
* @return The correct value based on the contents of the section. Zero if
* nothing needs to be done.
*/
public int getExtraValue
() {
// this value is likely to depend on the size of the max record number.
return (STRING_WIDTH
<< 8) + 0x0a
;
}
}