    /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
    /*
     * This file is part of the LibreOffice project.
     *
     * This Source Code Form is subject to the terms of the Mozilla Public
     * License, v. 2.0. If a copy of the MPL was not distributed with this
     * file, You can obtain one at http://mozilla.org/MPL/2.0/.
     *
     * This file incorporates work covered by the following license notice:
     *
     *   Licensed to the Apache Software Foundation (ASF) under one or more
     *   contributor license agreements. See the NOTICE file distributed
     *   with this work for additional information regarding copyright
     *   ownership. The ASF licenses this file to you 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 .
     */

    #include <string.h>
    #include "dxftblrd.hxx"

    //----------------------------------DXFLType-----------------------------------

    DXFLType::DXFLType()
        : pSucc(nullptr)
        , nFlags(0)
        , nDashCount(0)
        , fPatternLength(0.0)
    {
    }

    void DXFLType::Read(DXFGroupReader & rDGR)
    {
        long nDashIndex=-1;

        while (rDGR.Read()!=0)
        {
            switch (rDGR.GetG())
            {
            case  2:
                m_sName = rDGR.GetS();
                break;
            case  3:
                m_sDescription = rDGR.GetS();
                break;
            case 70:
                nFlags=rDGR.GetI();
                break;
            case 73:
                if (nDashIndex!=-1)
                {
                    rDGR.SetError();
                    return;
                }
                nDashCount=rDGR.GetI();
                if (nDashCount>DXF_MAX_DASH_COUNT)
                {
                    nDashCount=DXF_MAX_DASH_COUNT;
                }
                nDashIndex=0;
                break;
            case 40: fPatternLength=rDGR.GetF(); break;
            case 49:
                if (nDashCount==-1)
                {
                    rDGR.SetError();
                    return;
                }
                if (nDashIndex < nDashCount)
                {
                    if (nDashIndex < 0)
                    {
                        rDGR.SetError();
                        return;
                    }
                    fDash[nDashIndex++] = rDGR.GetF();
                }
                break;
            }
        }
    }

    //----------------------------------DXFLayer-----------------------------------

    DXFLayer::DXFLayer()
    {
        pSucc=nullptr;
        nFlags=0;
        nColor=-1;
    }

    void DXFLayer::Read(DXFGroupReader & rDGR)
    {
        while (rDGR.Read()!=0)
        {
            switch(rDGR.GetG())
            {
            case  2:
                m_sName = rDGR.GetS();
                break;
            case  6:
                m_sLineType = rDGR.GetS();
                break;
            case 70:
                nFlags=rDGR.GetI();
                break;
            case 62:
                nColor=rDGR.GetI();
                break;
            }
        }
    }

    //----------------------------------DXFStyle-----------------------------------

    DXFStyle::DXFStyle()
    {
        pSucc=nullptr;
        nFlags=0;
        fHeight=0.0;
        fWidthFak=1.0;
        fOblAngle=0.0;
        nTextGenFlags=0;
        fLastHeightUsed=0.0;
    }

    void DXFStyle::Read(DXFGroupReader & rDGR)
    {
        while (rDGR.Read()!=0)
        {
            switch(rDGR.GetG())
            {
            case  2:
                m_sName = rDGR.GetS();
                break;
            case  3:
                m_sPrimFontFile = rDGR.GetS();
                break;
            case  4:
                m_sBigFontFile = rDGR.GetS();
                break;
            case 70:
                nFlags=rDGR.GetI();
                break;
            case 40:
                fHeight=rDGR.GetF();
                break;
            case 41:
                fWidthFak=rDGR.GetF();
                break;
            case 42:
                fLastHeightUsed=rDGR.GetF();
                break;
            case 50:
                fOblAngle=rDGR.GetF();
                break;
            case 71:
                nTextGenFlags=rDGR.GetI();
                break;
            }
        }
    }

    //----------------------------------DXFVPort-----------------------------------

    DXFVPort::DXFVPort()
        : pSucc(nullptr)
        , nFlags(0)
        , fMinX(0.0)
        , fMinY(0.0)
        , fMaxX(0.0)
        , fMaxY(0.0)
        , fCenterX(0.0)
        , fCenterY(0.0)
        , fSnapBaseX(0.0)
        , fSnapBaseY(0.0)
        , fSnapSpacingX(0.0)
        , fSnapSpacingY(0.0)
        , fGridX(0.0)
        , fGridY(0.0)
        , aDirection(DXFVector(0.0, 0.0, 1.0))
        , fHeight(0.0)
        , fAspectRatio(0.0)
        , fLensLength(0.0)
        , fFrontClipPlane(0.0)
        , fBackClipPlane(0.0)
        , fTwistAngle(0.0)
        , nStatus(0)
        , nID(0)
        , nMode(0)
        , nCircleZoomPercent(0)
        , nFastZoom(0)
        , nUCSICON(0)
        , nSnap(0)
        , nGrid(0)
        , nSnapStyle(0)
        , nSnapIsopair(0)
    {
    }

    void DXFVPort::Read(DXFGroupReader & rDGR)
    {
        while (rDGR.Read()!=0)
        {
            switch(rDGR.GetG())
            {
            case  2:
                m_sName = rDGR.GetS();
                break;
            case 10: fMinX=rDGR.GetF(); break;
            case 11: fMaxX=rDGR.GetF(); break;
            case 12: fCenterX=rDGR.GetF(); break;
            case 13: fSnapBaseX=rDGR.GetF(); break;
            case 14: fSnapSpacingX=rDGR.GetF(); break;
            case 15: fGridX=rDGR.GetF(); break;
            case 16: aDirection.fx=rDGR.GetF(); break;
            case 17: aTarget.fx=rDGR.GetF(); break;
            case 20: fMinY=rDGR.GetF(); break;
            case 21: fMaxY=rDGR.GetF(); break;
            case 22: fCenterY=rDGR.GetF(); break;
            case 23: fSnapBaseY=rDGR.GetF(); break;
            case 24: fSnapSpacingY=rDGR.GetF(); break;
            case 25: fGridY=rDGR.GetF(); break;
            case 26: aDirection.fy=rDGR.GetF(); break;
            case 27: aTarget.fy=rDGR.GetF(); break;
            case 36: aDirection.fz=rDGR.GetF(); break;
            case 37: aTarget.fz=rDGR.GetF(); break;
            case 40: fHeight=rDGR.GetF(); break;
            case 41: fAspectRatio=rDGR.GetF(); break;
            case 42: fLensLength=rDGR.GetF(); break;
            case 43: fFrontClipPlane=rDGR.GetF(); break;
            case 44: fBackClipPlane=rDGR.GetF(); break;
            case 51: fTwistAngle=rDGR.GetF(); break;
            case 68: nStatus=rDGR.GetI(); break;
            case 69: nID=rDGR.GetI(); break;
            case 70: nFlags=rDGR.GetI(); break;
            case 71: nMode=rDGR.GetI(); break;
            case 72: nCircleZoomPercent=rDGR.GetI(); break;
            case 73: nFastZoom=rDGR.GetI(); break;
            case 74: nUCSICON=rDGR.GetI(); break;
            case 75: nSnap=rDGR.GetI(); break;
            case 76: nGrid=rDGR.GetI(); break;
            case 77: nSnapStyle=rDGR.GetI(); break;
            case 78: nSnapIsopair=rDGR.GetI(); break;
            }
        }
    }

    //----------------------------------DXFTables----------------------------------

    DXFTables::DXFTables()
    {
        pLTypes=nullptr;
        pLayers=nullptr;
        pStyles=nullptr;
        pVPorts=nullptr;
    }

    DXFTables::~DXFTables()
    {
        Clear();
    }

    void DXFTables::Read(DXFGroupReader & rDGR)
    {
        DXFLType * * ppLT, * pLT;
        DXFLayer * * ppLa, * pLa;
        DXFStyle * * ppSt, * pSt;
        DXFVPort * * ppVP, * pVP;

        ppLT=&pLTypes;
        while(*ppLT!=nullptr) ppLT=&((*ppLT)->pSucc);

        ppLa=&pLayers;
        while(*ppLa!=nullptr) ppLa=&((*ppLa)->pSucc);

        ppSt=&pStyles;
        while(*ppSt!=nullptr) ppSt=&((*ppSt)->pSucc);

        ppVP=&pVPorts;
        while(*ppVP!=nullptr) ppVP=&((*ppVP)->pSucc);

        for (;;) {
            while (rDGR.GetG()!=0) rDGR.Read();
            if (rDGR.GetS() == "EOF" ||
                rDGR.GetS() == "ENDSEC") break;
            else if (rDGR.GetS() == "LTYPE") {
                pLT=new DXFLType;
                pLT->Read(rDGR);
                *ppLT=pLT;
                ppLT=&(pLT->pSucc);
            }
            else if (rDGR.GetS() == "LAYER") {
                pLa=new DXFLayer;
                pLa->Read(rDGR);
                *ppLa=pLa;
                ppLa=&(pLa->pSucc);
            }
            else if (rDGR.GetS() == "STYLE") {
                pSt=new DXFStyle;
                pSt->Read(rDGR);
                *ppSt=pSt;
                ppSt=&(pSt->pSucc);
            }
            else if (rDGR.GetS() == "VPORT") {
                pVP=new DXFVPort;
                pVP->Read(rDGR);
                *ppVP=pVP;
                ppVP=&(pVP->pSucc);
            }
            else rDGR.Read();
        }
    }

    void DXFTables::Clear()
    {
        DXFLType * pLT;
        DXFLayer * pLa;
        DXFStyle * pSt;
        DXFVPort * pVP;

        while (pStyles!=nullptr) {
            pSt=pStyles;
            pStyles=pSt->pSucc;
            delete pSt;
        }
        while (pLayers!=nullptr) {
            pLa=pLayers;
            pLayers=pLa->pSucc;
            delete pLa;
        }
        while (pLTypes!=nullptr) {
            pLT=pLTypes;
            pLTypes=pLT->pSucc;
            delete pLT;
        }
        while (pVPorts!=nullptr) {
            pVP=pVPorts;
            pVPorts=pVP->pSucc;
            delete pVP;
        }
    }

    DXFLType * DXFTables::SearchLType(OString const& rName) const
    {
        DXFLType * p;
        for (p=pLTypes; p!=nullptr; p=p->pSucc) {
            if (rName == p->m_sName) break;
        }
        return p;
    }

    DXFLayer * DXFTables::SearchLayer(OString const& rName) const
    {
        DXFLayer * p;
        for (p=pLayers; p!=nullptr; p=p->pSucc) {
            if (rName == p->m_sName) break;
        }
        return p;
    }

    DXFVPort * DXFTables::SearchVPort(OString const& rName) const
    {
        DXFVPort * p;
        for (p=pVPorts; p!=nullptr; p=p->pSucc) {
            if (rName == p->m_sName) break;
        }
        return p;
    }

    /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: fDash.