X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fstatement.cpp;h=b1ff05826e314441fd3e93ced8c5117f295b5824;hb=4edbe0eb078c4e480682862ccb68ebc8cb284045;hp=0925917ffed20b5bfbb4f4ae9347c6dddf28b7d8;hpb=7df5e45c7f414f6a07681dc4ec2abb63b091a309;p=libs%2Fdatafile.git diff --git a/source/statement.cpp b/source/statement.cpp index 0925917..b1ff058 100644 --- a/source/statement.cpp +++ b/source/statement.cpp @@ -1,5 +1,6 @@ -#include +#include #include "statement.h" +#include "type.h" using namespace std; @@ -8,12 +9,14 @@ namespace DataFile { Statement::Statement(): valid(false), + control(false), line(0) { } Statement::Statement(const string &kw): keyword(kw), valid(true), + control(!kw.compare(0, 2, "__")), line(0) { } @@ -33,5 +36,38 @@ string Statement::get_signature() const return result; } + +StatementInfo::StatementInfo(): + args_size(0) +{ } + +StatementInfo::StatementInfo(const string &k, const string &s): + key(k, s), + args_size(0) +{ + for(string::const_iterator i=key.signature.begin(); i!=key.signature.end(); ++i) + { + arg_offsets.push_back(args_size); + switch(*i) + { + case IntType::signature: + args_size += sizeof(IntType::Store); + break; + case FloatType::signature: + args_size += sizeof(FloatType::Store); + break; + case BoolType::signature: + args_size += sizeof(BoolType::Store); + break; + case StringType::signature: + args_size += sizeof(StringType::Store); + break; + case SymbolType::signature: + args_size += sizeof(SymbolType::Store); + break; + } + } +} + } // namespace DataFile } // namespace Msp