// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "JBig2_Segment.h"
CJBig2_Segment::CJBig2_Segment() {
  m_dwNumber = 0;
  m_cFlags.c = 0;
  m_nReferred_to_segment_count = 0;
  m_pReferred_to_segment_numbers = NULL;
  m_dwPage_association = 0;
  m_dwData_length = 0;
  m_dwHeader_Length = 0;
  m_pData = NULL;
  m_State = JBIG2_SEGMENT_HEADER_UNPARSED;
  m_nResultType = JBIG2_VOID_POINTER;
  m_Result.vd = NULL;
}
CJBig2_Segment::~CJBig2_Segment() {
  clean();
}
void CJBig2_Segment::clean() {
  if (m_pReferred_to_segment_numbers) {
    m_pModule->JBig2_Free(m_pReferred_to_segment_numbers);
  }
  if (m_Result.vd) {
    switch (m_nResultType) {
      case JBIG2_IMAGE_POINTER:
        delete m_Result.im;
        break;
      case JBIG2_SYMBOL_DICT_POINTER:
        delete m_Result.sd;
        break;
      case JBIG2_PATTERN_DICT_POINTER:
        delete m_Result.pd;
        break;
      case JBIG2_HUFFMAN_TABLE_POINTER:
        delete m_Result.ht;
        break;
      default:
        m_pModule->JBig2_Free(m_Result.vd);
    }
  }
}
