|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <stdlib.h>
|
|
Packit |
1c1d7e |
#include <qfile.h>
|
|
Packit |
1c1d7e |
#include "entry.h"
|
|
Packit |
1c1d7e |
#include "marshal.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
#include "section.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "filestorage.h"
|
|
Packit |
1c1d7e |
#include "arguments.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
//------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define HEADER ('D'<<24)+('O'<<16)+('X'<<8)+'!'
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int Entry::num=0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
Entry::Entry()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("Entry::Entry(%p)\n",this);
|
|
Packit |
1c1d7e |
num++;
|
|
Packit |
1c1d7e |
m_parent=0;
|
|
Packit |
1c1d7e |
section = EMPTY_SEC;
|
|
Packit |
1c1d7e |
m_sublist = new QList<Entry>;
|
|
Packit |
1c1d7e |
m_sublist->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
extends = new QList<BaseInfo>;
|
|
Packit |
1c1d7e |
extends->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
groups = new QList<Grouping>;
|
|
Packit |
1c1d7e |
groups->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
anchors = new QList<SectionInfo>; // Doxygen::sectionDict takes ownership of the items!
|
|
Packit |
1c1d7e |
argList = new ArgumentList;
|
|
Packit |
1c1d7e |
argList->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
//printf("Entry::Entry() tArgList=0\n");
|
|
Packit |
1c1d7e |
tArgLists = 0;
|
|
Packit |
1c1d7e |
typeConstr = 0;
|
|
Packit |
1c1d7e |
mGrpId = -1;
|
|
Packit |
1c1d7e |
tagInfo = 0;
|
|
Packit |
1c1d7e |
sli = 0;
|
|
Packit |
1c1d7e |
relatesType = Simple;
|
|
Packit |
1c1d7e |
hidden = FALSE;
|
|
Packit |
1c1d7e |
groupDocType = GROUPDOC_NORMAL;
|
|
Packit |
1c1d7e |
reset();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
Entry::Entry(const Entry &e)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("Entry::Entry(%p):copy\n",this);
|
|
Packit |
1c1d7e |
num++;
|
|
Packit |
1c1d7e |
section = e.section;
|
|
Packit |
1c1d7e |
type = e.type;
|
|
Packit |
1c1d7e |
name = e.name;
|
|
Packit |
1c1d7e |
tagInfo = e.tagInfo;
|
|
Packit |
1c1d7e |
protection = e.protection;
|
|
Packit |
1c1d7e |
mtype = e.mtype;
|
|
Packit |
1c1d7e |
spec = e.spec;
|
|
Packit |
1c1d7e |
initLines = e.initLines;
|
|
Packit |
1c1d7e |
stat = e.stat;
|
|
Packit |
1c1d7e |
explicitExternal = e.explicitExternal;
|
|
Packit |
1c1d7e |
proto = e.proto;
|
|
Packit |
1c1d7e |
subGrouping = e.subGrouping;
|
|
Packit |
1c1d7e |
callGraph = e.callGraph;
|
|
Packit |
1c1d7e |
callerGraph = e.callerGraph;
|
|
Packit |
1c1d7e |
virt = e.virt;
|
|
Packit |
1c1d7e |
args = e.args;
|
|
Packit |
1c1d7e |
bitfields = e.bitfields;
|
|
Packit |
1c1d7e |
argList = e.argList->deepCopy();
|
|
Packit |
1c1d7e |
tArgLists = 0;
|
|
Packit |
1c1d7e |
program = e.program;
|
|
Packit |
1c1d7e |
initializer = e.initializer;
|
|
Packit |
1c1d7e |
includeFile = e.includeFile;
|
|
Packit |
1c1d7e |
includeName = e.includeName;
|
|
Packit |
1c1d7e |
doc = e.doc;
|
|
Packit |
1c1d7e |
docLine = e.docLine;
|
|
Packit |
1c1d7e |
docFile = e.docFile;
|
|
Packit |
1c1d7e |
brief = e.brief;
|
|
Packit |
1c1d7e |
briefLine = e.briefLine;
|
|
Packit |
1c1d7e |
briefFile = e.briefFile;
|
|
Packit |
1c1d7e |
inbodyDocs = e.inbodyDocs;
|
|
Packit |
1c1d7e |
inbodyLine = e.inbodyLine;
|
|
Packit |
1c1d7e |
inbodyFile = e.inbodyFile;
|
|
Packit |
1c1d7e |
relates = e.relates;
|
|
Packit |
1c1d7e |
relatesType = e.relatesType;
|
|
Packit |
1c1d7e |
read = e.read;
|
|
Packit |
1c1d7e |
write = e.write;
|
|
Packit |
1c1d7e |
inside = e.inside;
|
|
Packit |
1c1d7e |
exception = e.exception;
|
|
Packit |
1c1d7e |
typeConstr = 0;
|
|
Packit |
1c1d7e |
bodyLine = e.bodyLine;
|
|
Packit |
1c1d7e |
endBodyLine = e.endBodyLine;
|
|
Packit |
1c1d7e |
mGrpId = e.mGrpId;
|
|
Packit |
1c1d7e |
extends = new QList<BaseInfo>;
|
|
Packit |
1c1d7e |
extends->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
groups = new QList<Grouping>;
|
|
Packit |
1c1d7e |
groups->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
anchors = new QList<SectionInfo>;
|
|
Packit |
1c1d7e |
fileName = e.fileName;
|
|
Packit |
1c1d7e |
startLine = e.startLine;
|
|
Packit |
1c1d7e |
startColumn = e.startColumn;
|
|
Packit |
1c1d7e |
if (e.sli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
sli = new QList<ListItemInfo>;
|
|
Packit |
1c1d7e |
sli->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
QListIterator<ListItemInfo> slii(*e.sli);
|
|
Packit |
1c1d7e |
ListItemInfo *ili;
|
|
Packit |
1c1d7e |
for (slii.toFirst();(ili=slii.current());++slii)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
sli->append(new ListItemInfo(*ili));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
sli=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
lang = e.lang;
|
|
Packit |
1c1d7e |
hidden = e.hidden;
|
|
Packit |
1c1d7e |
artificial = e.artificial;
|
|
Packit |
1c1d7e |
groupDocType = e.groupDocType;
|
|
Packit |
1c1d7e |
id = e.id;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_parent = e.m_parent;
|
|
Packit |
1c1d7e |
m_sublist = new QList<Entry>;
|
|
Packit |
1c1d7e |
m_sublist->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// deep copy of the child entry list
|
|
Packit |
1c1d7e |
QListIterator<Entry> eli(*e.m_sublist);
|
|
Packit |
1c1d7e |
Entry *cur;
|
|
Packit |
1c1d7e |
for (;(cur=eli.current());++eli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_sublist->append(new Entry(*cur));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// deep copy base class list
|
|
Packit |
1c1d7e |
QListIterator<BaseInfo> bli(*e.extends);
|
|
Packit |
1c1d7e |
BaseInfo *bi;
|
|
Packit |
1c1d7e |
for (;(bi=bli.current());++bli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
extends->append(new BaseInfo(*bi));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// deep copy group list
|
|
Packit |
1c1d7e |
QListIterator<Grouping> gli(*e.groups);
|
|
Packit |
1c1d7e |
Grouping *g;
|
|
Packit |
1c1d7e |
for (;(g=gli.current());++gli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
groups->append(new Grouping(*g));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QListIterator<SectionInfo> sli2(*e.anchors);
|
|
Packit |
1c1d7e |
SectionInfo *s;
|
|
Packit |
1c1d7e |
for (;(s=sli2.current());++sli2)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
anchors->append(new SectionInfo(*s));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// deep copy type constraint list
|
|
Packit |
1c1d7e |
if (e.typeConstr)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
typeConstr = e.typeConstr->deepCopy();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// deep copy template argument lists
|
|
Packit |
1c1d7e |
if (e.tArgLists)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tArgLists = copyArgumentLists(e.tArgLists);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
Entry::~Entry()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("Entry::~Entry(%p) num=%d\n",this,num);
|
|
Packit |
1c1d7e |
//printf("Deleting entry %d name %s type %x children %d\n",
|
|
Packit |
1c1d7e |
// num,name.data(),section,sublist->count());
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
delete m_sublist; // each element is now own by a EntryNav so we do no longer own
|
|
Packit |
1c1d7e |
// our children.
|
|
Packit |
1c1d7e |
delete extends;
|
|
Packit |
1c1d7e |
delete groups;
|
|
Packit |
1c1d7e |
delete anchors;
|
|
Packit |
1c1d7e |
delete argList;
|
|
Packit |
1c1d7e |
delete tArgLists;
|
|
Packit |
1c1d7e |
delete tagInfo;
|
|
Packit |
1c1d7e |
delete typeConstr;
|
|
Packit |
1c1d7e |
delete sli;
|
|
Packit |
1c1d7e |
num--;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void Entry::addSubEntry(Entry *current)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("Entry %d with name %s type 0x%x added to %s type 0x%x\n",
|
|
Packit |
1c1d7e |
// current->num,current->name.data(),current->section,
|
|
Packit |
1c1d7e |
// name.data(),section);
|
|
Packit |
1c1d7e |
//printf("Entry::addSubEntry(%s:%p) to %s\n",current->name.data(),
|
|
Packit |
1c1d7e |
// current,name.data());
|
|
Packit |
1c1d7e |
current->m_parent=this;
|
|
Packit |
1c1d7e |
m_sublist->append(current);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void Entry::reset()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool entryCallGraph = Config_getBool(CALL_GRAPH);
|
|
Packit |
1c1d7e |
static bool entryCallerGraph = Config_getBool(CALLER_GRAPH);
|
|
Packit |
1c1d7e |
//printf("Entry::reset()\n");
|
|
Packit |
1c1d7e |
name.resize(0);
|
|
Packit |
1c1d7e |
type.resize(0);
|
|
Packit |
1c1d7e |
args.resize(0);
|
|
Packit |
1c1d7e |
bitfields.resize(0);
|
|
Packit |
1c1d7e |
exception.resize(0);
|
|
Packit |
1c1d7e |
program.resize(0);
|
|
Packit |
1c1d7e |
includeFile.resize(0);
|
|
Packit |
1c1d7e |
includeName.resize(0);
|
|
Packit |
1c1d7e |
doc.resize(0);
|
|
Packit |
1c1d7e |
docFile.resize(0);
|
|
Packit |
1c1d7e |
docLine=-1;
|
|
Packit |
1c1d7e |
relates.resize(0);
|
|
Packit |
1c1d7e |
relatesType=Simple;
|
|
Packit |
1c1d7e |
brief.resize(0);
|
|
Packit |
1c1d7e |
briefFile.resize(0);
|
|
Packit |
1c1d7e |
briefLine=-1;
|
|
Packit |
1c1d7e |
inbodyDocs.resize(0);
|
|
Packit |
1c1d7e |
inbodyFile.resize(0);
|
|
Packit |
1c1d7e |
inbodyLine=-1;
|
|
Packit |
1c1d7e |
inside.resize(0);
|
|
Packit |
1c1d7e |
fileName.resize(0);
|
|
Packit |
1c1d7e |
initializer.resize(0);
|
|
Packit |
1c1d7e |
initLines = -1;
|
|
Packit |
1c1d7e |
startLine = 1;
|
|
Packit |
1c1d7e |
startColumn = 1;
|
|
Packit |
1c1d7e |
bodyLine = -1;
|
|
Packit |
1c1d7e |
endBodyLine = -1;
|
|
Packit |
1c1d7e |
mGrpId = -1;
|
|
Packit |
1c1d7e |
callGraph = entryCallGraph;
|
|
Packit |
1c1d7e |
callerGraph = entryCallerGraph;
|
|
Packit |
1c1d7e |
section = EMPTY_SEC;
|
|
Packit |
1c1d7e |
mtype = Method;
|
|
Packit |
1c1d7e |
virt = Normal;
|
|
Packit |
1c1d7e |
stat = FALSE;
|
|
Packit |
1c1d7e |
proto = FALSE;
|
|
Packit |
1c1d7e |
explicitExternal = FALSE;
|
|
Packit |
1c1d7e |
spec = 0;
|
|
Packit |
1c1d7e |
lang = SrcLangExt_Unknown;
|
|
Packit |
1c1d7e |
hidden = FALSE;
|
|
Packit |
1c1d7e |
artificial = FALSE;
|
|
Packit |
1c1d7e |
subGrouping = TRUE;
|
|
Packit |
1c1d7e |
protection = Public;
|
|
Packit |
1c1d7e |
groupDocType = GROUPDOC_NORMAL;
|
|
Packit |
1c1d7e |
id.resize(0);
|
|
Packit |
1c1d7e |
m_sublist->clear();
|
|
Packit |
1c1d7e |
extends->clear();
|
|
Packit |
1c1d7e |
groups->clear();
|
|
Packit |
1c1d7e |
anchors->clear();
|
|
Packit |
1c1d7e |
argList->clear();
|
|
Packit |
1c1d7e |
if (tagInfo) { delete tagInfo; tagInfo=0; }
|
|
Packit |
1c1d7e |
if (tArgLists) { delete tArgLists; tArgLists=0; }
|
|
Packit |
1c1d7e |
if (sli) { delete sli; sli=0; }
|
|
Packit |
1c1d7e |
if (typeConstr) { delete typeConstr; typeConstr=0; }
|
|
Packit |
1c1d7e |
//if (mtArgList) { delete mtArgList; mtArgList=0; }
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int Entry::getSize()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return sizeof(Entry);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void Entry::createSubtreeIndex(EntryNav *nav,FileStorage *storage,FileDef *fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
EntryNav *childNav = new EntryNav(nav,this);
|
|
Packit |
1c1d7e |
nav->addChild(childNav);
|
|
Packit |
1c1d7e |
childNav->setFileDef(fd);
|
|
Packit |
1c1d7e |
childNav->saveEntry(this,storage);
|
|
Packit |
1c1d7e |
if (m_sublist)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("saveEntry: %d children\n",node->sublist->count());
|
|
Packit |
1c1d7e |
QListIterator<Entry> eli(*m_sublist);
|
|
Packit |
1c1d7e |
Entry *childNode;
|
|
Packit |
1c1d7e |
for (eli.toFirst();(childNode=eli.current());++eli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
childNode->createSubtreeIndex(childNav,storage,fd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//m_sublist->setAutoDelete(FALSE);
|
|
Packit |
1c1d7e |
m_sublist->clear();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void Entry::createNavigationIndex(EntryNav *rootNav,FileStorage *storage,FileDef *fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
createSubtreeIndex(rootNav,storage,fd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void Entry::addSpecialListItem(const char *listName,int itemId)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (sli==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
sli = new QList<ListItemInfo>;
|
|
Packit |
1c1d7e |
sli->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ListItemInfo *ili=new ListItemInfo;
|
|
Packit |
1c1d7e |
ili->type = listName;
|
|
Packit |
1c1d7e |
ili->itemId = itemId;
|
|
Packit |
1c1d7e |
sli->append(ili);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
Entry *Entry::removeSubEntry(Entry *e)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int i = m_sublist->find(e);
|
|
Packit |
1c1d7e |
return i!=-1 ? m_sublist->take(i) : 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
EntryNav::EntryNav(EntryNav *parent, Entry *e)
|
|
Packit |
1c1d7e |
: m_parent(parent), m_subList(0), m_section(e->section), m_type(e->type),
|
|
Packit |
1c1d7e |
m_name(e->name), m_fileDef(0), m_lang(e->lang),
|
|
Packit |
1c1d7e |
m_info(0), m_offset(-1), m_noLoad(FALSE)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (e->tagInfo)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_tagInfo = new TagInfo;
|
|
Packit |
1c1d7e |
m_tagInfo->tagName = e->tagInfo->tagName;
|
|
Packit |
1c1d7e |
m_tagInfo->fileName = e->tagInfo->fileName;
|
|
Packit |
1c1d7e |
m_tagInfo->anchor = e->tagInfo->anchor;
|
|
Packit |
1c1d7e |
if (e->tagInfo)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("tagInfo %p: tagName=%s fileName=%s anchor=%s\n",
|
|
Packit |
1c1d7e |
// e->tagInfo,
|
|
Packit |
1c1d7e |
// e->tagInfo->tagName.data(),
|
|
Packit |
1c1d7e |
// e->tagInfo->fileName.data(),
|
|
Packit |
1c1d7e |
// e->tagInfo->anchor.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_tagInfo = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
EntryNav::~EntryNav()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
delete m_subList;
|
|
Packit |
1c1d7e |
delete m_info;
|
|
Packit |
1c1d7e |
delete m_tagInfo;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void EntryNav::addChild(EntryNav *e)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_subList==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_subList = new QList<EntryNav>;
|
|
Packit |
1c1d7e |
m_subList->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_subList->append(e);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool EntryNav::loadEntry(FileStorage *storage)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_noLoad)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (m_offset==-1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("offset not set!\n");
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//delete m_info;
|
|
Packit |
1c1d7e |
//printf("EntryNav::loadEntry: new entry %p: %s\n",m_info,m_name.data());
|
|
Packit |
1c1d7e |
//m_info->tagInfo = m_tagInfo;
|
|
Packit |
1c1d7e |
//if (m_parent)
|
|
Packit |
1c1d7e |
//{
|
|
Packit |
1c1d7e |
// m_info->parent = m_parent->m_info;
|
|
Packit |
1c1d7e |
//}
|
|
Packit |
1c1d7e |
//m_info->parent = 0;
|
|
Packit |
1c1d7e |
//printf("load entry: seek to %llx\n",m_offset);
|
|
Packit |
1c1d7e |
if (!storage->seek(m_offset))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("seek failed!\n");
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (m_info) delete m_info;
|
|
Packit |
1c1d7e |
m_info = unmarshalEntry(storage);
|
|
Packit |
1c1d7e |
m_info->name = m_name;
|
|
Packit |
1c1d7e |
m_info->type = m_type;
|
|
Packit |
1c1d7e |
m_info->section = m_section;
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool EntryNav::saveEntry(Entry *e,FileStorage *storage)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_offset = storage->pos();
|
|
Packit |
1c1d7e |
//printf("EntryNav::saveEntry offset=%llx\n",m_offset);
|
|
Packit |
1c1d7e |
marshalEntry(storage,e);
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void EntryNav::releaseEntry()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_noLoad)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("EntryNav::releaseEntry %p\n",m_info);
|
|
Packit |
1c1d7e |
delete m_info;
|
|
Packit |
1c1d7e |
m_info=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void EntryNav::setEntry(Entry *e)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
delete m_info;
|
|
Packit |
1c1d7e |
m_info = e;
|
|
Packit |
1c1d7e |
//printf("EntryNav::setEntry %p\n",e);
|
|
Packit |
1c1d7e |
m_noLoad=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|