/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License 3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl.html * ******************************************************************************/ package com.opendoorlogistics.core.tables.utils; import java.awt.image.RenderedImage; import java.time.LocalDate; import com.opendoorlogistics.api.geometry.ODLGeom; import com.opendoorlogistics.api.tables.ODLDatastore; import com.opendoorlogistics.api.tables.ODLTableReadOnly; import com.opendoorlogistics.core.geometry.ODLGeomImpl; public class SizesInBytesEstimator { public static long estimateBytes(ODLDatastore<? extends ODLTableReadOnly> ds) { long ret = 0; for(int i=0; i<ds.getTableCount();i++){ ret += estimateBytes(ds.getTableAt(i)); } return ret; } public static long estimateBytes(ODLTableReadOnly table) { long ret = 0; int nrows = table.getRowCount(); int ncols = table.getColumnCount(); for (int row = 0; row < nrows; row++) { for (int col = 0; col < ncols; col++) { Object value = table.getValueAt(row, col); switch (table.getColumnType(col)) { case STRING: if(value!=null){ ret += value.toString().length()*2; } break; case DOUBLE: ret += 8; break; case LONG: ret += 8; break; case TIME: ret += 8; break; case COLOUR: ret += 4*4; break; case IMAGE: RenderedImage img =(RenderedImage)value; if(img!=null){ ret +=(long) img.getWidth() *img.getHeight() *4; } break; case GEOM: ODLGeom geom = (ODLGeom)value; if(geom!=null){ ret += ((ODLGeomImpl)geom).getEstimatedSizeInBytes(); } break; case DATE: ret += 12; break; default: break; } // add something for the pointer ret += 8; } // add something for the row holder object ret +=20; } return ret; } }