⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recordtable.java

📁 专业汽车级嵌入式操作系统OSEK的源代码
💻 JAVA
字号:
package js.tinyvm;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import js.tinyvm.io.IByteWriter;import js.tinyvm.io.IOUtilities;/** * Record table. */public class RecordTable extends WritableDataWithOffset{   /**    * Descriptive name of this record table.    */   private String _name;   /**    * Allow duplicates in table?    */   private boolean _duplicates;   /**    * Align output?    */   private boolean _align;   /**    * List of all writable element.    */   private ArrayList _list;   /**    * Length of output.    */   private int _length;   /**    * Constructor.    *     * @param name description of this record table    * @param allowDuplicates allow duplicates?    * @param align align output?    */   public RecordTable (String name, boolean allowDuplicates, boolean align)   {      assert name != null: "Precondition: name != null";      _name = name;      _duplicates = allowDuplicates;      _align = align;      _list = new ArrayList();      _length = -1;   }   //   // public interface   //   /**    * Add a writable element.    *     * @param element    */   public void add (WritableData element)   {      assert element != null: "Precondition: element != null";      if (_duplicates || !_list.contains(element))      {         _list.add(element);      }   }   /**    * Get writable element by its index.    *     * @param index index    */   public WritableData get (int index)   {      assert index >= 0 && index < size(): "Precondition: index >= 0 && index < size()";      WritableData result = (WritableData) _list.get(index);      assert result != null: "Postconditon: result != null";      return result;   }   /**    * Get index of writable element.    *     * @param element    * @return index or -1 if not found    */   public int indexOf (WritableData element)   {      assert element != null: "Precondition: element != null";      return _list.indexOf(element);   }   /**    * Iterator.    */   public Iterator iterator ()   {      Iterator result = _list.iterator();      assert result != null: "Postconditon: result != null";      return result;   }   /**    * Number of entries.    */   public int size ()   {      return _list.size();   }   //   // Writable interface   //   /**    * Dump all elements.    */   public void dump (IByteWriter writer) throws TinyVMException   {      assert writer != null: "Precondition: writer != null";      try      {         boolean pDoVerify = TinyVMConstants.VERIFY_LEVEL > 0;         for (Iterator iter = _list.iterator(); iter.hasNext();)         {            WritableData pData = (WritableData) iter.next();            int pLength = pData.getLength();            int pPrevSize = writer.offset();            pData.dump(writer);            if (pDoVerify)            {               if (writer.offset() != pPrevSize + pLength)               {                  if (pData instanceof RecordTable)                  {                     // _logger.log(Level.SEVERE, "Aligned sequence: "                     //    + ((RecordTable) pData)._align);                  }                  throw new TinyVMException("Bug RT-1: Written="                     + (writer.offset() - pPrevSize) + " Length=" + pLength                     + " Class=" + pData.getClass().getName());               }            }         }         if (_align)         {            IOUtilities.writePadding(writer, 2);         }      }      catch (IOException e)      {         throw new TinyVMException(e.getMessage(), e);      }   }   /**    * Length.    */   public int getLength () throws TinyVMException   {      if (_length == -1)      {         _length = 0;         for (Iterator iter = _list.iterator(); iter.hasNext();)         {            _length += ((WritableData) iter.next()).getLength();         }         // _logger.log(Level.INFO, "length of " + _name + ": " + _length);         if (_align)         {            _length = IOUtilities.adjustedSize(_length, 2);         }      }      return _length;   }   /**    * Init offset of record table and all of its elements.    */   public void initOffset (int startOffset) throws TinyVMException   {      // _logger.log(Level.INFO, "init offset of " + _name + ": " +      // startOffset);      super.initOffset(startOffset);      for (Iterator iter = _list.iterator(); iter.hasNext();)      {         WritableData element = (WritableData) iter.next();         if (element instanceof WritableDataWithOffset)         {            ((WritableDataWithOffset) element).initOffset(startOffset);         }         startOffset += element.getLength();      }   }   // private static final Logger _logger = Logger.getLogger("TinyVM");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -