Commit ed26a63e authored by hkrishna's avatar hkrishna

warning fixes for avt directory

git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@23634 18c085ea-50e0-402c-830e-de6fd14e8384
parent 5630d289
......@@ -5750,7 +5750,7 @@ avtDatabaseMetaData::ConvertCSGDomainToBlockAndRegion(const char *const var,
if (mmd && mmd->meshType == AVT_CSG_MESH)
{
const intVector& groupIds = mmd->groupIds;
if (groupIds.size() > domainAsVisItSeesIt)
if (groupIds.size() > (size_t)domainAsVisItSeesIt)
{
int i, j = groupIds[domainAsVisItSeesIt];
for (i = domainAsVisItSeesIt; i >= 0 && groupIds[i] == j; i--)
......
......@@ -1804,6 +1804,8 @@ avtMeshMetaData::Print(ostream &out, int indent) const
// default:
// out << "The logical bounds are not applicable." << std::endl;
// break;
default:
break;
}
}
......@@ -1828,11 +1830,13 @@ avtMeshMetaData::Print(ostream &out, int indent) const
// default:
// out << "The number of cells is not applicable." << std::endl;
// break;
default:
break;
}
}
if (blockNames.size() == numBlocks)
if (blockNames.size() == (size_t)numBlocks)
{
Indent(out, indent);
out << "Block names: " << std::endl;
......
......@@ -60,6 +60,8 @@
class DBATTS_API avtSimulationCommandSpecification : public AttributeSubject
{
using AttributeSubject::SetValue;
using AttributeSubject::GetValue;
public:
enum RunMode
{
......
......@@ -123,7 +123,8 @@ avtSIL::avtSIL(const SILAttributes &atts)
setTable.push_back(0);
collTable.push_back(0);
int ii, iCurrSet = 0, iCurrMat = 0, iCurrArray = 0, iCurrCol = 0;
size_t ii = 0;
int iCurrSet = 0, iCurrMat = 0, iCurrArray = 0, iCurrCol = 0;
const intVector &attsOrder = atts.GetOrder();
const vector<string> &setNames = atts.GetSetNames();
......@@ -231,7 +232,7 @@ avtSIL::operator=(const avtSIL &sil)
if (this == &sil)
return *this;
int i;
size_t i;
//
// First, clear out what we have in this object.
//
......@@ -849,7 +850,7 @@ avtSIL::SILSetHasMapsOut(int index) const
EXCEPTION2(BadIndexException, index, GetNumSets());
EntryType t;
int iLocalIndex, iLocalSubIndex, jj;
int iLocalIndex, iLocalSubIndex;
if (!FindSet(index, t, iLocalIndex, iLocalSubIndex))
{
......@@ -861,7 +862,7 @@ avtSIL::SILSetHasMapsOut(int index) const
case SUBSET:
return (sets[iLocalIndex]->GetMapsOut().size() > 0);
case ARRAY:
for (jj = 0; jj < matrices.size(); jj++)
for (size_t jj = 0; jj < matrices.size(); jj++)
{
int col = matrices[jj]->SetIsInCollection(index);
if (col >= 0)
......@@ -896,7 +897,7 @@ void
avtSIL::AddMapsToTemporarySet(avtSILSet_p pSet, int setIndex) const
{
//Add maps out for a SILSet created on demand, and contained by a matrix
int ii;
size_t ii;
for (ii = 0; ii < matrices.size(); ii++)
{
int col = matrices[ii]->SetIsInCollection(setIndex);
......@@ -1004,7 +1005,7 @@ avtSIL::GetSILCollection(int index) const
int
avtSIL::GetSetIndex(const std::string &name, int collID) const
{
for (int ii = 0; ii < setTable.size()-1; ii+=3)
for (size_t ii = 0; ii < setTable.size()-1; ii+=3)
{
EntryType t = (EntryType)setTable[ii+1];
int iGlobalIndex = setTable[ii], iLocalIndex = setTable[ii+2];
......@@ -1090,7 +1091,7 @@ int
avtSIL::GetCollectionIndex(std::string name, int superset) const
{
avtSILCollection_p pCol;
for (int ii = 0; ii < collTable.size()-1; ii+=3)
for (size_t ii = 0; ii < collTable.size()-1; ii+=3)
{
EntryType t = (EntryType)collTable[ii+1];
int iGlobalIndex = collTable[ii], iLocalIndex = collTable[ii+2];
......@@ -1216,7 +1217,7 @@ SILAttributes *
avtSIL::MakeSILAttributes(void) const
{
int t0 = visitTimer->StartTimer();
int i;
size_t i;
SILAttributes *rv = new SILAttributes;
......@@ -1233,7 +1234,7 @@ avtSIL::MakeSILAttributes(void) const
rv->SetNSets(nSets);
vector<string> names;
vector<int> ids;
for (i = 0 ; i < nSets ; i++)
for (i = 0 ; i < (size_t)nSets ; i++)
{
avtSILSet_p s = sets[i];
names.push_back(s->GetName());
......@@ -1250,7 +1251,7 @@ avtSIL::MakeSILAttributes(void) const
vector<string> cats;
vector<int> roles;
vector<int> supersets;
for (i = 0 ; i < nCols ; i++)
for (i = 0 ; i < (size_t)nCols ; i++)
{
avtSILCollection_p col = collections[i];
cats.push_back(col->GetCategory());
......@@ -1336,12 +1337,12 @@ avtSIL::Print(ostream &out,
std::vector< std::string > perCollInfo,
std::vector< std::string > perMatInfo) const
{
int i;
size_t i;
bool useInfo;
useInfo = perSetInfo.size() == GetNumSets();
int idx = 0;
for (int i = 0 ; i < setTable.size()/3 ; i++)
useInfo = perSetInfo.size() == (size_t)GetNumSets();
//int idx = 0;
for (size_t i = 0 ; i < setTable.size()/3 ; i++)
{
switch (setTable[3*i+1])
{
......@@ -1491,7 +1492,7 @@ avtSIL::FindColl(int iColl, EntryType &outType,
bool
avtSIL::IsCompatible(const avtSIL *sil2) const
{
int i, j;
size_t i, j;
if (wholesList.size() != sil2->wholesList.size())
return false;
......
......@@ -452,7 +452,7 @@ avtSILArray::GetSetIndex(const std::string &name) const
}
if (names.size() != 0)
{
int ii = 0;
size_t ii = 0;
for (ii = 0; ii < names.size(); ii++)
{
if (names[ii] == name)
......@@ -504,7 +504,7 @@ avtSILArray::IsCompatible(const avtSILArray *a) const
return false;
if (names.size() != a->names.size())
return false;
for (int i = 0 ; i < names.size() ; i++)
for (size_t i = 0 ; i < names.size() ; i++)
{
if (names[i] != a->names[i])
return false;
......
......@@ -63,7 +63,7 @@ avtSILEnumeratedNamespace::avtSILEnumeratedNamespace(const vector<int> &els)
{
elements = els;
sequentialElems = true;
int ii;
size_t ii;
for (ii = 1; ii < els.size(); ii++)
{
if (els[ii-1]+1 != els[ii])
......@@ -156,7 +156,7 @@ avtSILEnumeratedNamespace::ContainsElement(int e) const
}
else
{
for (int ii = 0; ii < elements.size(); ii++)
for (size_t ii = 0; ii < elements.size(); ii++)
{
if (elements[ii] == e)
return true;
......
......@@ -156,7 +156,7 @@ avtSILMatrix::Initialize(const vector<int> &s1, SILCategoryRole r1,
role2 = r2;
category2 = n2;
int ii;
size_t ii;
set1IsSequential = true;
for (ii = 1; ii < set1.size(); ii++)
{
......@@ -313,7 +313,7 @@ avtSILMatrix::GetSILCollection(int index) const
string name;
SILCategoryRole role;
if (index < set1.size())
if ((size_t)index < set1.size())
{
int row = index;
......@@ -322,7 +322,7 @@ avtSILMatrix::GetSILCollection(int index) const
role = role2;
vector<int> s;
for (int i = 0 ; i < set2.size() ; i++)
for (size_t i = 0 ; i < set2.size() ; i++)
{
s.push_back(setsStartAt + row*static_cast<int>(set2.size()) + i);
}
......@@ -337,7 +337,7 @@ avtSILMatrix::GetSILCollection(int index) const
role = role1;
vector<int> s;
for (int i = 0 ; i < set1.size() ; i++)
for (size_t i = 0 ; i < set1.size() ; i++)
{
s.push_back(setsStartAt + i*set2.size() + column);
}
......@@ -624,10 +624,10 @@ avtSILMatrix::GetNumCollections(void) const
int
avtSILMatrix::SetIsInCollection(int set) const
{
int ii;
size_t ii;
if (set1IsSequential)
{
if (set1[0] <= set && set < set1[0]+set1.size())
if (set1[0] <= set && (size_t)set < set1[0]+set1.size())
return (GetStartCollection() + set - set1[0]);
}
else
......@@ -640,7 +640,7 @@ avtSILMatrix::SetIsInCollection(int set) const
}
if (set2IsSequential)
{
if (set2[0] <= set && set < set2[0]+set2.size())
if (set2[0] <= set && (size_t)set < set2[0]+set2.size())
return (GetStartCollection() + static_cast<int>(set1.size()) + set - set2[0]);
}
else
......
This diff is collapsed.
......@@ -168,7 +168,7 @@ avtSILRestrictionTraverser::GetEnumerationCount()
{
int count = 0;
int i;
size_t i;
avtSILSet_p set = silr->GetSILSet(silr->topSet);
const vector<int> &mapsOut = set->GetMapsOut();
......@@ -216,7 +216,7 @@ avtSILRestrictionTraverser::GetEnumerationMinMaxSetIds(int parentId, int *minId,
if (mapsOut.size() == 0)
return;
for (int i = 0 ; i < mapsOut.size() ; i++)
for (size_t i = 0 ; i < mapsOut.size() ; i++)
{
avtSILCollection_p coll = silr->GetSILCollection(mapsOut[i]);
if (coll->GetRole() == SIL_ENUMERATION)
......@@ -319,7 +319,7 @@ avtSILRestrictionTraverser::GetEnumeration(int index,
{
int count = 0;
int i, j;
size_t i, j;
enumList.clear();
avtSILSet_p set = silr->GetSILSet(silr->topSet);
const vector<int> &mapsOut = set->GetMapsOut();
......@@ -343,7 +343,7 @@ avtSILRestrictionTraverser::GetEnumeration(int index,
// look at each subset and determine if it is on or off.
//
name = coll->GetCategory();
int numElems = coll->GetNumberOfSubsets();
size_t numElems = coll->GetNumberOfSubsets();
enumList.resize(numElems);
for (j = 0 ; j < numElems ; j++)
{
......@@ -407,7 +407,7 @@ avtSILRestrictionTraverser::GetEnumeration(int index,
bool
avtSILRestrictionTraverser::GetSpecies(vector<bool> &specList)
{
int i, j;
size_t i, j;
specList.clear();
avtSILSet_p set = silr->GetSILSet(silr->topSet);
const vector<int> &mapsOut = set->GetMapsOut();
......@@ -426,7 +426,7 @@ avtSILRestrictionTraverser::GetSpecies(vector<bool> &specList)
// Now that we have found the species collection, look at each
// of the species subsets and determine if it is on or off.
//
int numElems = coll->GetNumberOfSubsets();
size_t numElems = coll->GetNumberOfSubsets();
specList.resize(numElems);
for (j = 0 ; j < numElems ; j++)
{
......@@ -519,7 +519,7 @@ avtSILRestrictionTraverser::GetDomainList(vector<int> &list, bool allProcs)
int timingsHandle = visitTimer->StartTimer();
list.clear();
int i, j, k;
size_t i, j, k;
//
// Throw in the identifiers of anything we are supposed to use. Don't
......@@ -540,7 +540,7 @@ avtSILRestrictionTraverser::GetDomainList(vector<int> &list, bool allProcs)
{
// Why go any further? We know this is a multi-domain data set with
// all domains on.
int numSets = silr->GetNumSets();
size_t numSets = silr->GetNumSets();
numSets -= 1; // for the top set.
list.resize(numSets);
for (i = 0 ; i < numSets ; i++)
......@@ -593,7 +593,7 @@ avtSILRestrictionTraverser::GetDomainList(vector<int> &list, bool allProcs)
{
avtSILCollection_p coll = silr->GetSILCollection(outmaps[j]);
const avtSILNamespace *ns = coll->GetSubsets();
int numElems = ns->GetNumberOfElements();
size_t numElems = ns->GetNumberOfElements();
setList.reserve(setList.size() + numElems);
for (k = 0 ; k < numElems ; k++)
{
......@@ -661,7 +661,7 @@ avtSILRestrictionTraverser::UsesAllData(void)
setList.push_back(silr->topSet);
const vector<unsigned char> &useSet = silr->useSet;
for (int i = 0 ; i < setList.size() ; i++)
for (size_t i = 0 ; i < setList.size() ; i++)
{
int setId = setList[i];
if (!useSet[setId])
......@@ -679,7 +679,7 @@ avtSILRestrictionTraverser::UsesAllData(void)
// Loop through each collection and each set coming out of that
// collection.
bool subMapDoesntUseAllData = false;
for (int j = 0; j < mapsOut.size(); j++)
for (size_t j = 0; j < mapsOut.size(); j++)
{
int collIndex = mapsOut[j];
avtSILArray_p pArray = NULL;
......@@ -772,7 +772,7 @@ avtSILRestrictionTraverser::UsesAllDomains(void)
{
int timingsHandle = visitTimer->StartTimer();
int i;
size_t i;
//
// Find the domains map coming out of the top level set.
......@@ -808,7 +808,7 @@ avtSILRestrictionTraverser::UsesAllDomains(void)
// Determine how domains come off the top level set. This is the maximum
// domains possible.
//
int nTargetDomains = domainCollection->GetNumberOfSubsets();
size_t nTargetDomains = domainCollection->GetNumberOfSubsets();
//
// Go through every one of the domains and see if it is being used. If
......@@ -891,7 +891,7 @@ avtSILRestrictionTraverser::GetMaterials(int chunk, bool &sms)
return nomats;
}
if (chunk < 0 || chunk >= materialListForChunk.size() ||
if (chunk < 0 || (size_t)chunk >= materialListForChunk.size() ||
materialListForChunk[chunk] < 0)
{
debug1 << "They have asked for a chunk (" << chunk << ") that we "
......@@ -971,7 +971,7 @@ avtSILRestrictionTraverser::PrepareForMaterialSearches(void)
setIsInProcessList[silr->topSet] = true;
const vector<unsigned char> &useSet = silr->useSet;
for (int i = 0 ; i < setsToProcess.size() ; i++)
for (size_t i = 0 ; i < setsToProcess.size() ; i++)
{
if (useSet[setsToProcess[i]] == NoneUsed)
{
......@@ -985,7 +985,7 @@ avtSILRestrictionTraverser::PrepareForMaterialSearches(void)
avtSILSet_p currentSet = silr->GetSILSet(setsToProcess[i]);
int chunk = currentSet->GetIdentifier();
const vector<int> &mapsOut = currentSet->GetMapsOut();
for (int j = 0 ; j < mapsOut.size() ; j++)
for (size_t j = 0 ; j < mapsOut.size() ; j++)
{
avtSILArray_p pArray = NULL;
avtSILMatrix_p pMat = NULL;
......@@ -1082,7 +1082,7 @@ void
avtSILRestrictionTraverser::AddMaterialList(int chunk, MaterialList &l,
bool shouldMatSel)
{
while (chunk >= materialListForChunk.size())
while ((size_t)chunk >= materialListForChunk.size())
{
materialListForChunk.push_back(-1);
}
......@@ -1193,7 +1193,7 @@ avtSILRestrictionTraverser::UsesAllMaterials()
return true;
}
int i, j;
size_t i, j;
avtSILSet_p set = silr->GetSILSet(silr->topSet);
const vector<int> &mapsOut = set->GetMapsOut();
......@@ -1211,7 +1211,7 @@ avtSILRestrictionTraverser::UsesAllMaterials()
// Now that we have found the material collection, look at each
// of the material subsets and determine if it is on or off.
//
int numElems = coll->GetNumberOfSubsets();
size_t numElems = coll->GetNumberOfSubsets();
for (j = 0 ; j < numElems && allUsed; j++)
{
allUsed = (useSet[coll->GetSubset(j)] != NoneUsed);
......
......@@ -189,6 +189,7 @@ class ValueRetriever
{
public:
virtual double GetValue(int) = 0;
virtual ~ValueRetriever() {} /// TODO: check remove warning on deleting non virtual destructor
};
class VariableValueRetriever : public ValueRetriever
......
......@@ -166,6 +166,7 @@ class ValueRetriever
{
public:
virtual double GetValue(int) = 0;
virtual ~ValueRetriever() {}
};
class VariableValueRetriever : public ValueRetriever
......@@ -194,7 +195,7 @@ avtDataBinningConstructor::ConstructDataBinning(
ConstructDataBinningAttributes *atts,
avtContract_p spec, bool mustReExecute)
{
int i, j, k, l;
size_t i, j, k, l;
//
// Certify the attributes.
......@@ -292,10 +293,10 @@ avtDataBinningConstructor::ConstructDataBinning(
//
int nvars = atts->GetVarnames().size();
float *minmax = new float[2*nvars];
for (i = 0 ; i < 2*nvars ; i++)
for (i = 0 ; i < (size_t)2*nvars ; i++)
minmax[i] = atts->GetBinBoundaries()[i];
int *nvals = new int[nvars];
for (i = 0 ; i < nvars ; i++)
for (i = 0 ; i < (size_t)nvars ; i++)
nvals[i] = atts->GetNumBins()[i];
avtBinningScheme *bs = new avtUniformBinningScheme(nvars, minmax, nvals);
std::vector<std::string> varnames = atts->GetVarnames();
......@@ -407,7 +408,7 @@ avtDataBinningConstructor::ConstructDataBinning(
bool mixedCentering = false;
if (nLeaves > 0)
{
for (k = 0 ; k < nvars ; k++)
for (k = 0 ; k < (size_t)nvars ; k++)
{
avtDataBinningFunctionInfo::BinBasedOn bbo =
info->GetBinBasedOnType(k);
......@@ -440,14 +441,14 @@ avtDataBinningConstructor::ConstructDataBinning(
else
hasError = true;
for (k = 0 ; k < nvars ; k++)
for (k = 0 ; k < (size_t)nvars ; k++)
if (isNodal[k] != coDomIsNodal)
mixedCentering = true;
}
else
{
// still should check for mixed centering
for (k = 1 ; k < nvars ; k++)
for (k = 1 ; k < (size_t)nvars ; k++)
if (isNodal[k] != isNodal[0])
mixedCentering = true;
}
......@@ -473,15 +474,15 @@ avtDataBinningConstructor::ConstructDataBinning(
}
ValueRetriever **val_ret = new ValueRetriever*[nvars];
for (k = 0 ; k < nvars ; k++)
for (k = 0 ; k < (size_t)nvars ; k++)
val_ret[k] = NULL;
float *args = new float[nvars];
for (j = 0 ; j < nLeaves ; j++)
for (j = 0 ; j < (size_t)nLeaves ; j++)
{
vtkDataArray *codomain = (coDomIsNodal
? leaves[j]->GetPointData()->GetArray(codomain_varname)
: leaves[j]->GetCellData()->GetArray(codomain_varname));
for (k = 0 ; k < nvars ; k++)
for (k = 0 ; k < (size_t)nvars ; k++)
{
avtDataBinningFunctionInfo::BinBasedOn bbo =
info->GetBinBasedOnType(k);
......@@ -529,7 +530,7 @@ avtDataBinningConstructor::ConstructDataBinning(
leaves[j]->GetDataObjectType() == VTK_POLY_DATA)
{
useValue.resize(nvals, false);
int ncells = leaves[j]->GetNumberOfCells();
size_t ncells = leaves[j]->GetNumberOfCells();
for (l = 0 ; l < ncells ; l++)
{
vtkCell *cell = leaves[j]->GetCell(l);
......@@ -542,7 +543,7 @@ avtDataBinningConstructor::ConstructDataBinning(
}
}
for (l = 0 ; l < nvals ; l++)
for (l = 0 ; l < (size_t)nvals ; l++)
{
if (useValue.size() > 0)
if (!useValue[l])
......@@ -550,7 +551,7 @@ avtDataBinningConstructor::ConstructDataBinning(
if (!mixedCentering)
{
for (k = 0 ; k < nvars ; k++)
for (k = 0 ; k < (size_t)nvars ; k++)
args[k] = val_ret[k]->GetValue(l);
int binId = bs->GetBinId(args);
float cval = 0.;
......@@ -565,7 +566,7 @@ avtDataBinningConstructor::ConstructDataBinning(
for (int p = 0 ; p < cell->GetNumberOfPoints() ; p++)
{
vtkIdType ptId = cell->GetPointId(p);
for (k = 0 ; k < nvars ; k++)
for (k = 0 ; k < (size_t)nvars ; k++)
if (isNodal[k])
args[k] = val_ret[k]->GetValue(ptId);
else
......@@ -582,7 +583,7 @@ avtDataBinningConstructor::ConstructDataBinning(
}
}
}
for (j = 0 ; j < nvars ; j++)
for (j = 0 ; j < (size_t)nvars ; j++)
if (val_ret[j] != NULL)
delete val_ret[j];
delete [] val_ret;
......
......@@ -75,7 +75,7 @@ avtDataBinningFunctionInfo::avtDataBinningFunctionInfo(avtBinningScheme *bs,
}
binningScheme = bs;
for (int i = 0 ; i < bn.size() ; i++)
for (size_t i = 0 ; i < bn.size() ; i++)
binBasedOn.push_back((BinBasedOn) bn[i]);
tupleNames = tn;
codomainVariable = cv;
......
......@@ -499,7 +499,7 @@ avtDatabaseFactory::FileList(DatabasePluginManager *dbmgr,
// succeed immediately.
//
vector<string> &preferred = defaultFileOpenOptions.GetPreferredIDs();
for (int i = 0 ; i < preferred.size() && rv == NULL ; i++)
for (size_t i = 0 ; i < preferred.size() && rv == NULL ; i++)
{
string formatid = preferred[i];
if (!dbmgr->PluginAvailable(formatid))
......@@ -607,7 +607,7 @@ avtDatabaseFactory::FileList(DatabasePluginManager *dbmgr,
if (rv == NULL)
{
vector<string> succeeded;
for (int i = 0; i < fileMatchedIds.size(); i++)
for (size_t i = 0; i < fileMatchedIds.size(); i++)
{
// Skip this one if it was preferred -- if we got here, it
// already failed on the previous pass
......@@ -727,7 +727,7 @@ avtDatabaseFactory::FileList(DatabasePluginManager *dbmgr,
// fallbacks, unless they are strictly unable to open the given
// file without a matching filename.
//
for (int i = 0 ; i < preferred.size() && rv == NULL ; i++)
for (size_t i = 0 ; i < preferred.size() && rv == NULL ; i++)
{
string formatid = preferred[i];
if (!dbmgr->PluginAvailable(formatid))
......@@ -960,7 +960,7 @@ avtDatabaseFactory::SetupDatabase(CommonDatabasePluginInfo *info,
treatAllDBsAsTimeVarying);
int nStates = md->GetNumStates();
// Expectation is that nStates == times.size() or times.size() == 0
int nToDo = (nStates < times.size() ? nStates : times.size());
int nToDo = (nStates < (int)times.size() ? nStates : (int)times.size());
for (int i = 0 ; i < nToDo ; i++)
{
md->SetTime(i, times[i]);
......
This diff is collapsed.
......@@ -172,7 +172,7 @@ avtPolygonToTrianglesTesselator::avtPolygonToTrianglesTesselator(vtkPoints *pts)
{
tessMemAllocated = 0;
tessMemAllocator = new TESSalloc();
memset(tessMemAllocator,0,sizeof(tessMemAllocator));
memset(tessMemAllocator,0,sizeof(TESSalloc));
tessMemAllocator->memalloc = tess_std_alloc;
tessMemAllocator->memfree = tess_std_free;
tessMemAllocator->userData = (void*)&tessMemAllocated;
......
......@@ -61,7 +61,7 @@ using std::vector;
// Prototypes
static int GroupSorter(const void *, const void *);
static SILCategoryRole CategoryFromCollectionClassName(string classStr);
//static SILCategoryRole CategoryFromCollectionClassName(string classStr);
// ****************************************************************************
......@@ -326,7 +326,7 @@ avtSILGenerator::AddSubsets(avtSIL *sil, int parent, int num, int origin,
if (namescheme.GetNamescheme() != "")
pArray = new avtSILArray(namescheme, num, origin, (cat==SIL_DOMAIN),
title, cat, parent);
else if (names.size() == num)
else if (names.size() == (size_t)num)
pArray = new avtSILArray(names, num, origin, (cat==SIL_DOMAIN),
title, cat, parent);