VapourSynth-llvmexpr
Loading...
Searching...
No Matches
PostfixBuilder.hpp
Go to the documentation of this file.
1
19
20#ifndef LLVMEXPR_FRONTEND_INFIX2POSTFIX_POSTFIXBUILDER_HPP
21#define LLVMEXPR_FRONTEND_INFIX2POSTFIX_POSTFIXBUILDER_HPP
22
23#include "types.hpp"
24
25#include <string>
26#include <vector>
27
28namespace infix2postfix {
29
31 public:
32 PostfixBuilder() = default;
33
34 // General
35 void addOp(TokenType type);
36 void addUnaryOp(TokenType type);
37 void addTernaryOp();
38 void addFunctionCall(const std::string& func_name);
39 void append(const PostfixBuilder& other);
40 [[nodiscard]] std::string getExpression() const;
41 void clear();
42 [[nodiscard]] bool empty() const;
43
44 // Literals & Variables
45 void addNumber(const std::string& num_literal);
46 void addConstant(const std::string& const_name);
47 void addVariableLoad(const std::string& var_name);
48 void addVariableStore(const std::string& var_name);
49
50 // Control Flow
51 void addLabel(const std::string& label_name);
52 void addConditionalJump(const std::string& label_name);
53 void addUnconditionalJump(const std::string& label_name);
54 void prefixLabels(const std::string& prefix);
55
56 // Data Access & I/O
57 void addPropAccess(const std::string& clip_name,
58 const std::string& prop_name);
59 void addPropExist(const std::string& clip_name,
60 const std::string& prop_name);
61 void addSetProp(const std::string& prop_name, const std::string& suffix);
62 void addDeleteProp(const std::string& prop_name);
63 void addStaticPixelAccess(const std::string& clip_name,
64 const std::string& x, const std::string& y,
65 const std::string& suffix);
66 void addDynPixelAccessExpr(const std::string& clip_name,
67 const std::string& suffix);
68 void addDynPixelAccessSingle(const std::string& clip_name,
69 const std::string& plane);
70 void addStoreExpr();
71 void addStoreSingle(const std::string& plane);
72 void addFrameDimension(const std::string& dim, const std::string& plane);
73 void addExitMarker();
74
75 // Stack manipulation
76 void addDropN(int count = 1);
77 void addDupN(int count = 0);
78 void addSwapN(int count = 1);
79 void addSortN(int count);
80
81 // Array operations
82 void addArrayAllocStatic(const std::string& array_name,
83 const std::string& size);
84 void addArrayAllocDynamic(const std::string& array_name);
85 void addArrayLoad(const std::string& array_name);
86 void addArrayStore(const std::string& array_name);
87
88 // For raw/unstructured parts
89 void addRaw(const std::string& raw_string);
90
91 private:
92 void pushToken(const std::string& token);
93 std::vector<std::string> tokens;
94};
95
96} // namespace infix2postfix
97
98#endif // LLVMEXPR_FRONTEND_INFIX2POSTFIX_POSTFIXBUILDER_HPP
void addConstant(const std::string &const_name)
void addStaticPixelAccess(const std::string &clip_name, const std::string &x, const std::string &y, const std::string &suffix)
void addSetProp(const std::string &prop_name, const std::string &suffix)
void addNumber(const std::string &num_literal)
void addLabel(const std::string &label_name)
void addUnconditionalJump(const std::string &label_name)
void addArrayAllocStatic(const std::string &array_name, const std::string &size)
void addPropExist(const std::string &clip_name, const std::string &prop_name)
void addConditionalJump(const std::string &label_name)
void addDeleteProp(const std::string &prop_name)
void prefixLabels(const std::string &prefix)
void addStoreSingle(const std::string &plane)
void addFunctionCall(const std::string &func_name)
void addArrayAllocDynamic(const std::string &array_name)
void addArrayLoad(const std::string &array_name)
void addDynPixelAccessExpr(const std::string &clip_name, const std::string &suffix)
void addUnaryOp(TokenType type)
void addArrayStore(const std::string &array_name)
void addDynPixelAccessSingle(const std::string &clip_name, const std::string &plane)
std::string getExpression() const
void append(const PostfixBuilder &other)
void addFrameDimension(const std::string &dim, const std::string &plane)
void addVariableStore(const std::string &var_name)
void addRaw(const std::string &raw_string)
void addPropAccess(const std::string &clip_name, const std::string &prop_name)
void addVariableLoad(const std::string &var_name)