summaryrefslogtreecommitdiff
path: root/core/path_db.cpp
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2015-10-17 10:30:08 -0300
committerJuan Linietsky <reduzio@gmail.com>2015-10-17 10:30:08 -0300
commit63033aa646f7a49fbcecbc8cc30077cf268be10c (patch)
tree80ccf1aed83e6c4d3ed1db2e1d2c0258090f7339 /core/path_db.cpp
parentab22203791489df160c36a29a3cd8aa8b32bec04 (diff)
parent0d2b28377f1257af039c088f30c11aa0d12cc695 (diff)
Merge branch 'master' of https://github.com/okamstudio/godot
Diffstat (limited to 'core/path_db.cpp')
-rw-r--r--core/path_db.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/core/path_db.cpp b/core/path_db.cpp
index d3dc3aceb8..c6ea25d966 100644
--- a/core/path_db.cpp
+++ b/core/path_db.cpp
@@ -286,6 +286,37 @@ NodePath::NodePath(const Vector<StringName>& p_path,const Vector<StringName>& p_
data->property=p_property;
}
+
+void NodePath::simplify() {
+
+ if (!data)
+ return;
+ for(int i=0;i<data->path.size();i++) {
+ if (data->path.size()==1)
+ break;
+ if (data->path[i].operator String()==".") {
+ data->path.remove(i);
+ i--;
+ } else if (data->path[i].operator String()==".." && i>0 && data->path[i-1].operator String()!="." && data->path[i-1].operator String()!="..") {
+ //remove both
+ data->path.remove(i-1);
+ data->path.remove(i-1);
+ i-=2;
+ if (data->path.size()==0) {
+ data->path.push_back(".");
+ break;
+ }
+ }
+ }
+}
+
+NodePath NodePath::simplified() const {
+
+ NodePath np=*this;
+ np.simplify();
+ return np;
+}
+
NodePath::NodePath(const String& p_path) {
data=NULL;