Skip to content

Commit 8a48ae7

Browse files
committed
Refactored Property List methods
1 parent c09faab commit 8a48ae7

File tree

3 files changed

+40
-35
lines changed

3 files changed

+40
-35
lines changed

expression.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,16 @@ Expression::String Expression::asString() const noexcept{
153153
/***********************************************************************
154154
Property List and Graphic Primitive Methods
155155
**********************************************************************/
156+
void Expression::setProperty(const String key, Expression value)
157+
{
158+
// Add/reset (key, value) to this Expression's property list
159+
if(this->m_props.find(key) != this->m_props.end()){
160+
std::swap(this->m_props.at(key), value);
161+
}
162+
else{
163+
this->m_props.emplace(key, value);
164+
}
165+
}
156166

157167
Expression Expression::getProperty(const String key) const noexcept{
158168

@@ -487,16 +497,12 @@ Expression Expression::set_property(Environment & env)
487497
// Evaluate main Expression and copy result (including m_props)
488498
Expression result = m_tail[2].eval(env);
489499

490-
// Add/reset (key, value) to property list of copied Expression
491-
if(result.m_props.find(key) != result.m_props.end()){
492-
std::swap(result.m_props.at(key), value);
493-
}
494-
else{
495-
result.m_props.emplace(key, value);
496-
}
500+
// Add to property List
501+
result.setProperty(key, value);
502+
497503
// Return copied Expression with modified property list
498504
return result;
499-
};
505+
}
500506

501507
/*
502508
* (get-property <String> <Expression>)
@@ -522,13 +528,7 @@ Expression Expression::get_property(Environment & env)
522528
// tail[1] can be any valid Expression
523529
Expression exp = m_tail[1].eval(env);
524530

525-
// Search property list of tail[1] copy for key
526-
auto result = exp.m_props.find(key);
527-
if(result != exp.m_props.end()){
528-
return result->second;
529-
}
530-
531-
return Expression();
531+
return exp.getProperty(key);
532532
}
533533

534534
// this is a simple recursive version. the iterative version is more

expression.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,11 @@ class Expression {
100100
// Convenience member for external checks
101101
String asString() const noexcept;
102102

103-
// Temporary accessor method until I fix built-in methods later
104-
Expression getProperty(String key) const noexcept;
103+
// Convenient helper method for special-form equivalent
104+
void setProperty(const String key, Expression value);
105+
106+
// Convenient helper method for special-form equivalent
107+
Expression getProperty(const String key) const noexcept;
105108

106109
/// convienience member to determine if Expression is a Graphic Primitive Point
107110
bool isPointG() const noexcept;

startup.pls

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
(begin
2-
(define make-point (lambda (x y) (begin
3-
(define point{x,y} (list x y))
4-
(define point{x,y} (set-property "object-name" "point" point{x,y}))
5-
;(define point{x,y} (set-property "size" 0 point{x,y}))
6-
)))
7-
8-
(define make-line (lambda (p1 p2)(begin
9-
(define line{p1,p2} (list p1 p2))
10-
(define line{p1,p2} (set-property "object-name" "line" line{p1,p2}))
11-
;(define line{p1,p2} (set-property "thickness" 1 line{p1,p2}))
12-
)))
13-
14-
(define make-text (lambda (str) (begin
15-
(define text{str} (str))
16-
(define text{str} (set-property "object-name" "text" text{str}))
17-
;(define point{x,y} (make-point 0 0))
18-
;(define text{str} (set-property "position" point{x,y} text{str}))
19-
)))
2+
(define make-point
3+
(lambda (x y) (begin
4+
(define point{x,y} (list x y))
5+
(define point{x,y} (set-property "object-name" "point" point{x,y})) )
6+
)
7+
)
8+
9+
(define make-line
10+
(lambda (p1 p2) (begin
11+
(define line{p1,p2} (list p1 p2))
12+
(define line{p1,p2} (set-property "object-name" "line" line{p1,p2})) )
13+
)
14+
)
15+
16+
(define make-text
17+
(lambda (str) (begin
18+
(define text{str} (str))
19+
(define text{str} (set-property "object-name" "text" text{str})) )
20+
)
21+
)
2022
)

0 commit comments

Comments
 (0)