Skip to content

Commit 5aae6b8

Browse files
committed
Use shared pointers instead of raw
1 parent 340ac00 commit 5aae6b8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+1061
-1089
lines changed

.github/workflows/cmake-ubuntu.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ jobs:
2020
steps:
2121
- uses: actions/checkout@v3
2222

23-
- name: Install dependencies
24-
run: |
23+
- name: Install Dependencies
24+
run: |
2525
sudo apt-get update
2626
sudo apt-get install -y openssl libssl-dev libx11-dev xorg-dev
2727

cas/include/cas/data/ExpressionParser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ CAS_NAMESPACE
1313
class ExpressionParser {
1414
public:
1515
static ExpressionParser& getInstance();
16-
Expression* parse(const std::string& expression, VarSet& variables);
16+
ExprPtr parse(const std::string& expression, VarSet& variables);
1717

1818
void setup(std::string& expr);
1919
bool isValidExpression(const std::string& expr);

cas/include/cas/data/ExpressionProperties.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@
1010

1111
CAS_NAMESPACE
1212

13+
// TODO redesign so this is never copied
14+
1315
class ExpressionProperties {
1416
public:
1517
ExpressionProperties(ExpressionType type, std::string name, std::string shortName);
16-
1718
bool operator==(const ExpressionProperties& other) const;
1819

1920
uint16_t getOrder() const;

cas/include/cas/data/VariableMap.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
CAS_NAMESPACE
1414

15+
// TODO redesign to store std::pairs so iterators can be references
16+
1517
struct LetterMap {
1618
static const char LETTER_COUNT = 26;
1719
char letters = 0;

cas/include/cas/node/Abs.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,23 @@ CAS_NAMESPACE
1111

1212
class Abs : public BracketExpression {
1313
public:
14-
explicit Abs(Expression* argument);
14+
explicit Abs(ExprPtr argument);
1515

1616
Abs() = delete;
1717

1818
~Abs() override = default;
1919

2020
double evaluate(const VariableMap& variables) override;
2121

22-
Abs* clone() override;
22+
ExprPtr clone() override;
2323

24-
Expression* simplified() override;
24+
ExprPtr simplified() override;
2525

2626
std::string text() override;
27+
28+
static ExprPtr from(ExprPtr argument) {
29+
return std::make_shared<Abs>(argument);
30+
}
2731
};
2832

2933
CAS_NAMESPACE_END

cas/include/cas/node/BracketExpression.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ class BracketExpression : public UnaryExpression {
1515

1616
~BracketExpression() override = default;
1717

18-
bool _equals(Expression* other) override;
18+
bool _equals(ExprPtr other) override;
1919

20-
Expression* derivative(char var) override;
20+
ExprPtr derivative(char var) override;
2121

2222
std::string latex() override;
2323

@@ -28,7 +28,7 @@ class BracketExpression : public UnaryExpression {
2828
std::string explicitText() override;
2929

3030
protected:
31-
explicit BracketExpression(const ExpressionProperties& properties, Expression* argument,
31+
explicit BracketExpression(const ExpressionProperties& properties, ExprPtr argument,
3232
const wchar_t* openBracket, const wchar_t* closeBracket,
3333
const char* openBracketLatex, const char* closeBracketLatex);
3434

cas/include/cas/node/Cbrt.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,21 @@ CAS_NAMESPACE
1111

1212
class Cbrt : public Root {
1313
public:
14-
explicit Cbrt(Expression* base);
14+
explicit Cbrt(ExprPtr base);
1515
Cbrt() = delete;
1616
~Cbrt() override = default;
1717

1818
double evaluate(const VariableMap& variables) override;
19-
Cbrt* clone() override;
20-
Expression* _derivative(char variable) override;
21-
Expression* simplified() override;
19+
ExprPtr clone() override;
20+
ExprPtr _derivative(char variable) override;
21+
ExprPtr simplified() override;
2222

2323
std::string latex() override;
2424
std::wstring stringify() override;
2525
std::string text() override;
2626
std::string explicitText() override;
27+
28+
static CbrtPtr from(ExprPtr base) { return std::make_shared<Cbrt>(base); }
2729
};
2830

2931
CAS_NAMESPACE_END

cas/include/cas/node/Ceil.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,21 @@ CAS_NAMESPACE
1111

1212
class Ceil : public BracketExpression {
1313
public:
14-
explicit Ceil(Expression* argument);
14+
explicit Ceil(ExprPtr argument);
1515

1616
Ceil() = delete;
1717

1818
~Ceil() override = default;
1919

2020
double evaluate(const VariableMap& variables) override;
2121

22-
Ceil* clone() override;
22+
ExprPtr clone() override;
2323

24-
Expression* simplified() override;
24+
ExprPtr simplified() override;
25+
26+
static ExprPtr from(ExprPtr argument) {
27+
return std::make_shared<Ceil>(argument);
28+
}
2529
};
2630

2731
CAS_NAMESPACE_END

cas/include/cas/node/Const.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//
22
// Created by Abd-El-Aziz Zayed on 2022-08-26.
33
//
4+
45
#ifndef CAS_CONSTANT_H
56
#define CAS_CONSTANT_H
67

@@ -9,23 +10,21 @@
910

1011
CAS_NAMESPACE
1112

12-
class Const : public Expression {
13+
class Const : public Expr {
1314
public:
1415
explicit Const(double value);
15-
16-
explicit Const() : Const(0.0){};
17-
16+
Const() = delete;
1817
~Const() override = default;
1918

2019
double evaluate(const VariableMap& variables) override;
2120

22-
bool _equals(Expression* expression) override;
21+
bool _equals(ExprPtr expression) override;
2322

24-
Const* clone() override;
23+
ExprPtr clone() override;
2524

26-
Const* _derivative(char var) override;
25+
ExprPtr _derivative(char var) override;
2726

28-
Const* simplified() override;
27+
ExprPtr simplified() override;
2928

3029
std::string latex() override;
3130

@@ -35,17 +34,18 @@ class Const : public Expression {
3534

3635
double getValue() const { return value; }
3736

38-
static Const* PI() { return new Const{math::PI}; }
37+
static ConstPtr PI() { return n(math::PI); }
3938

40-
static Const* E() { return new Const{math::E}; }
39+
static ConstPtr E() { return n(math::E); }
4140

42-
static Const* PHI() { return new Const{math::PHI}; }
41+
static ConstPtr PHI() { return n(math::PHI); }
4342

44-
static Const* zero() { return new Const; }
43+
static ConstPtr zero() { return n(0.0); }
4544

46-
static Const* one() { return new Const{1.0}; }
45+
static ConstPtr one() { return n(1.0); }
4746

48-
static Const* n(double value) { return new Const{value}; }
47+
static ConstPtr n(double value) { return std::make_shared<Const>(value); }
48+
static ConstPtr from(double value) { return n(value); }
4949

5050
static bool floatingsEqual(double a, double b) {
5151
double max = std::max(1.0, std::max(std::fabs(a), std::fabs(b)));

cas/include/cas/node/Divide.h

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,22 @@
1010

1111
CAS_NAMESPACE
1212

13-
class Divide : public Expression {
13+
class Divide : public Expr {
1414
public:
15-
explicit Divide(Expression* dividend, Expression* divisor);
16-
1715
Divide() = delete;
16+
explicit Divide(ExprPtr dividend, ExprPtr divisor);
1817

19-
~Divide() override;
18+
~Divide() override = default;
2019

2120
double evaluate(const VariableMap& variables) override;
2221

23-
bool _equals(Expression* expression) override;
22+
bool _equals(ExprPtr expression) override;
2423

25-
Divide* clone() override;
24+
ExprPtr clone() override;
2625

27-
Divide* _derivative(char var) override;
26+
ExprPtr _derivative(char var) override;
2827

29-
Expression* simplified() override;
28+
ExprPtr simplified() override;
3029

3130
std::string latex() override;
3231

@@ -36,12 +35,17 @@ class Divide : public Expression {
3635

3736
std::string explicitText() override;
3837

39-
Expression* getDividend() const { return dividend; }
40-
Expression* getDivisor() const { return divisor; }
38+
static DividePtr from(ExprPtr dividend, ExprPtr divisor) { return std::make_shared<Divide>(dividend, divisor); }
39+
40+
ExprPtr getDividend() const { return dividend; }
41+
ExprPtr getDivisor() const { return divisor; }
42+
43+
private:
44+
void setParents();
4145

4246
private:
43-
Expression* dividend;
44-
Expression* divisor;
47+
ExprPtr dividend;
48+
ExprPtr divisor;
4549
};
4650

4751
CAS_NAMESPACE_END

0 commit comments

Comments
 (0)