Ruby: include/ruby/internal/core/rhash.h File Reference

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

Macros | Functions
rhash.h File Reference

Routines to manipulate struct RHash. More...

`#include "ruby/internal/config.h"`
`#include "ruby/internal/dllexport.h"`
`#include "ruby/internal/value.h"`
`#include "ruby/backward.h"`

Go to the source code of this file.

## Macros
#define | RHASH_TBL(h) rb_hash_tbl(h, __FILE__, __LINE__)
#define | RHASH_ITER_LEV(h) rb_hash_iter_lev(h)
#define | RHASH_IFNONE(h) rb_hash_ifnone(h)
#define | RHASH_SIZE(h) rb_hash_size_num(h)
#define | RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0)
#define | RHASH_SET_IFNONE(h, ifnone) rb_hash_set_ifnone((VALUE)h, ifnone)

## Functions
size_t | rb_hash_size_num (VALUE hash)
struct st_table * | rb_hash_tbl (VALUE, const char *file, int line)
VALUE | rb_hash_set_ifnone (VALUE hash, VALUE ifnone)

## Detailed Description

Routines to manipulate struct RHash.

Author
  Ruby developers ruby-.nosp@m.core.nosp@m.@ruby.nosp@m.-lan.nosp@m.g.org

Copyright
  This file is a part of the programming language Ruby. Permission is hereby granted, to either redistribute and/or modify this file, provided that the conditions mentioned in the file COPYING are met. Consult the file for details.

Warning
  Symbols prefixed with either `RBIMPL` or `rbimpl` are implementation details. Don't take them as canon. They could rapidly appear then vanish. The name (path) of this header file is also an implementation detail. Do not expect it to persist at the place it is now. Developers are free to move it anywhere anytime at will.

Note
  To ruby-core: remember that this header can be possibly recursively included from extension libraries written in C++. Do not expect for instance `__VA_ARGS__` is always available. We assume C99 for ruby itself but we don't assume languages of extension libraries. They could be written in C++98.

Shyouhei really suffered agnish over placement of macros in this file. They are half-brken. The situation (as of wriring) is:

- RHASH_TBL: works.
- RHASH_ITER_LEV: compile-time error.
- RHASH_IFNONE: compile-time error.
- RHASH_SIZE: works.
- RHASH_EMPTY_P: works.
- RHASH_SET_IFNONE: works (why... given you cannot query).

Shyouhei stopped thinking. Let them be as is.

Definition in file rhash.h.

## Macro Definition Documentation

## ◆ RHASH_EMPTY_P

#define RHASH_EMPTY_P | ( |  | h | ) | (RHASH_SIZE(h) == 0)

Definition at line 51 of file rhash.h.

## ◆ RHASH_IFNONE

#define RHASH_IFNONE | ( |  | h | ) | rb_hash_ifnone(h)

Definition at line 49 of file rhash.h.

## ◆ RHASH_ITER_LEV

#define RHASH_ITER_LEV | ( |  | h | ) | rb_hash_iter_lev(h)

Definition at line 48 of file rhash.h.

## ◆ RHASH_SET_IFNONE

#define RHASH_SET_IFNONE | ( |  | h,
|  |  | ifnone
| ) |  | rb_hash_set_ifnone((VALUE)h, ifnone)

Definition at line 52 of file rhash.h.

## ◆ RHASH_SIZE

#define RHASH_SIZE | ( |  | h | ) | rb_hash_size_num(h)

Definition at line 50 of file rhash.h.

## ◆ RHASH_TBL

#define RHASH_TBL | ( |  | h | ) | rb_hash_tbl(h, __FILE__, __LINE__)

Definition at line 47 of file rhash.h.

## Function Documentation

## ◆ rb_hash_set_ifnone()

VALUE rb_hash_set_ifnone | ( | VALUE | hash,
|  | VALUE | ifnone
| ) |  |

Definition at line 113 of file hash.c.

## ◆ rb_hash_size_num()

size_t rb_hash_size_num | ( | VALUE | hash | ) |

Definition at line 2987 of file hash.c.

References RHASH_SIZE.

## ◆ rb_hash_tbl()

struct st_table * rb_hash_tbl | ( | VALUE | hash,
|  | const char * | file,
|  | int | line
| ) |  |

Definition at line 1609 of file hash.c.