Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit394df99

Browse files
akorotkovzilder
authored andcommitted
Fix bug in irange union.
1 parent51893ea commit394df99

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

‎contrib/pathman/pathman.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ typedef int IndexRange;
154154
#definelfirst_irange(lc)((IndexRange)(lc)->data.int_value)
155155
#definelappend_irange(list,irange)(lappend_int((list), (int)(irange)))
156156
#definelist_make1_irange(irange)lcons_int((int)(irange), NIL)
157-
157+
#definellast_irange(l)(IndexRange)lfirst_int(list_tail(l))
158158

159159
/* rangeset.c */
160160
boolirange_intersects(IndexRangea,IndexRangeb);

‎contrib/pathman/rangeset.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,28 @@ irange_list_intersect(List *a, List *b)
125125
ra=lfirst_irange(ca);
126126
rb=lfirst_irange(cb);
127127
if (irange_intersects(ra,rb))
128-
result=lappend_irange(result,irange_intersect(ra,rb));
128+
{
129+
IndexRangeintersect,last;
130+
131+
intersect=irange_intersect(ra,rb);
132+
if (result!=NIL)
133+
{
134+
last=llast_irange(result);
135+
if (irange_conjuncted(last,intersent)&&
136+
irange_is_lossy(last)==irange_is_lossy(intersect))
137+
{
138+
llast_int(result)=irange_union(last,intersect);
139+
}
140+
else
141+
{
142+
result=lappend_irange(result,intersect);
143+
}
144+
}
145+
else
146+
{
147+
result=lappend_irange(result,intersect);
148+
}
149+
}
129150

130151
if (irange_lower(ra) <=irange_lower(rb))
131152
ca=lnext(ca);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp