/*
 Copyright 2019 Alain Dargelas
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */
 
// Surelog 
// IDL for Macro cache header.

namespace SURELOG.CACHE;

table Header {
  m_sl_version:string;
  m_flb_version:string;
  m_sl_date_compiled:string;
  m_file_date_compiled:string; 
  m_file:string; 
}

table Error {
  m_locations:[Location];
  m_errorId:uint;
}

table Location {
   m_fileId:ulong;
   m_line:uint;
   m_column:ushort;
   m_object:ulong;
}


table TimeInfo {
    m_type:ushort;
    m_fileId:ulong;
    m_line:uint;
    m_timeUnit:ushort;
    m_timeUnitValue:double;    
    m_timePrecision:ushort;
    m_timePrecisionValue:double;
}
