[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdeedu/libkdeedu/kdeeducore
From:       Pino Toscano <toscano.pino () tiscali ! it>
Date:       2007-02-28 23:01:29
Message-ID: 1172703689.328982.26960.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 638139 by pino:

API work on KEduVocConjugation:
- move all the private stuff into the Private class
- add copy constructor and operator= so it can be used as value class


 M  +112 -41   keduvocgrammar.cpp  
 M  +9 -38     keduvocgrammar.h  


--- trunk/KDE/kdeedu/libkdeedu/kdeeducore/keduvocgrammar.cpp #638138:638139
@@ -27,9 +27,55 @@
 
 #include <klocale.h>
 
-KEduVocConjugation::conjug_name_t
-KEduVocConjugation::names [] =
+class KEduVocConjugation::Private
 {
+public:
+  Private()
+  {
+  }
+
+  QString verbName; // added to have something to compare in operator ==, assumes \
that there is always only one +                    // KEduVocConjugation per verb
+
+  struct conjug_name_t
+  {
+    const char *abbrev;
+    const char *name;
+  };
+
+  struct conjug_t
+  {
+     conjug_t() {
+        p3common = false;
+        s3common = false;
+     }
+
+     QString type;
+     bool    p3common;
+     bool    s3common;
+     QString pers1_sing;
+     QString pers2_sing;
+     QString pers3_m_sing;
+     QString pers3_f_sing;
+     QString pers3_n_sing;
+     QString pers1_plur;
+     QString pers2_plur;
+     QString pers3_m_plur;
+     QString pers3_f_plur;
+     QString pers3_n_plur;
+  };
+
+  typedef QList<conjug_t> conjug_tList;
+  conjug_tList conjugations;
+
+  static conjug_name_t names[];
+  static QStringList userTenses;
+};
+
+
+KEduVocConjugation::Private::conjug_name_t
+KEduVocConjugation::Private::names [] =
+{
   { CONJ_SIMPLE_PRESENT,    I18N_NOOP("Simple Present") },
   { CONJ_PRESENT_PROGR,     I18N_NOOP("Present Progressive") },
   { CONJ_PRESENT_PERFECT,   I18N_NOOP("Present Perfect") },
@@ -42,7 +88,7 @@
 };
 
 
-QStringList KEduVocConjugation::userTenses;
+QStringList KEduVocConjugation::Private::userTenses;
 
 
 //================================================================
@@ -134,20 +180,45 @@
 //==============================================================
 
 
+KEduVocConjugation::KEduVocConjugation()
+  : d(new Private)
+{
+}
+
+
+KEduVocConjugation::KEduVocConjugation(const KEduVocConjugation& rhs)
+  : d(new Private(*rhs.d))
+{
+}
+
+
+KEduVocConjugation::~KEduVocConjugation()
+{
+  delete d;
+}
+
+
+KEduVocConjugation& KEduVocConjugation::operator =(const KEduVocConjugation& a)
+{
+  *d = *a.d;
+  return *this;
+}
+
+
 bool KEduVocConjugation::operator ==(const KEduVocConjugation& a) const
 {
-  return verbName == a.getVerbName();
+  return d->verbName == a.getVerbName();
 }
 
 
-const QString& KEduVocConjugation::getVerbName() const
+QString KEduVocConjugation::getVerbName() const
 {
-  return verbName;
+  return d->verbName;
 }
 
 int KEduVocConjugation::numEntries() const
 {
-  return conjugations.count();
+  return d->conjugations.count();
 }
 
 
@@ -156,14 +227,14 @@
   QList<KEduVocTenseRelation> vec;
 
   for (int i = 0; i < numInternalNames(); i++) {
-    vec.append(KEduVocTenseRelation(names[i].abbrev, i18n(names[i].name)));
+    vec.append(KEduVocTenseRelation(Private::names[i].abbrev, \
i18n(Private::names[i].name)));  }
 
-  for (int i = 0; i < userTenses.count(); i++) {
+  for (int i = 0; i < Private::userTenses.count(); i++) {
     QString s;
     s.setNum(i + 1);
     s.prepend(UL_USER_TENSE);
-    vec.append(KEduVocTenseRelation(s, userTenses[i]));
+    vec.append(KEduVocTenseRelation(s, Private::userTenses[i]));
   }
 
   return vec;
@@ -172,7 +243,7 @@
 
 void KEduVocConjugation::setTenseNames(const QStringList& names)
 {
-  userTenses = names;
+  Private::userTenses = names;
 }
 
 
@@ -183,15 +254,15 @@
     s.remove(0, 1);
     int i = s.toInt() - 1;
 
-    if (i < userTenses.count() )
-      return userTenses[i];
+    if (i < Private::userTenses.count() )
+      return Private::userTenses[i];
     else
       return "";
   }
   else {
     for (int i = 0; i < numInternalNames(); i++)
-      if (names[i].abbrev == abbrev) {
-        return i18n(names[i].name);
+      if (Private::names[i].abbrev == abbrev) {
+        return i18n(Private::names[i].name);
       }
   }
 
@@ -202,9 +273,9 @@
 QString KEduVocConjugation::getName(int idx)
 {
   if (idx < numInternalNames())
-    return i18n(names[idx].name);
+    return i18n(Private::names[idx].name);
   else if (idx < numTenses() )
-    return userTenses[idx-numInternalNames()];
+    return Private::userTenses[idx-numInternalNames()];
   else
     return "";
 }
@@ -212,8 +283,8 @@
 
 QString KEduVocConjugation::getAbbrev(const QString &name)
 {
-  for (int i = 0; i < userTenses.count(); i++)
-    if (userTenses[i] == name) {
+  for (int i = 0; i < Private::userTenses.count(); i++)
+    if (Private::userTenses[i] == name) {
       QString s;
       s.setNum(i + 1);
       s.prepend(UL_USER_TENSE);
@@ -221,8 +292,8 @@
     }
 
   for (int i = 0; i < numInternalNames(); i++)
-    if (names[i].name == name)
-      return names[i].abbrev;
+    if (Private::names[i].name == name)
+      return Private::names[i].abbrev;
 
   return "";
 }
@@ -231,7 +302,7 @@
 QString KEduVocConjugation::getAbbrev(int idx)
 {
   if (idx < numInternalNames() )
-    return names[idx].abbrev;
+    return Private::names[idx].abbrev;
 
   else if (idx < numTenses() ) {
     QString s;
@@ -247,38 +318,38 @@
 
 int KEduVocConjugation::numInternalNames()
 {
-  return sizeof(names) / sizeof(names[0]);
+  return sizeof(Private::names) / sizeof(Private::names[0]);
 }
 
 
 int KEduVocConjugation::numTenses()
 {
-  return numInternalNames() + userTenses.size();
+  return numInternalNames() + Private::userTenses.size();
 }
 
 
 QString KEduVocConjugation::getType(int idx)
 {
-  if (idx >= conjugations.count())
+  if (idx >= d->conjugations.count())
     return "";
 
-  return conjugations[idx].type;
+  return d->conjugations[idx].type;
 }
 
 
 void KEduVocConjugation::setType(int idx, const QString & type)
 {
-  if (idx >= (int) conjugations.size())
+  if (idx >= d->conjugations.size())
     return;
 
-  conjugations[idx].type = type;
+  d->conjugations[idx].type = type;
 }
 
 
 void KEduVocConjugation::cleanUp()
 {
-  for (int i = conjugations.count() - 1; i >= 0; i--) {
-    const conjug_t *ctp = &conjugations[i];
+  for (int i = d->conjugations.count() - 1; i >= 0; i--) {
+    const Private::conjug_t *ctp = &d->conjugations[i];
     if (   ctp->pers1_sing.simplified().isEmpty()
         && ctp->pers2_sing.simplified().isEmpty()
         && ctp->pers3_m_sing.simplified().isEmpty()
@@ -290,15 +361,15 @@
         && ctp->pers3_f_plur.simplified().isEmpty()
         && ctp->pers3_n_plur.simplified().isEmpty()
        )
-     conjugations.removeAt(i);
+     d->conjugations.removeAt(i);
   }
 }
 
 
 bool KEduVocConjugation::isEmpty(int idx)
 {
-  if (idx < conjugations.count()) {
-    const conjug_t *ctp = &conjugations[idx];
+  if (idx < d->conjugations.count()) {
+    const Private::conjug_t *ctp = &d->conjugations[idx];
     return ctp->pers1_sing.simplified().isEmpty()
         && ctp->pers2_sing.simplified().isEmpty()
         && ctp->pers3_m_sing.simplified().isEmpty()
@@ -315,9 +386,9 @@
 
 
 #define _GET_CON_(elem, type, default) \
-   for (int i = 0; i < (int) conjugations.size(); i++) \
-     if (conjugations[i].type == type) \
-        return conjugations[i].elem; \
+   for (int i = 0; i < d->conjugations.size(); i++) \
+     if (d->conjugations[i].type == type) \
+        return d->conjugations[i].elem; \
    return default;
 
 
@@ -397,15 +468,15 @@
 
 
 #define _SET_CON_(elem, type, str) \
-   for (int i = 0; i < (int) conjugations.size(); i++) \
-     if (conjugations[i].type == type) { \
-       conjugations[i].elem = str; \
+   for (int i = 0; i < d->conjugations.size(); i++) \
+     if (d->conjugations[i].type == type) { \
+       d->conjugations[i].elem = str; \
        return; \
      } \
-   conjug_t ct; \
+   Private::conjug_t ct; \
    ct.type = type; \
    ct.elem = str; \
-   conjugations.append(ct);
+   d->conjugations.append(ct);
 
 
 void KEduVocConjugation::setPers3PluralCommon(const QString &type, bool f)
--- trunk/KDE/kdeedu/libkdeedu/kdeeducore/keduvocgrammar.h #638138:638139
@@ -169,8 +169,12 @@
   /**
    * The constructor
    */
-  KEduVocConjugation() {}
+  explicit KEduVocConjugation();
 
+  KEduVocConjugation(const KEduVocConjugation& rhs);
+
+  ~KEduVocConjugation();
+
   /**
    * @return
    */
@@ -193,7 +197,7 @@
   static int numInternalNames();
   static int numTenses();
 
-  const QString& getVerbName() const;
+  QString getVerbName() const;
 
   QString getType(int index);
   void setType(int index, const QString & type);
@@ -228,45 +232,12 @@
   void setPers3MalePlural(const QString &type, const QString &str);
   void setPers3NaturalPlural(const QString &type, const QString &str);
 
+  KEduVocConjugation& operator = (const KEduVocConjugation& a);
   bool operator == (const KEduVocConjugation& a) const;
 
 private:
-  QString verbName; // added to have something to compare in operator ==, assumes \
                that there is always only one
-                    // KEduVocConjugation per verb
-
-  struct conjug_name_t
-  {
-    const char *abbrev;
-    const char *name;
-  };
-
-  struct conjug_t
-  {
-     conjug_t() {
-        p3common = false;
-        s3common = false;
-     }
-
-     QString type;
-     bool    p3common;
-     bool    s3common;
-     QString pers1_sing;
-     QString pers2_sing;
-     QString pers3_m_sing;
-     QString pers3_f_sing;
-     QString pers3_n_sing;
-     QString pers1_plur;
-     QString pers2_plur;
-     QString pers3_m_plur;
-     QString pers3_f_plur;
-     QString pers3_n_plur;
-  };
-
-  typedef QList<conjug_t> conjug_tList;
-  conjug_tList conjugations;
-
-  static conjug_name_t names[];
-  static QStringList userTenses;
+  class Private;
+  Private* const d;
 };
 
 #endif // grammarmanager_included


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic