/*
* Cppcheck - A tool for static C/C++ code analysis
* Copyright (C) 2007-2015 Daniel Marjamäki and Cppcheck team.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#ifndef CPPCHECKLIBRARYDATA_H
#define CPPCHECKLIBRARYDATA_H
#include
#include
#include
#include
class CppcheckLibraryData {
public:
CppcheckLibraryData();
struct Container {
Container() : access_arrayLike(false), size_templateParameter(-1) {}
QString id;
QString inherits;
QString startPattern;
QString endPattern;
bool access_arrayLike;
int size_templateParameter;
struct {
QString templateParameter;
QString string;
} type;
struct Function {
QString name;
QString yields;
QString action;
};
QList accessFunctions;
QList otherFunctions;
QList sizeFunctions;
};
struct Define {
QString name;
QString value;
};
struct Function {
Function() : noreturn(Unknown), gccPure(false), gccConst(false),
leakignore(false), useretval(false) {
}
QStringList comments;
QString name;
enum TrueFalseUnknown { False, True, Unknown } noreturn;
bool gccPure;
bool gccConst;
bool leakignore;
bool useretval;
struct {
QString scan;
QString secure;
} formatstr;
struct Arg {
Arg() : nr(0), notbool(false), notnull(false), notuninit(false),
formatstr(false), strz(false) {
}
QString name;
unsigned int nr;
static const unsigned int ANY;
bool notbool;
bool notnull;
bool notuninit;
bool formatstr;
bool strz;
QString valid;
struct MinSize {
QString type;
QString arg;
QString arg2;
};
QList minsizes;
};
QList args;
};
struct MemoryResource {
QString type; // "memory" or "resource"
struct Alloc {
Alloc() : init(false) {}
bool init;
QString name;
};
QList alloc;
QStringList dealloc;
QStringList use;
};
struct PodType {
QString name;
QString size;
QString sign;
};
void clear() {
defines.clear();
functions.clear();
memoryresource.clear();
podtypes.clear();
}
bool open(QIODevice &file);
QString toString() const;
QList containers;
QList defines;
QList functions;
QList memoryresource;
QList podtypes;
};
#endif // LIBRARYDATA_H