diff options
Diffstat (limited to 'src/intervals.c')
| -rw-r--r-- | src/intervals.c | 192 |
1 files changed, 110 insertions, 82 deletions
diff --git a/src/intervals.c b/src/intervals.c index b0ef7c8d3b9..2dcf208a676 100644 --- a/src/intervals.c +++ b/src/intervals.c | |||
| @@ -62,6 +62,38 @@ static INTERVAL reproduce_tree (INTERVAL, INTERVAL); | |||
| 62 | 62 | ||
| 63 | /* Utility functions for intervals. */ | 63 | /* Utility functions for intervals. */ |
| 64 | 64 | ||
| 65 | /* Use these functions to set Lisp_Object | ||
| 66 | or pointer slots of struct interval. */ | ||
| 67 | |||
| 68 | static inline void | ||
| 69 | set_interval_object (INTERVAL i, Lisp_Object obj) | ||
| 70 | { | ||
| 71 | eassert (BUFFERP (obj) || STRINGP (obj)); | ||
| 72 | i->up_obj = 1; | ||
| 73 | i->up.obj = obj; | ||
| 74 | } | ||
| 75 | |||
| 76 | static inline void | ||
| 77 | set_interval_left (INTERVAL i, INTERVAL left) | ||
| 78 | { | ||
| 79 | i->left = left; | ||
| 80 | } | ||
| 81 | |||
| 82 | static inline void | ||
| 83 | set_interval_right (INTERVAL i, INTERVAL right) | ||
| 84 | { | ||
| 85 | i->right = right; | ||
| 86 | } | ||
| 87 | |||
| 88 | /* Make the parent of D be whatever the parent of S is, regardless | ||
| 89 | of the type. This is used when balancing an interval tree. */ | ||
| 90 | |||
| 91 | static inline void | ||
| 92 | copy_interval_parent (INTERVAL d, INTERVAL s) | ||
| 93 | { | ||
| 94 | d->up = s->up; | ||
| 95 | d->up_obj = s->up_obj; | ||
| 96 | } | ||
| 65 | 97 | ||
| 66 | /* Create the root interval of some object, a buffer or string. */ | 98 | /* Create the root interval of some object, a buffer or string. */ |
| 67 | 99 | ||
| @@ -79,18 +111,18 @@ create_root_interval (Lisp_Object parent) | |||
| 79 | new->total_length = (BUF_Z (XBUFFER (parent)) | 111 | new->total_length = (BUF_Z (XBUFFER (parent)) |
| 80 | - BUF_BEG (XBUFFER (parent))); | 112 | - BUF_BEG (XBUFFER (parent))); |
| 81 | eassert (0 <= TOTAL_LENGTH (new)); | 113 | eassert (0 <= TOTAL_LENGTH (new)); |
| 82 | buffer_set_intervals (XBUFFER (parent), new); | 114 | set_buffer_intervals (XBUFFER (parent), new); |
| 83 | new->position = BEG; | 115 | new->position = BEG; |
| 84 | } | 116 | } |
| 85 | else if (STRINGP (parent)) | 117 | else if (STRINGP (parent)) |
| 86 | { | 118 | { |
| 87 | new->total_length = SCHARS (parent); | 119 | new->total_length = SCHARS (parent); |
| 88 | eassert (0 <= TOTAL_LENGTH (new)); | 120 | eassert (0 <= TOTAL_LENGTH (new)); |
| 89 | string_set_intervals (parent, new); | 121 | set_string_intervals (parent, new); |
| 90 | new->position = 0; | 122 | new->position = 0; |
| 91 | } | 123 | } |
| 92 | 124 | ||
| 93 | interval_set_object (new, parent); | 125 | set_interval_object (new, parent); |
| 94 | 126 | ||
| 95 | return new; | 127 | return new; |
| 96 | } | 128 | } |
| @@ -104,7 +136,7 @@ copy_properties (register INTERVAL source, register INTERVAL target) | |||
| 104 | return; | 136 | return; |
| 105 | 137 | ||
| 106 | COPY_INTERVAL_CACHE (source, target); | 138 | COPY_INTERVAL_CACHE (source, target); |
| 107 | interval_set_plist (target, Fcopy_sequence (source->plist)); | 139 | set_interval_plist (target, Fcopy_sequence (source->plist)); |
| 108 | } | 140 | } |
| 109 | 141 | ||
| 110 | /* Merge the properties of interval SOURCE into the properties | 142 | /* Merge the properties of interval SOURCE into the properties |
| @@ -140,7 +172,7 @@ merge_properties (register INTERVAL source, register INTERVAL target) | |||
| 140 | if (NILP (val)) | 172 | if (NILP (val)) |
| 141 | { | 173 | { |
| 142 | val = XCAR (o); | 174 | val = XCAR (o); |
| 143 | interval_set_plist (target, Fcons (sym, Fcons (val, target->plist))); | 175 | set_interval_plist (target, Fcons (sym, Fcons (val, target->plist))); |
| 144 | } | 176 | } |
| 145 | o = XCDR (o); | 177 | o = XCDR (o); |
| 146 | } | 178 | } |
| @@ -322,21 +354,21 @@ rotate_right (INTERVAL interval) | |||
| 322 | if (! ROOT_INTERVAL_P (interval)) | 354 | if (! ROOT_INTERVAL_P (interval)) |
| 323 | { | 355 | { |
| 324 | if (AM_LEFT_CHILD (interval)) | 356 | if (AM_LEFT_CHILD (interval)) |
| 325 | interval_set_left (INTERVAL_PARENT (interval), B); | 357 | set_interval_left (INTERVAL_PARENT (interval), B); |
| 326 | else | 358 | else |
| 327 | interval_set_right (INTERVAL_PARENT (interval), B); | 359 | set_interval_right (INTERVAL_PARENT (interval), B); |
| 328 | } | 360 | } |
| 329 | interval_copy_parent (B, interval); | 361 | copy_interval_parent (B, interval); |
| 330 | 362 | ||
| 331 | /* Make B the parent of A */ | 363 | /* Make B the parent of A */ |
| 332 | i = B->right; | 364 | i = B->right; |
| 333 | interval_set_right (B, interval); | 365 | set_interval_right (B, interval); |
| 334 | interval_set_parent (interval, B); | 366 | set_interval_parent (interval, B); |
| 335 | 367 | ||
| 336 | /* Make A point to c */ | 368 | /* Make A point to c */ |
| 337 | interval_set_left (interval, i); | 369 | set_interval_left (interval, i); |
| 338 | if (i) | 370 | if (i) |
| 339 | interval_set_parent (i, interval); | 371 | set_interval_parent (i, interval); |
| 340 | 372 | ||
| 341 | /* A's total length is decreased by the length of B and its left child. */ | 373 | /* A's total length is decreased by the length of B and its left child. */ |
| 342 | interval->total_length -= B->total_length - LEFT_TOTAL_LENGTH (interval); | 374 | interval->total_length -= B->total_length - LEFT_TOTAL_LENGTH (interval); |
| @@ -369,21 +401,21 @@ rotate_left (INTERVAL interval) | |||
| 369 | if (! ROOT_INTERVAL_P (interval)) | 401 | if (! ROOT_INTERVAL_P (interval)) |
| 370 | { | 402 | { |
| 371 | if (AM_LEFT_CHILD (interval)) | 403 | if (AM_LEFT_CHILD (interval)) |
| 372 | interval_set_left (INTERVAL_PARENT (interval), B); | 404 | set_interval_left (INTERVAL_PARENT (interval), B); |
| 373 | else | 405 | else |
| 374 | interval_set_right (INTERVAL_PARENT (interval), B); | 406 | set_interval_right (INTERVAL_PARENT (interval), B); |
| 375 | } | 407 | } |
| 376 | interval_copy_parent (B, interval); | 408 | copy_interval_parent (B, interval); |
| 377 | 409 | ||
| 378 | /* Make B the parent of A */ | 410 | /* Make B the parent of A */ |
| 379 | i = B->left; | 411 | i = B->left; |
| 380 | interval_set_left (B, interval); | 412 | set_interval_left (B, interval); |
| 381 | interval_set_parent (interval, B); | 413 | set_interval_parent (interval, B); |
| 382 | 414 | ||
| 383 | /* Make A point to c */ | 415 | /* Make A point to c */ |
| 384 | interval_set_right (interval, i); | 416 | set_interval_right (interval, i); |
| 385 | if (i) | 417 | if (i) |
| 386 | interval_set_parent (i, interval); | 418 | set_interval_parent (i, interval); |
| 387 | 419 | ||
| 388 | /* A's total length is decreased by the length of B and its right child. */ | 420 | /* A's total length is decreased by the length of B and its right child. */ |
| 389 | interval->total_length -= B->total_length - RIGHT_TOTAL_LENGTH (interval); | 421 | interval->total_length -= B->total_length - RIGHT_TOTAL_LENGTH (interval); |
| @@ -455,9 +487,9 @@ balance_possible_root_interval (register INTERVAL interval) | |||
| 455 | if (have_parent) | 487 | if (have_parent) |
| 456 | { | 488 | { |
| 457 | if (BUFFERP (parent)) | 489 | if (BUFFERP (parent)) |
| 458 | buffer_set_intervals (XBUFFER (parent), interval); | 490 | set_buffer_intervals (XBUFFER (parent), interval); |
| 459 | else if (STRINGP (parent)) | 491 | else if (STRINGP (parent)) |
| 460 | string_set_intervals (parent, interval); | 492 | set_string_intervals (parent, interval); |
| 461 | } | 493 | } |
| 462 | 494 | ||
| 463 | return interval; | 495 | return interval; |
| @@ -493,9 +525,9 @@ buffer_balance_intervals (struct buffer *b) | |||
| 493 | INTERVAL i; | 525 | INTERVAL i; |
| 494 | 526 | ||
| 495 | eassert (b != NULL); | 527 | eassert (b != NULL); |
| 496 | i = buffer_get_intervals (b); | 528 | i = buffer_intervals (b); |
| 497 | if (i) | 529 | if (i) |
| 498 | buffer_set_intervals (b, balance_an_interval (i)); | 530 | set_buffer_intervals (b, balance_an_interval (i)); |
| 499 | } | 531 | } |
| 500 | 532 | ||
| 501 | /* Split INTERVAL into two pieces, starting the second piece at | 533 | /* Split INTERVAL into two pieces, starting the second piece at |
| @@ -519,20 +551,20 @@ split_interval_right (INTERVAL interval, ptrdiff_t offset) | |||
| 519 | ptrdiff_t new_length = LENGTH (interval) - offset; | 551 | ptrdiff_t new_length = LENGTH (interval) - offset; |
| 520 | 552 | ||
| 521 | new->position = position + offset; | 553 | new->position = position + offset; |
| 522 | interval_set_parent (new, interval); | 554 | set_interval_parent (new, interval); |
| 523 | 555 | ||
| 524 | if (NULL_RIGHT_CHILD (interval)) | 556 | if (NULL_RIGHT_CHILD (interval)) |
| 525 | { | 557 | { |
| 526 | interval_set_right (interval, new); | 558 | set_interval_right (interval, new); |
| 527 | new->total_length = new_length; | 559 | new->total_length = new_length; |
| 528 | eassert (0 <= TOTAL_LENGTH (new)); | 560 | eassert (0 <= TOTAL_LENGTH (new)); |
| 529 | } | 561 | } |
| 530 | else | 562 | else |
| 531 | { | 563 | { |
| 532 | /* Insert the new node between INTERVAL and its right child. */ | 564 | /* Insert the new node between INTERVAL and its right child. */ |
| 533 | interval_set_right (new, interval->right); | 565 | set_interval_right (new, interval->right); |
| 534 | interval_set_parent (interval->right, new); | 566 | set_interval_parent (interval->right, new); |
| 535 | interval_set_right (interval, new); | 567 | set_interval_right (interval, new); |
| 536 | new->total_length = new_length + new->right->total_length; | 568 | new->total_length = new_length + new->right->total_length; |
| 537 | eassert (0 <= TOTAL_LENGTH (new)); | 569 | eassert (0 <= TOTAL_LENGTH (new)); |
| 538 | balance_an_interval (new); | 570 | balance_an_interval (new); |
| @@ -564,20 +596,20 @@ split_interval_left (INTERVAL interval, ptrdiff_t offset) | |||
| 564 | 596 | ||
| 565 | new->position = interval->position; | 597 | new->position = interval->position; |
| 566 | interval->position = interval->position + offset; | 598 | interval->position = interval->position + offset; |
| 567 | interval_set_parent (new, interval); | 599 | set_interval_parent (new, interval); |
| 568 | 600 | ||
| 569 | if (NULL_LEFT_CHILD (interval)) | 601 | if (NULL_LEFT_CHILD (interval)) |
| 570 | { | 602 | { |
| 571 | interval_set_left (interval, new); | 603 | set_interval_left (interval, new); |
| 572 | new->total_length = new_length; | 604 | new->total_length = new_length; |
| 573 | eassert (0 <= TOTAL_LENGTH (new)); | 605 | eassert (0 <= TOTAL_LENGTH (new)); |
| 574 | } | 606 | } |
| 575 | else | 607 | else |
| 576 | { | 608 | { |
| 577 | /* Insert the new node between INTERVAL and its left child. */ | 609 | /* Insert the new node between INTERVAL and its left child. */ |
| 578 | interval_set_left (new, interval->left); | 610 | set_interval_left (new, interval->left); |
| 579 | interval_set_parent (new->left, new); | 611 | set_interval_parent (new->left, new); |
| 580 | interval_set_left (interval, new); | 612 | set_interval_left (interval, new); |
| 581 | new->total_length = new_length + new->left->total_length; | 613 | new->total_length = new_length + new->left->total_length; |
| 582 | eassert (0 <= TOTAL_LENGTH (new)); | 614 | eassert (0 <= TOTAL_LENGTH (new)); |
| 583 | balance_an_interval (new); | 615 | balance_an_interval (new); |
| @@ -952,20 +984,20 @@ adjust_intervals_for_insertion (INTERVAL tree, | |||
| 952 | RESET_INTERVAL (&newi); | 984 | RESET_INTERVAL (&newi); |
| 953 | pleft = prev ? prev->plist : Qnil; | 985 | pleft = prev ? prev->plist : Qnil; |
| 954 | pright = i ? i->plist : Qnil; | 986 | pright = i ? i->plist : Qnil; |
| 955 | interval_set_plist (&newi, merge_properties_sticky (pleft, pright)); | 987 | set_interval_plist (&newi, merge_properties_sticky (pleft, pright)); |
| 956 | 988 | ||
| 957 | if (! prev) /* i.e. position == BEG */ | 989 | if (! prev) /* i.e. position == BEG */ |
| 958 | { | 990 | { |
| 959 | if (! intervals_equal (i, &newi)) | 991 | if (! intervals_equal (i, &newi)) |
| 960 | { | 992 | { |
| 961 | i = split_interval_left (i, length); | 993 | i = split_interval_left (i, length); |
| 962 | interval_set_plist (i, newi.plist); | 994 | set_interval_plist (i, newi.plist); |
| 963 | } | 995 | } |
| 964 | } | 996 | } |
| 965 | else if (! intervals_equal (prev, &newi)) | 997 | else if (! intervals_equal (prev, &newi)) |
| 966 | { | 998 | { |
| 967 | prev = split_interval_right (prev, position - prev->position); | 999 | prev = split_interval_right (prev, position - prev->position); |
| 968 | interval_set_plist (prev, newi.plist); | 1000 | set_interval_plist (prev, newi.plist); |
| 969 | if (i && intervals_equal (prev, i)) | 1001 | if (i && intervals_equal (prev, i)) |
| 970 | merge_interval_right (prev); | 1002 | merge_interval_right (prev); |
| 971 | } | 1003 | } |
| @@ -1190,8 +1222,8 @@ delete_node (register INTERVAL i) | |||
| 1190 | this->total_length += migrate_amt; | 1222 | this->total_length += migrate_amt; |
| 1191 | } | 1223 | } |
| 1192 | eassert (0 <= TOTAL_LENGTH (this)); | 1224 | eassert (0 <= TOTAL_LENGTH (this)); |
| 1193 | interval_set_left (this, migrate); | 1225 | set_interval_left (this, migrate); |
| 1194 | interval_set_parent (migrate, this); | 1226 | set_interval_parent (migrate, this); |
| 1195 | 1227 | ||
| 1196 | return i->right; | 1228 | return i->right; |
| 1197 | } | 1229 | } |
| @@ -1216,12 +1248,12 @@ delete_interval (register INTERVAL i) | |||
| 1216 | GET_INTERVAL_OBJECT (owner, i); | 1248 | GET_INTERVAL_OBJECT (owner, i); |
| 1217 | parent = delete_node (i); | 1249 | parent = delete_node (i); |
| 1218 | if (parent) | 1250 | if (parent) |
| 1219 | interval_set_object (parent, owner); | 1251 | set_interval_object (parent, owner); |
| 1220 | 1252 | ||
| 1221 | if (BUFFERP (owner)) | 1253 | if (BUFFERP (owner)) |
| 1222 | buffer_set_intervals (XBUFFER (owner), parent); | 1254 | set_buffer_intervals (XBUFFER (owner), parent); |
| 1223 | else if (STRINGP (owner)) | 1255 | else if (STRINGP (owner)) |
| 1224 | string_set_intervals (owner, parent); | 1256 | set_string_intervals (owner, parent); |
| 1225 | else | 1257 | else |
| 1226 | abort (); | 1258 | abort (); |
| 1227 | 1259 | ||
| @@ -1231,15 +1263,15 @@ delete_interval (register INTERVAL i) | |||
| 1231 | parent = INTERVAL_PARENT (i); | 1263 | parent = INTERVAL_PARENT (i); |
| 1232 | if (AM_LEFT_CHILD (i)) | 1264 | if (AM_LEFT_CHILD (i)) |
| 1233 | { | 1265 | { |
| 1234 | interval_set_left (parent, delete_node (i)); | 1266 | set_interval_left (parent, delete_node (i)); |
| 1235 | if (parent->left) | 1267 | if (parent->left) |
| 1236 | interval_set_parent (parent->left, parent); | 1268 | set_interval_parent (parent->left, parent); |
| 1237 | } | 1269 | } |
| 1238 | else | 1270 | else |
| 1239 | { | 1271 | { |
| 1240 | interval_set_right (parent, delete_node (i)); | 1272 | set_interval_right (parent, delete_node (i)); |
| 1241 | if (parent->right) | 1273 | if (parent->right) |
| 1242 | interval_set_parent (parent->right, parent); | 1274 | set_interval_parent (parent->right, parent); |
| 1243 | } | 1275 | } |
| 1244 | } | 1276 | } |
| 1245 | 1277 | ||
| @@ -1320,8 +1352,8 @@ static void | |||
| 1320 | adjust_intervals_for_deletion (struct buffer *buffer, | 1352 | adjust_intervals_for_deletion (struct buffer *buffer, |
| 1321 | ptrdiff_t start, ptrdiff_t length) | 1353 | ptrdiff_t start, ptrdiff_t length) |
| 1322 | { | 1354 | { |
| 1323 | register ptrdiff_t left_to_delete = length; | 1355 | ptrdiff_t left_to_delete = length; |
| 1324 | register INTERVAL tree = buffer_get_intervals (buffer); | 1356 | INTERVAL tree = buffer_intervals (buffer); |
| 1325 | Lisp_Object parent; | 1357 | Lisp_Object parent; |
| 1326 | ptrdiff_t offset; | 1358 | ptrdiff_t offset; |
| 1327 | 1359 | ||
| @@ -1336,7 +1368,7 @@ adjust_intervals_for_deletion (struct buffer *buffer, | |||
| 1336 | 1368 | ||
| 1337 | if (length == TOTAL_LENGTH (tree)) | 1369 | if (length == TOTAL_LENGTH (tree)) |
| 1338 | { | 1370 | { |
| 1339 | buffer_set_intervals (buffer, NULL); | 1371 | set_buffer_intervals (buffer, NULL); |
| 1340 | return; | 1372 | return; |
| 1341 | } | 1373 | } |
| 1342 | 1374 | ||
| @@ -1353,10 +1385,10 @@ adjust_intervals_for_deletion (struct buffer *buffer, | |||
| 1353 | { | 1385 | { |
| 1354 | left_to_delete -= interval_deletion_adjustment (tree, start - offset, | 1386 | left_to_delete -= interval_deletion_adjustment (tree, start - offset, |
| 1355 | left_to_delete); | 1387 | left_to_delete); |
| 1356 | tree = buffer_get_intervals (buffer); | 1388 | tree = buffer_intervals (buffer); |
| 1357 | if (left_to_delete == tree->total_length) | 1389 | if (left_to_delete == tree->total_length) |
| 1358 | { | 1390 | { |
| 1359 | buffer_set_intervals (buffer, NULL); | 1391 | set_buffer_intervals (buffer, NULL); |
| 1360 | return; | 1392 | return; |
| 1361 | } | 1393 | } |
| 1362 | } | 1394 | } |
| @@ -1370,11 +1402,11 @@ adjust_intervals_for_deletion (struct buffer *buffer, | |||
| 1370 | void | 1402 | void |
| 1371 | offset_intervals (struct buffer *buffer, ptrdiff_t start, ptrdiff_t length) | 1403 | offset_intervals (struct buffer *buffer, ptrdiff_t start, ptrdiff_t length) |
| 1372 | { | 1404 | { |
| 1373 | if (!buffer_get_intervals (buffer) || length == 0) | 1405 | if (!buffer_intervals (buffer) || length == 0) |
| 1374 | return; | 1406 | return; |
| 1375 | 1407 | ||
| 1376 | if (length > 0) | 1408 | if (length > 0) |
| 1377 | adjust_intervals_for_insertion (buffer_get_intervals (buffer), | 1409 | adjust_intervals_for_insertion (buffer_intervals (buffer), |
| 1378 | start, length); | 1410 | start, length); |
| 1379 | else | 1411 | else |
| 1380 | { | 1412 | { |
| @@ -1510,9 +1542,9 @@ reproduce_interval (INTERVAL source) | |||
| 1510 | copy_properties (source, target); | 1542 | copy_properties (source, target); |
| 1511 | 1543 | ||
| 1512 | if (! NULL_LEFT_CHILD (source)) | 1544 | if (! NULL_LEFT_CHILD (source)) |
| 1513 | interval_set_left (target, reproduce_tree (source->left, target)); | 1545 | set_interval_left (target, reproduce_tree (source->left, target)); |
| 1514 | if (! NULL_RIGHT_CHILD (source)) | 1546 | if (! NULL_RIGHT_CHILD (source)) |
| 1515 | interval_set_right (target, reproduce_tree (source->right, target)); | 1547 | set_interval_right (target, reproduce_tree (source->right, target)); |
| 1516 | 1548 | ||
| 1517 | return target; | 1549 | return target; |
| 1518 | } | 1550 | } |
| @@ -1525,18 +1557,16 @@ reproduce_interval (INTERVAL source) | |||
| 1525 | static INTERVAL | 1557 | static INTERVAL |
| 1526 | reproduce_tree (INTERVAL source, INTERVAL parent) | 1558 | reproduce_tree (INTERVAL source, INTERVAL parent) |
| 1527 | { | 1559 | { |
| 1528 | register INTERVAL target = reproduce_interval (source); | 1560 | INTERVAL target = reproduce_interval (source); |
| 1529 | 1561 | set_interval_parent (target, parent); | |
| 1530 | interval_set_parent (target, parent); | ||
| 1531 | return target; | 1562 | return target; |
| 1532 | } | 1563 | } |
| 1533 | 1564 | ||
| 1534 | static INTERVAL | 1565 | static INTERVAL |
| 1535 | reproduce_tree_obj (INTERVAL source, Lisp_Object parent) | 1566 | reproduce_tree_obj (INTERVAL source, Lisp_Object parent) |
| 1536 | { | 1567 | { |
| 1537 | register INTERVAL target = reproduce_interval (source); | 1568 | INTERVAL target = reproduce_interval (source); |
| 1538 | 1569 | set_interval_object (target, parent); | |
| 1539 | interval_set_object (target, parent); | ||
| 1540 | return target; | 1570 | return target; |
| 1541 | } | 1571 | } |
| 1542 | 1572 | ||
| @@ -1582,12 +1612,10 @@ graft_intervals_into_buffer (INTERVAL source, ptrdiff_t position, | |||
| 1582 | ptrdiff_t length, struct buffer *buffer, | 1612 | ptrdiff_t length, struct buffer *buffer, |
| 1583 | int inherit) | 1613 | int inherit) |
| 1584 | { | 1614 | { |
| 1585 | register INTERVAL under, over, this; | 1615 | INTERVAL tree = buffer_intervals (buffer); |
| 1586 | register INTERVAL tree; | 1616 | INTERVAL under, over, this; |
| 1587 | ptrdiff_t over_used; | 1617 | ptrdiff_t over_used; |
| 1588 | 1618 | ||
| 1589 | tree = buffer_get_intervals (buffer); | ||
| 1590 | |||
| 1591 | /* If the new text has no properties, then with inheritance it | 1619 | /* If the new text has no properties, then with inheritance it |
| 1592 | becomes part of whatever interval it was inserted into. | 1620 | becomes part of whatever interval it was inserted into. |
| 1593 | To prevent inheritance, we must clear out the properties | 1621 | To prevent inheritance, we must clear out the properties |
| @@ -1616,9 +1644,9 @@ graft_intervals_into_buffer (INTERVAL source, ptrdiff_t position, | |||
| 1616 | Lisp_Object buf; | 1644 | Lisp_Object buf; |
| 1617 | 1645 | ||
| 1618 | XSETBUFFER (buf, buffer); | 1646 | XSETBUFFER (buf, buffer); |
| 1619 | buffer_set_intervals (buffer, reproduce_tree_obj (source, buf)); | 1647 | set_buffer_intervals (buffer, reproduce_tree_obj (source, buf)); |
| 1620 | buffer_get_intervals (buffer)->position = BUF_BEG (buffer); | 1648 | buffer_intervals (buffer)->position = BUF_BEG (buffer); |
| 1621 | eassert (buffer_get_intervals (buffer)->up_obj == 1); | 1649 | eassert (buffer_intervals (buffer)->up_obj == 1); |
| 1622 | return; | 1650 | return; |
| 1623 | } | 1651 | } |
| 1624 | else if (!tree) | 1652 | else if (!tree) |
| @@ -1876,7 +1904,7 @@ set_point_both (ptrdiff_t charpos, ptrdiff_t bytepos) | |||
| 1876 | 1904 | ||
| 1877 | /* If we have no text properties and overlays, | 1905 | /* If we have no text properties and overlays, |
| 1878 | then we can do it quickly. */ | 1906 | then we can do it quickly. */ |
| 1879 | if (!buffer_get_intervals (current_buffer) && ! have_overlays) | 1907 | if (!buffer_intervals (current_buffer) && ! have_overlays) |
| 1880 | { | 1908 | { |
| 1881 | temp_set_point_both (current_buffer, charpos, bytepos); | 1909 | temp_set_point_both (current_buffer, charpos, bytepos); |
| 1882 | return; | 1910 | return; |
| @@ -1885,7 +1913,7 @@ set_point_both (ptrdiff_t charpos, ptrdiff_t bytepos) | |||
| 1885 | /* Set TO to the interval containing the char after CHARPOS, | 1913 | /* Set TO to the interval containing the char after CHARPOS, |
| 1886 | and TOPREV to the interval containing the char before CHARPOS. | 1914 | and TOPREV to the interval containing the char before CHARPOS. |
| 1887 | Either one may be null. They may be equal. */ | 1915 | Either one may be null. They may be equal. */ |
| 1888 | to = find_interval (buffer_get_intervals (current_buffer), charpos); | 1916 | to = find_interval (buffer_intervals (current_buffer), charpos); |
| 1889 | if (charpos == BEGV) | 1917 | if (charpos == BEGV) |
| 1890 | toprev = 0; | 1918 | toprev = 0; |
| 1891 | else if (to && to->position == charpos) | 1919 | else if (to && to->position == charpos) |
| @@ -1899,7 +1927,7 @@ set_point_both (ptrdiff_t charpos, ptrdiff_t bytepos) | |||
| 1899 | and FROMPREV to the interval containing the char before PT. | 1927 | and FROMPREV to the interval containing the char before PT. |
| 1900 | Either one may be null. They may be equal. */ | 1928 | Either one may be null. They may be equal. */ |
| 1901 | /* We could cache this and save time. */ | 1929 | /* We could cache this and save time. */ |
| 1902 | from = find_interval (buffer_get_intervals (current_buffer), buffer_point); | 1930 | from = find_interval (buffer_intervals (current_buffer), buffer_point); |
| 1903 | if (buffer_point == BEGV) | 1931 | if (buffer_point == BEGV) |
| 1904 | fromprev = 0; | 1932 | fromprev = 0; |
| 1905 | else if (from && from->position == PT) | 1933 | else if (from && from->position == PT) |
| @@ -2005,7 +2033,7 @@ set_point_both (ptrdiff_t charpos, ptrdiff_t bytepos) | |||
| 2005 | /* Set TO to the interval containing the char after CHARPOS, | 2033 | /* Set TO to the interval containing the char after CHARPOS, |
| 2006 | and TOPREV to the interval containing the char before CHARPOS. | 2034 | and TOPREV to the interval containing the char before CHARPOS. |
| 2007 | Either one may be null. They may be equal. */ | 2035 | Either one may be null. They may be equal. */ |
| 2008 | to = find_interval (buffer_get_intervals (current_buffer), charpos); | 2036 | to = find_interval (buffer_intervals (current_buffer), charpos); |
| 2009 | if (charpos == BEGV) | 2037 | if (charpos == BEGV) |
| 2010 | toprev = 0; | 2038 | toprev = 0; |
| 2011 | else if (to && to->position == charpos) | 2039 | else if (to && to->position == charpos) |
| @@ -2138,11 +2166,11 @@ get_property_and_range (ptrdiff_t pos, Lisp_Object prop, Lisp_Object *val, | |||
| 2138 | INTERVAL i, prev, next; | 2166 | INTERVAL i, prev, next; |
| 2139 | 2167 | ||
| 2140 | if (NILP (object)) | 2168 | if (NILP (object)) |
| 2141 | i = find_interval (buffer_get_intervals (current_buffer), pos); | 2169 | i = find_interval (buffer_intervals (current_buffer), pos); |
| 2142 | else if (BUFFERP (object)) | 2170 | else if (BUFFERP (object)) |
| 2143 | i = find_interval (buffer_get_intervals (XBUFFER (object)), pos); | 2171 | i = find_interval (buffer_intervals (XBUFFER (object)), pos); |
| 2144 | else if (STRINGP (object)) | 2172 | else if (STRINGP (object)) |
| 2145 | i = find_interval (string_get_intervals (object), pos); | 2173 | i = find_interval (string_intervals (object), pos); |
| 2146 | else | 2174 | else |
| 2147 | abort (); | 2175 | abort (); |
| 2148 | 2176 | ||
| @@ -2269,13 +2297,13 @@ void | |||
| 2269 | copy_intervals_to_string (Lisp_Object string, struct buffer *buffer, | 2297 | copy_intervals_to_string (Lisp_Object string, struct buffer *buffer, |
| 2270 | ptrdiff_t position, ptrdiff_t length) | 2298 | ptrdiff_t position, ptrdiff_t length) |
| 2271 | { | 2299 | { |
| 2272 | INTERVAL interval_copy = copy_intervals (buffer_get_intervals (buffer), | 2300 | INTERVAL interval_copy = copy_intervals (buffer_intervals (buffer), |
| 2273 | position, length); | 2301 | position, length); |
| 2274 | if (!interval_copy) | 2302 | if (!interval_copy) |
| 2275 | return; | 2303 | return; |
| 2276 | 2304 | ||
| 2277 | interval_set_object (interval_copy, string); | 2305 | set_interval_object (interval_copy, string); |
| 2278 | string_set_intervals (string, interval_copy); | 2306 | set_string_intervals (string, interval_copy); |
| 2279 | } | 2307 | } |
| 2280 | 2308 | ||
| 2281 | /* Return 1 if strings S1 and S2 have identical properties; 0 otherwise. | 2309 | /* Return 1 if strings S1 and S2 have identical properties; 0 otherwise. |
| @@ -2288,8 +2316,8 @@ compare_string_intervals (Lisp_Object s1, Lisp_Object s2) | |||
| 2288 | ptrdiff_t pos = 0; | 2316 | ptrdiff_t pos = 0; |
| 2289 | ptrdiff_t end = SCHARS (s1); | 2317 | ptrdiff_t end = SCHARS (s1); |
| 2290 | 2318 | ||
| 2291 | i1 = find_interval (string_get_intervals (s1), 0); | 2319 | i1 = find_interval (string_intervals (s1), 0); |
| 2292 | i2 = find_interval (string_get_intervals (s2), 0); | 2320 | i2 = find_interval (string_intervals (s2), 0); |
| 2293 | 2321 | ||
| 2294 | while (pos < end) | 2322 | while (pos < end) |
| 2295 | { | 2323 | { |
| @@ -2414,13 +2442,13 @@ set_intervals_multibyte_1 (INTERVAL i, int multi_flag, | |||
| 2414 | { | 2442 | { |
| 2415 | if ((i)->left) | 2443 | if ((i)->left) |
| 2416 | { | 2444 | { |
| 2417 | interval_set_plist (i, i->left->plist); | 2445 | set_interval_plist (i, i->left->plist); |
| 2418 | (i)->left->total_length = 0; | 2446 | (i)->left->total_length = 0; |
| 2419 | delete_interval ((i)->left); | 2447 | delete_interval ((i)->left); |
| 2420 | } | 2448 | } |
| 2421 | else | 2449 | else |
| 2422 | { | 2450 | { |
| 2423 | interval_set_plist (i, i->right->plist); | 2451 | set_interval_plist (i, i->right->plist); |
| 2424 | (i)->right->total_length = 0; | 2452 | (i)->right->total_length = 0; |
| 2425 | delete_interval ((i)->right); | 2453 | delete_interval ((i)->right); |
| 2426 | } | 2454 | } |
| @@ -2434,7 +2462,7 @@ set_intervals_multibyte_1 (INTERVAL i, int multi_flag, | |||
| 2434 | void | 2462 | void |
| 2435 | set_intervals_multibyte (int multi_flag) | 2463 | set_intervals_multibyte (int multi_flag) |
| 2436 | { | 2464 | { |
| 2437 | INTERVAL i = buffer_get_intervals (current_buffer); | 2465 | INTERVAL i = buffer_intervals (current_buffer); |
| 2438 | 2466 | ||
| 2439 | if (i) | 2467 | if (i) |
| 2440 | set_intervals_multibyte_1 (i, multi_flag, BEG, BEG_BYTE, Z, Z_BYTE); | 2468 | set_intervals_multibyte_1 (i, multi_flag, BEG, BEG_BYTE, Z, Z_BYTE); |