KeyExpr

Address space

Zenoh's address space is designed around keys which serve as the names of resources.

Keys are slash-separated lists of non-empty UTF8 strings. They may not contain the following characters: $*#?.

Zenoh's operations are executed on key expressions, a small language that allows the definition of sets of keys via the use of wildcards:

  • * is the single-chunk wildcard, and will match any chunk: a/*/c will match a/b/c, a/hello/c, etc...

  • ** is the 0 or more chunks wildcard: a/**/c matches a/c, a/b/c, a/b/hello/c, etc...

  • $* is the sub-chunk wildcard, it will match any amount of non-/ characters: a/b$* matches a/b, a/because, a/blue... but not a/c nor a/blue/c

To allow for better performance and gain the property that two key expressions define the same set if and only if they are the same string, the rules of canon form are mandatory for a key expression to be propagated by a Zenoh network:

  • **/** may not exist, as it could always be replaced by the shorter **,

  • ** /* may not exist, and must be written as its equivalent */** instead,

  • $* may not exist alone in a chunk, as it must be written * instead.

The KeyExpr.autocanonize constructor exists to correct eventual infringements of the canonization rules.

A KeyExpr is a string that has been validated to be a valid Key Expression.

Declaring a key expression from a session.

A KeyExpr acts as a container for the string representation of a key expression. Operations like intersects, includes, and equals are processed at the native layer using this string representation. For improved performance, consider initializing a KeyExpr through Session.declareKeyExpr. This method associates the KeyExpr with a native instance, thereby optimizing operation execution. However, it is crucial to manually invoke close on each KeyExpr instance before it is garbage collected to prevent memory leaks.

As an alternative, employing a try-with-resources pattern using Kotlin's use block is recommended. This approach ensures that close is automatically called, safely managing the lifecycle of the KeyExpr instance.

Parameters

keyExpr

The string representation of the key expression.

jniKeyExpr

An optional JNIKeyExpr instance, present when the key expression was declared through Session.declareKeyExpr, it represents the native instance of the key expression.

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard
open override fun close()

Closes the key expression. Operations performed on this key expression won't be valid anymore after this call.

Link copied to clipboard
open operator override fun equals(other: Any?): Boolean
Link copied to clipboard
open override fun hashCode(): Int
Link copied to clipboard
fun includes(other: KeyExpr): Boolean

Includes operation. This method returns true when all the keys defined by other also belong to the set defined by this. Will return false as well if the key expression is not valid anymore.

Link copied to clipboard

Intersects operation. This method returns True if there exists at least one key that belongs to both sets defined by this and other. Will return false as well if the key expression is not valid anymore.

Link copied to clipboard

Returns true if the KeyExpr has still associated a native key expression allowing it to perform operations.

Link copied to clipboard
open override fun toString(): String
Link copied to clipboard

Undeclare the key expression if it was previously declared on the specified session.