示例#1
0
mccp_result_t
mccp_hashmap_clear(mccp_hashmap_t *hmptr, bool free_values) {
  mccp_result_t ret = MCCP_RESULT_ANY_FAILURES;

  if (hmptr != NULL &&
      *hmptr != NULL) {

    s_write_lock(*hmptr);
    {
      if ((*hmptr)->m_is_operational == true) {
        (*hmptr)->m_is_operational = false;
        s_reinit(*hmptr, free_values);
        (*hmptr)->m_is_operational = true;
        ret = MCCP_RESULT_OK;
      } else {
        ret = MCCP_RESULT_NOT_OPERATIONAL;
      }
    }
    s_unlock(*hmptr);

  } else {
    ret = MCCP_RESULT_INVALID_ARGS;
  }

  return ret;
}
示例#2
0
mccp_result_t
mccp_hashmap_iterate(mccp_hashmap_t *hmptr,
                     mccp_hashmap_iteration_proc_t proc,
                     void *arg) {
  mccp_result_t ret = MCCP_RESULT_ANY_FAILURES;

  if (hmptr != NULL &&
      *hmptr != NULL &&
      proc != NULL) {

    /*
     * The proc could modify hash values so we use write lock.
     */
    s_write_lock(*hmptr);
    {
      ret = s_iterate(hmptr, proc, arg);
    }
    s_unlock(*hmptr);

  } else {
    ret = MCCP_RESULT_INVALID_ARGS;
  }

  return ret;
}
示例#3
0
lagopus_result_t
lagopus_hashmap_iterate(lagopus_hashmap_t *hmptr,
                        lagopus_hashmap_iteration_proc_t proc,
                        void *arg) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  if (hmptr != NULL &&
      *hmptr != NULL &&
      proc != NULL) {
    int cstate;

    /*
     * The proc could modify hash values so we use write lock.
     */
    s_write_lock(*hmptr, &cstate);
    {
      ret = s_iterate(hmptr, proc, arg);
    }
    s_unlock(*hmptr, cstate);

  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
  }

  return ret;
}
示例#4
0
void
mccp_hashmap_shutdown(mccp_hashmap_t *hmptr, bool free_values) {
  if (hmptr != NULL &&
      *hmptr != NULL) {

    s_write_lock(*hmptr);
    {
      if ((*hmptr)->m_is_operational == true) {
        (*hmptr)->m_is_operational = false;
        s_clean(*hmptr, free_values);
      }
    }
    s_unlock(*hmptr);

  }
}
示例#5
0
void
lagopus_hashmap_shutdown(lagopus_hashmap_t *hmptr, bool free_values) {
  if (hmptr != NULL &&
      *hmptr != NULL) {
    int cstate;

    s_write_lock(*hmptr, &cstate);
    {
      if ((*hmptr)->m_is_operational == true) {
        (*hmptr)->m_is_operational = false;
        s_clean(*hmptr, free_values);
      }
    }
    s_unlock(*hmptr, cstate);

  }
}
示例#6
0
void
mccp_hashmap_destroy(mccp_hashmap_t *hmptr, bool free_values) {
  if (hmptr != NULL &&
      *hmptr != NULL) {

    s_write_lock(*hmptr);
    {
      if ((*hmptr)->m_is_operational == true) {
        (*hmptr)->m_is_operational = false;
        s_clean(*hmptr, free_values);
      }
    }
    s_unlock(*hmptr);

    mccp_rwlock_destroy(&((*hmptr)->m_lock));
    free((void *)*hmptr);
    *hmptr = NULL;
  }
}
示例#7
0
lagopus_result_t
lagopus_hashmap_clear(lagopus_hashmap_t *hmptr, bool free_values) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  if (hmptr != NULL &&
      *hmptr != NULL) {
    int cstate;

    s_write_lock(*hmptr, &cstate);
    {
      ret = s_clear(hmptr, free_values);
    }
    s_unlock(*hmptr, cstate);

  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
  }

  return ret;
}
示例#8
0
void
lagopus_hashmap_destroy(lagopus_hashmap_t *hmptr, bool free_values) {
  if (hmptr != NULL &&
      *hmptr != NULL) {
    int cstate;

    s_write_lock(*hmptr, &cstate);
    {
      if ((*hmptr)->m_is_operational == true) {
        (*hmptr)->m_is_operational = false;
        s_clean(*hmptr, free_values);
      }
    }
    s_unlock(*hmptr, cstate);

    lagopus_rwlock_destroy(&((*hmptr)->m_lock));
    free((void *)*hmptr);
    *hmptr = NULL;
  }
}
示例#9
0
mccp_result_t
mccp_hashmap_delete(mccp_hashmap_t *hmptr,
                    void *key, void **valptr,
                    bool free_value) {
  mccp_result_t ret = MCCP_RESULT_ANY_FAILURES;

  if (hmptr != NULL &&
      *hmptr != NULL) {

    s_write_lock(*hmptr);
    {
      ret = s_delete(hmptr, key, valptr, free_value);
    }
    s_unlock(*hmptr);

  } else {
    ret = MCCP_RESULT_INVALID_ARGS;
  }

  return ret;
}
示例#10
0
mccp_result_t
mccp_hashmap_add(mccp_hashmap_t *hmptr,
                 void *key, void **valptr,
                 bool allow_overwrite) {
  mccp_result_t ret = MCCP_RESULT_ANY_FAILURES;

  if (hmptr != NULL &&
      *hmptr != NULL &&
      valptr != NULL) {

    s_write_lock(*hmptr);
    {
      ret = s_add(hmptr, key, valptr, allow_overwrite);
    }
    s_unlock(*hmptr);

  } else {
    ret = MCCP_RESULT_INVALID_ARGS;
  }

  return ret;
}
示例#11
0
lagopus_result_t
lagopus_hashmap_add(lagopus_hashmap_t *hmptr,
                    void *key, void **valptr,
                    bool allow_overwrite) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  if (hmptr != NULL &&
      *hmptr != NULL &&
      valptr != NULL) {
    int cstate;

    s_write_lock(*hmptr, &cstate);
    {
      ret = s_add(hmptr, key, valptr, allow_overwrite);
    }
    s_unlock(*hmptr, cstate);

  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
  }

  return ret;
}