[Groonga-commit] groonga/groonga at b789fef [master] grn_pat: add comments and separate complex lines

Back to archive index

susumu.yata null+****@clear*****
Wed Oct 28 16:08:38 JST 2015


susumu.yata	2015-10-28 16:08:38 +0900 (Wed, 28 Oct 2015)

  New Revision: b789fef6b1b971cdd84e442dadab9aea835f221c
  https://github.com/groonga/groonga/commit/b789fef6b1b971cdd84e442dadab9aea835f221c

  Message:
    grn_pat: add comments and separate complex lines

  Modified files:
    lib/pat.c

  Modified: lib/pat.c (+69 -24)
===================================================================
--- lib/pat.c    2015-10-28 15:55:08 +0900 (9a92af3)
+++ lib/pat.c    2015-10-28 16:08:38 +0900 (a00895b)
@@ -238,8 +238,17 @@ pat_node_set_key(grn_ctx *ctx, grn_pat *pat, pat_node *n, const uint8_t *key, un
 /* delinfo operation */
 
 enum {
+  /* The delinfo is currently not used. */
   DL_EMPTY = 0,
+  /*
+   * stat->d refers to a deleting node (in a tree).
+   * The deletion requires an additional operation.
+   */
   DL_PHASE1,
+  /*
+   * stat->d refers to a deleted node (not in a tree).
+   * The node is pending for safety.
+   */
   DL_PHASE2
 };
 
@@ -265,32 +274,51 @@ delinfo_turn_2(grn_ctx *ctx, grn_pat *pat, grn_pat_delinfo *di)
   grn_id d, *p = NULL;
   pat_node *ln, *dn;
   // grn_log("delinfo_turn_2> di->d=%d di->ld=%d stat=%d", di->d, di->ld, di->stat);
-  if (di->stat != DL_PHASE1) { return GRN_SUCCESS; }
+  if (di->stat != DL_PHASE1) {
+    return GRN_SUCCESS;
+  }
   PAT_AT(pat, di->ld, ln);
-  if (!ln) { return GRN_INVALID_ARGUMENT; }
-  if (!(d = di->d)) { return GRN_INVALID_ARGUMENT; }
+  if (!ln) {
+    return GRN_INVALID_ARGUMENT;
+  }
+  d = di->d;
+  if (!d) {
+    return GRN_INVALID_ARGUMENT;
+  }
   PAT_AT(pat, d, dn);
-  if (!dn) { return GRN_INVALID_ARGUMENT; }
+  if (!dn) {
+    return GRN_INVALID_ARGUMENT;
+  }
   PAT_DEL_OFF(ln);
   PAT_DEL_OFF(dn);
   {
-    grn_id r, *p0;
+    grn_id *p0;
     pat_node *rn;
     int c0 = -1, c;
     uint32_t len = PAT_LEN(dn) * 16;
     const uint8_t *key = pat_node_get_key(ctx, pat, dn);
-    if (!key) { return GRN_INVALID_ARGUMENT; }
+    if (!key) {
+      return GRN_INVALID_ARGUMENT;
+    }
     PAT_AT(pat, 0, rn);
     p0 = &rn->lr[1];
-    while ((r = *p0)) {
+    for (;;) {
+      grn_id r = *p0;
+      if (!r) {
+        break;
+      }
       if (r == d) {
         p = p0;
         break;
       }
       PAT_AT(pat, r, rn);
-      if (!rn) { return GRN_FILE_CORRUPT; }
+      if (!rn) {
+        return GRN_FILE_CORRUPT;
+      }
       c = PAT_CHK(rn);
-      if (c <= c0 || len <= c) { break; }
+      if (c <= c0 || len <= c) {
+        break;
+      }
       if (c & 1) {
         p0 = (c + 1 < len) ? &rn->lr[1] : &rn->lr[0];
       } else {
@@ -1110,9 +1138,9 @@ _grn_pat_del(grn_ctx *ctx, grn_pat *pat, const char *key, uint32_t key_size, int
 
   /*
    * Search a patricia tree for a given key.
-   * If the key exists, get its associated node.
+   * If the key exists, get its output node.
    *
-   * rn, rn0: the associated node and its previous node.
+   * rn, rn0: the output node and its previous node.
    * rno: the other side of rn (the other destination of rn0).
    * c, c0: checks of rn0 and its previous node.
    * p, p0: pointers to transitions (IDs) that refer to rn and rn0.
@@ -1120,21 +1148,34 @@ _grn_pat_del(grn_ctx *ctx, grn_pat *pat, const char *key, uint32_t key_size, int
   PAT_AT(pat, 0, rn);
   proot = p = &rn->lr[1];
   for (;;) {
-    if (!(r = *p)) { return GRN_INVALID_ARGUMENT; }
+    r = *p;
+    if (!r) {
+      return GRN_INVALID_ARGUMENT;
+    }
     PAT_AT(pat, r, rn);
-    if (!rn) { return GRN_FILE_CORRUPT; }
+    if (!rn) {
+      return GRN_FILE_CORRUPT;
+    }
     ch = PAT_CHK(rn);
-    if (len <= ch) { return GRN_INVALID_ARGUMENT; }
+    if (len <= ch) {
+      return GRN_INVALID_ARGUMENT;
+    }
     if (c >= ch) {
+      /* Output node found. */
       const uint8_t *k = pat_node_get_key(ctx, pat, rn);
-      if (!k) { return GRN_INVALID_ARGUMENT; }
-      if (key_size == PAT_LEN(rn) && !memcmp(k, key, key_size)) {
-        break; /* found */
-      } else { return GRN_INVALID_ARGUMENT; }
+      if (!k) {
+        return GRN_INVALID_ARGUMENT;
+      }
+      if (key_size != PAT_LEN(rn) || memcmp(k, key, key_size)) {
+        return GRN_INVALID_ARGUMENT;
+      }
+      /* Given key found. */
+      break;
     }
     c0 = c;
     p0 = p;
-    if ((c = ch) & 1) {
+    c = ch;
+    if (c & 1) {
       p = (c + 1 < len) ? &rn->lr[1] : &rn->lr[0];
     } else {
       p = &rn->lr[nth_bit((uint8_t *)key, c, len)];
@@ -1148,7 +1189,7 @@ _grn_pat_del(grn_ctx *ctx, grn_pat *pat, const char *key, uint32_t key_size, int
   otherside = (rn0->lr[1] == r) ? rn0->lr[0] : rn0->lr[1];
 
   if (rn == rn0) {
-    /* The last transition is a self-loop. */
+    /* The last transition (p) is a self-loop. */
     di->stat = DL_PHASE2;
     di->d = r;
     if (otherside) {
@@ -1174,10 +1215,14 @@ _grn_pat_del(grn_ctx *ctx, grn_pat *pat, const char *key, uint32_t key_size, int
     }
     *p0 = otherside;
   } else {
-    /* The last transition is not a self-loop. */
+    /* The last transition (p) is not a self-loop. */
     grn_pat_delinfo *ldi = NULL, *ddi = NULL;
-    if (PAT_DEL(rn)) { ldi = delinfo_search(pat, r); }
-    if (PAT_DEL(rn0)) { ddi = delinfo_search(pat, *p0); }
+    if (PAT_DEL(rn)) {
+      ldi = delinfo_search(pat, r);
+    }
+    if (PAT_DEL(rn0)) {
+      ddi = delinfo_search(pat, *p0);
+    }
     if (ldi) {
       PAT_DEL_OFF(rn);
       di->stat = DL_PHASE2;
@@ -1224,7 +1269,7 @@ _grn_pat_del(grn_ctx *ctx, grn_pat *pat, const char *key, uint32_t key_size, int
       }
     }
     if (*p0 == otherside) {
-      /* The previous node is the other side (self-loop). */
+      /* The previous node (*p0) has a self-loop. */
       PAT_CHK_SET(rn0, 0);
       if (proot == p0 && !rn0->check) {
         const uint8_t *k = pat_node_get_key(ctx, pat, rn0);
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index