// 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()
{
    init();
}
CJBig2_Segment::~CJBig2_Segment()
{
    clean();
}
void CJBig2_Segment::init()
{
    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;
}
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);
        }
    }
}
