summaryrefslogtreecommitdiffstats
path: root/expr.h
diff options
context:
space:
mode:
Diffstat (limited to 'expr.h')
-rw-r--r--expr.h235
1 files changed, 0 insertions, 235 deletions
diff --git a/expr.h b/expr.h
deleted file mode 100644
index 1f1ece6..0000000
--- a/expr.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/****************************************************************************
- * bfs *
- * Copyright (C) 2015-2022 Tavian Barnes <tavianator@tavianator.com> *
- * *
- * Permission to use, copy, modify, and/or distribute this software for any *
- * purpose with or without fee is hereby granted. *
- * *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF *
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR *
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES *
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN *
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
- ****************************************************************************/
-
-/**
- * The expression tree representation.
- */
-
-#ifndef BFS_EXPR_H
-#define BFS_EXPR_H
-
-#include "color.h"
-#include "eval.h"
-#include "stat.h"
-#include <stdbool.h>
-#include <stddef.h>
-#include <sys/types.h>
-#include <time.h>
-
-/**
- * Integer comparison modes.
- */
-enum bfs_int_cmp {
- /** Exactly N. */
- BFS_INT_EQUAL,
- /** Less than N (-N). */
- BFS_INT_LESS,
- /** Greater than N (+N). */
- BFS_INT_GREATER,
-};
-
-/**
- * Permission comparison modes.
- */
-enum bfs_mode_cmp {
- /** Mode is an exact match (MODE). */
- BFS_MODE_EQUAL,
- /** Mode has all these bits (-MODE). */
- BFS_MODE_ALL,
- /** Mode has any of these bits (/MODE). */
- BFS_MODE_ANY,
-};
-
-/**
- * Possible time units.
- */
-enum bfs_time_unit {
- /** Seconds. */
- BFS_SECONDS,
- /** Minutes. */
- BFS_MINUTES,
- /** Days. */
- BFS_DAYS,
-};
-
-/**
- * Possible file size units.
- */
-enum bfs_size_unit {
- /** 512-byte blocks. */
- BFS_BLOCKS,
- /** Single bytes. */
- BFS_BYTES,
- /** Two-byte words. */
- BFS_WORDS,
- /** Kibibytes. */
- BFS_KB,
- /** Mebibytes. */
- BFS_MB,
- /** Gibibytes. */
- BFS_GB,
- /** Tebibytes. */
- BFS_TB,
- /** Pebibytes. */
- BFS_PB,
-};
-
-/**
- * A command line expression.
- */
-struct bfs_expr {
- /** The function that evaluates this expression. */
- bfs_eval_fn *eval_fn;
-
- /** The number of command line arguments for this expression. */
- size_t argc;
- /** The command line arguments comprising this expression. */
- char **argv;
-
- /** The number of files this expression keeps open between evaluations. */
- int persistent_fds;
- /** The number of files this expression opens during evaluation. */
- int ephemeral_fds;
-
- /** Whether this expression has no side effects. */
- bool pure;
- /** Whether this expression always evaluates to true. */
- bool always_true;
- /** Whether this expression always evaluates to false. */
- bool always_false;
- /** Whether this expression doesn't appear on the command line. */
- bool synthetic;
-
- /** Estimated cost. */
- float cost;
- /** Estimated probability of success. */
- float probability;
- /** Number of times this predicate was evaluated. */
- size_t evaluations;
- /** Number of times this predicate succeeded. */
- size_t successes;
- /** Total time spent running this predicate. */
- struct timespec elapsed;
-
- /** Auxilliary data for the evaluation function. */
- union {
- /** Child expressions. */
- struct {
- /** The left hand side of the expression. */
- struct bfs_expr *lhs;
- /** The right hand side of the expression. */
- struct bfs_expr *rhs;
- };
-
- /** Integer comparisons. */
- struct {
- /** Integer for this comparison. */
- long long num;
- /** The comparison mode. */
- enum bfs_int_cmp int_cmp;
-
- /** Optional extra data. */
- union {
- /** -size data. */
- enum bfs_size_unit size_unit;
-
- /** Timestamp comparison data. */
- struct {
- /** The stat field to look at. */
- enum bfs_stat_field stat_field;
- /** The reference time. */
- struct timespec reftime;
- /** The time unit. */
- enum bfs_time_unit time_unit;
- };
- };
- };
-
- /** Printing actions. */
- struct {
- /** The output stream. */
- CFILE *cfile;
- /** Optional -printf format. */
- struct bfs_printf *printf;
- };
-
- /** -exec data. */
- struct bfs_exec *exec;
-
- /** -flags data. */
- struct {
- /** The comparison mode. */
- enum bfs_mode_cmp flags_cmp;
- /** Flags that should be set. */
- unsigned long long set_flags;
- /** Flags that should be cleared. */
- unsigned long long clear_flags;
- };
-
- /** -perm data. */
- struct {
- /** The comparison mode. */
- enum bfs_mode_cmp mode_cmp;
- /** Mode to use for files. */
- mode_t file_mode;
- /** Mode to use for directories (different due to X). */
- mode_t dir_mode;
- };
-
- /** -regex data. */
- struct bfs_regex *regex;
-
- /** -samefile data. */
- struct {
- /** Device number of the target file. */
- dev_t dev;
- /** Inode number of the target file. */
- ino_t ino;
- };
- };
-};
-
-/** Singleton true expression instance. */
-extern struct bfs_expr bfs_true;
-/** Singleton false expression instance. */
-extern struct bfs_expr bfs_false;
-
-/**
- * Create a new expression.
- */
-struct bfs_expr *bfs_expr_new(bfs_eval_fn *eval, size_t argc, char **argv);
-
-/**
- * @return Whether the expression has child expressions.
- */
-bool bfs_expr_has_children(const struct bfs_expr *expr);
-
-/**
- * @return Whether expr is known to always quit.
- */
-bool bfs_expr_never_returns(const struct bfs_expr *expr);
-
-/**
- * @return The result of the integer comparison for this expression.
- */
-bool bfs_expr_cmp(const struct bfs_expr *expr, long long n);
-
-/**
- * Free an expression tree.
- */
-void bfs_expr_free(struct bfs_expr *expr);
-
-#endif // BFS_EXPR_H