bool MailerGenerator::generate() const { if (actionList.isEmpty()) { qCritical("Bad parameter: Action name empty"); return false; } QStringList files; FileWriter fwh(dstDir.filePath(mailerName.toLower() + "mailer.h")); FileWriter fws(dstDir.filePath(mailerName.toLower() + "mailer.cpp")); // Generates a mailer header file QString act; for (QStringListIterator i(actionList); i.hasNext(); ) { act.append(" void ").append(i.next()).append("();\n"); } QString code = QString(MAILER_HEADER_FILE_TEMPLATE).arg(mailerName.toUpper(), mailerName, act); fwh.write(code, false); files << fwh.fileName(); // Generates a mailer source code QString actimpl; for (QStringListIterator i(actionList); i.hasNext(); ) { actimpl.append("void ").append(mailerName).append("Mailer::").append(i.next()).append("()\n{\n //\n // write codes\n //\n\n deliver(\"mail\");\n}\n\n"); } code = QString(MAILER_SOURCE_FILE_TEMPLATE).arg(mailerName.toLower(), actimpl); fws.write(code, false); files << fws.fileName(); // Updates a project file ProjectFileGenerator progen(dstDir.filePath("controllers.pro")); return progen.add(files); }
bool ControllerGenerator::generate(const QString &dstDir) const { // Reserved word check if (ngCtlrName()->contains(tableName.toLower())) { qCritical("Reserved word error. Please use another word. Controller name: %s", qPrintable(tableName)); return false; } QDir dir(dstDir); QStringList files; FileWriter fwh(dir.filePath(controllerName.toLower() + "controller.h")); FileWriter fws(dir.filePath(controllerName.toLower() + "controller.cpp")); if (actionList.isEmpty()) { if (fieldList.isEmpty()) { qCritical("Incorrect parameters."); return false; } QPair<QString, QVariant::Type> pair; if (primaryKeyIndex >= 0) pair = fieldList[primaryKeyIndex]; // Generates a controller source code QString sessInsertStr; QString sessGetStr; QString revStr; QString varName = enumNameToVariableName(controllerName); // Generates a controller header file QString code = QString(CONTROLLER_HEADER_FILE_TEMPLATE).arg(controllerName.toUpper(), controllerName, fieldNameToVariableName(pair.first)); fwh.write(code, false); files << fwh.fileName(); if (lockRevIndex >= 0) { sessInsertStr = QString(" session().insert(\"%1_lockRevision\", model.lockRevision());\n").arg(varName); sessGetStr = QString(" int rev = session().value(\"%1_lockRevision\").toInt();\n").arg(varName); revStr = QLatin1String(", rev"); } code = QString(CONTROLLER_SOURCE_FILE_TEMPLATE).arg(controllerName.toLower(), controllerName, varName, convMethod()->value(pair.second).arg(fieldNameToVariableName(pair.first)), sessInsertStr, sessGetStr, revStr, fieldNameToVariableName(pair.first)); fws.write(code, false); files << fws.fileName(); } else { // Generates a controller header file QString actions; for (QStringListIterator i(actionList); i.hasNext(); ) { actions.append(" void ").append(i.next()).append("();\n"); } QString code = QString(CONTROLLER_TINY_HEADER_FILE_TEMPLATE).arg(controllerName.toUpper(), controllerName, actions); fwh.write(code, false); files << fwh.fileName(); // Generates a controller source code QString actimpl; for (QStringListIterator i(actionList); i.hasNext(); ) { actimpl.append("void ").append(controllerName).append("Controller::").append(i.next()).append("()\n{\n // write code\n}\n\n"); } code = QString(CONTROLLER_TINY_SOURCE_FILE_TEMPLATE).arg(controllerName.toLower(), controllerName, actimpl); fws.write(code, false); files << fws.fileName(); } // Generates a project file ProjectFileGenerator progen(dir.filePath("controllers.pro")); return progen.add(files); }
int main(void){ fundoshi::string fs1, fs2; // const char *からfundoshi::stringを生成する例 fs1 = fundoshi::string("abcde"); std::cout << fs1.length() << std::endl; // 5 が表示される std::cout << fs1[0] << std::endl; // a が表示される std::cout << fs1[2] << std::endl; // c が表示される // std::stringからfundoshi::stringを生成する例 std::string x("abcde"); fs1 = fundoshi::string(x); std::cout << fs1.length() << std::endl; // 5 が表示される std::cout << fs1[0] << std::endl; // a が表示される std::cout << fs1[2] << std::endl; // c が表示される // std::stringのインスタンスとメモリを共有したまま、 // それの部分文字列に相当するfundoshi::stringを生成する例 fs2 = fundoshi::string(&(x[1]), 3); // ここで、yは「"bcd"」を表している std::cout << fs2.length() << std::endl; // 3 が表示される std::cout << fs2[0] << std::endl; // b が表示される std::cout << fs2[2] << std::endl; // d が表示される // メモリは共有されているので、元のメモリを書き換えると // fundoshi::stringインスタンスの内容も変更される x[2] = 'f'; std::cout << fs1[2] << std::endl; // f が表示される std::cout << fs2[1] << std::endl; // f が表示される // fundoshiにはwstringも存在する fundoshi::wstring fws(L"vwxyz"); std::cout << fws.length() << std::endl; // 5 が表示される std::cout << fws[0] << std::endl; // vのASCIIコード(118)が表示される std::cout << fws[2] << std::endl; // xのASCIIコード(120)が表示される // charやwchar_t以外も使える int y[10] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}; fundoshi::basic_string<int> fi(y, 10); std::cout << fi.length() << std::endl; // 10 が表示される std::cout << fi[5] << std::endl; // 25 が表示される std::cout << fi[8] << std::endl; // 64 が表示される // 文字列比較 std::cout << "string comparison" << std::endl; fs1 = fundoshi::string("abc"); fs2 = fundoshi::string("abc"); std::cout << (fs1 == fs2); // 1が表示される std::cout << (fs1 > fs2); // 0が表示される std::cout << (fs1 >= fs2); // 1が表示される std::cout << (fs1 < fs2); // 0が表示される std::cout << (fs1 <= fs2); // 1が表示される std::cout << std::endl; fs2 = fundoshi::string("adc"); std::cout << (fs1 == fs2); // 0が表示される std::cout << (fs1 > fs2); // 0が表示される std::cout << (fs1 >= fs2); // 0が表示される std::cout << (fs1 < fs2); // 1が表示される std::cout << (fs1 <= fs2); // 1が表示される std::cout << std::endl; fs2 = fundoshi::string("ab"); std::cout << (fs1 == fs2); // 0が表示される std::cout << (fs1 > fs2); // 1が表示される std::cout << (fs1 >= fs2); // 1が表示される std::cout << (fs1 < fs2); // 0が表示される std::cout << (fs1 <= fs2); // 0が表示される std::cout << std::endl; fs2 = fundoshi::string("abcd"); std::cout << (fs1 == fs2); // 0が表示される std::cout << (fs1 > fs2); // 0が表示される std::cout << (fs1 >= fs2); // 0が表示される std::cout << (fs1 < fs2); // 1が表示される std::cout << (fs1 <= fs2); // 1が表示される std::cout << std::endl; return 0; }