// 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"

#include "../../../include/fxcrt/fx_memory.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() {
  FX_Free(m_pReferred_to_segment_numbers);

  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:
      FX_Free(m_Result.vd);
  }
}
