Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
node-sass
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
楚学文
node-sass
Commits
87ab283f
Commit
87ab283f
authored
May 21, 2012
by
Aaron Leung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactored Node::clone().
parent
513dc66f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
68 additions
and
17 deletions
+68
-17
node_factory.cpp
node_factory.cpp
+36
-7
node_factory.hpp
node_factory.hpp
+18
-6
test_node_factory.cpp
test_node_factory.cpp
+14
-4
No files found.
node_factory.cpp
View file @
87ab283f
...
...
@@ -2,7 +2,7 @@
namespace
Sass
{
Node_Impl
*
Node_Factory
::
alloc_Node_Impl
(
Node
::
Type
type
,
string
*
file
,
size_t
line
)
Node_Impl
*
Node_Factory
::
alloc_Node_Impl
(
Node
::
Type
type
,
string
file
,
size_t
line
)
{
Node_Impl
*
ip
=
new
Node_Impl
();
ip
->
type
=
type
;
...
...
@@ -12,36 +12,61 @@ namespace Sass {
return
ip
;
}
Node
Node_Factory
::
operator
()(
Node
::
Type
type
,
string
*
file
,
size_t
line
,
const
Token
&
t
)
// returns a deep-copy of its argument
Node_Impl
*
Node_Factory
::
alloc_Node_Impl
(
Node_Impl
*
ip
)
{
Node_Impl
*
ip_cpy
=
new
Node_Impl
(
*
ip
);
if
(
ip_cpy
->
has_children
)
{
for
(
size_t
i
=
0
,
S
=
ip_cpy
->
size
();
i
<
S
;
++
i
)
{
Node
n
(
ip_cpy
->
at
(
i
));
n
.
ip_
=
alloc_Node_Impl
(
n
.
ip_
);
}
}
return
ip_cpy
;
}
// for cloning nodes
Node
Node_Factory
::
operator
()(
const
Node
&
n1
)
{
Node_Impl
*
ip_cpy
=
alloc_Node_Impl
(
n1
.
ip_
);
// deep-copy the implementation object
return
Node
(
ip_cpy
);
}
// for making leaf nodes out of terminals/tokens
Node
Node_Factory
::
operator
()(
Node
::
Type
type
,
string
file
,
size_t
line
,
const
Token
&
t
)
{
Node_Impl
*
ip
=
alloc_Node_Impl
(
type
,
file
,
line
);
ip
->
value
.
token
=
t
;
return
Node
(
ip
);
}
Node
Node_Factory
::
operator
()(
Node
::
Type
type
,
string
*
file
,
size_t
line
,
size_t
size
)
// for making interior nodes that have children
Node
Node_Factory
::
operator
()(
Node
::
Type
type
,
string
file
,
size_t
line
,
size_t
size
)
{
Node_Impl
*
ip
=
alloc_Node_Impl
(
type
,
file
,
line
);
ip
->
children
.
reserve
(
size
);
return
Node
(
ip
);
}
Node
Node_Factory
::
operator
()(
string
*
file
,
size_t
line
,
double
v
)
// for making nodes representing numbers
Node
Node_Factory
::
operator
()(
string
file
,
size_t
line
,
double
v
)
{
Node_Impl
*
ip
=
alloc_Node_Impl
(
Node
::
number
,
file
,
line
);
ip
->
value
.
numeric
=
v
;
return
Node
(
ip
);
}
Node
Node_Factory
::
operator
()(
string
*
file
,
size_t
line
,
double
v
,
const
Token
&
t
)
// for making nodes representing numeric dimensions (e.g. 5px, 3em)
Node
Node_Factory
::
operator
()(
string
file
,
size_t
line
,
double
v
,
const
Token
&
t
)
{
Node_Impl
*
ip
=
alloc_Node_Impl
(
Node
::
numeric_dimension
,
file
,
line
);
ip
->
value
.
dimension
.
numeric
=
v
;
ip
->
value
.
dimension
.
unit
=
t
;
return
Node
(
ip
);
}
Node
Node_Factory
::
operator
()(
string
*
file
,
size_t
line
,
double
r
,
double
g
,
double
b
,
double
a
)
// for making nodes representing rgba color quads
Node
Node_Factory
::
operator
()(
string
file
,
size_t
line
,
double
r
,
double
g
,
double
b
,
double
a
)
{
Node
color
((
*
this
)(
Node
::
numeric_color
,
file
,
line
,
4
));
color
<<
(
*
this
)(
file
,
line
,
r
)
...
...
@@ -51,4 +76,7 @@ namespace Sass {
return
color
;
}
void
Node_Factory
::
free
()
{
for
(
size_t
i
=
0
,
S
=
pool_
.
size
();
i
<
S
;
++
i
)
delete
pool_
[
i
];
}
}
\ No newline at end of file
node_factory.hpp
View file @
87ab283f
...
...
@@ -12,13 +12,24 @@ namespace Sass {
class
Node_Factory
{
vector
<
Node_Impl
*>
pool_
;
Node_Impl
*
alloc_Node_Impl
(
Node
::
Type
type
,
string
*
file
,
size_t
line
);
Node_Impl
*
alloc_Node_Impl
(
Node
::
Type
type
,
string
file
,
size_t
line
);
// returns a deep-copy of its argument
Node_Impl
*
alloc_Node_Impl
(
Node_Impl
*
ip
);
public
:
Node
operator
()(
Node
::
Type
type
,
string
*
file
,
size_t
line
,
const
Token
&
t
);
Node
operator
()(
Node
::
Type
type
,
string
*
file
,
size_t
line
,
size_t
size
);
Node
operator
()(
string
*
file
,
size_t
line
,
double
v
);
Node
operator
()(
string
*
file
,
size_t
line
,
double
v
,
const
Token
&
t
);
Node
operator
()(
string
*
file
,
size_t
line
,
double
r
,
double
g
,
double
b
,
double
a
=
1.0
);
// for cloning nodes
Node
operator
()(
const
Node
&
n1
);
// for making leaf nodes out of terminals/tokens
Node
operator
()(
Node
::
Type
type
,
string
file
,
size_t
line
,
const
Token
&
t
);
// for making interior nodes that have children
Node
operator
()(
Node
::
Type
type
,
string
file
,
size_t
line
,
size_t
size
);
// for making nodes representing numbers
Node
operator
()(
string
file
,
size_t
line
,
double
v
);
// for making nodes representing numeric dimensions (e.g. 5px, 3em)
Node
operator
()(
string
file
,
size_t
line
,
double
v
,
const
Token
&
t
);
// for making nodes representing rgba color quads
Node
operator
()(
string
file
,
size_t
line
,
double
r
,
double
g
,
double
b
,
double
a
=
1.0
);
void
free
();
};
}
\ No newline at end of file
test_node_factory.cpp
View file @
87ab283f
...
...
@@ -17,15 +17,15 @@ int main()
Node_Factory
new_Node
=
Node_Factory
();
Node
interior
(
new_Node
(
Node
::
block
,
0
,
0
,
3
));
Node
interior
(
new_Node
(
Node
::
block
,
""
,
0
,
3
));
cout
<<
interior
.
size
()
<<
endl
;
cout
<<
interior
.
has_children
()
<<
endl
;
cout
<<
interior
.
should_eval
()
<<
endl
<<
endl
;
Node
num
(
new_Node
(
0
,
0
,
255
,
123
,
32
));
Node
num2
(
new_Node
(
0
,
0
,
255
,
123
,
32
));
Node
num3
(
new_Node
(
0
,
0
,
255
,
122
,
20
,
.75
));
Node
num
(
new_Node
(
""
,
0
,
255
,
123
,
32
));
Node
num2
(
new_Node
(
""
,
0
,
255
,
123
,
32
));
Node
num3
(
new_Node
(
""
,
0
,
255
,
122
,
20
,
.75
));
cout
<<
num
.
size
()
<<
endl
;
cout
<<
num
.
has_children
()
<<
endl
;
...
...
@@ -42,6 +42,15 @@ int main()
cout
<<
(
num2
[
2
]
>=
num3
[
2
])
<<
endl
;
cout
<<
(
num2
[
3
]
!=
num3
[
3
])
<<
endl
<<
endl
;
Node
num4
(
new_Node
(
num3
));
cout
<<
num3
[
3
].
numeric_value
()
<<
endl
;
cout
<<
num4
[
3
].
numeric_value
()
<<
endl
;
num4
[
3
]
=
new_Node
(
""
,
0
,
0.4567
);
cout
<<
num3
[
3
].
numeric_value
()
<<
endl
;
cout
<<
num4
[
3
].
numeric_value
()
<<
endl
;
new_Node
.
free
();
return
0
;
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment