|
What this is
Other links
The source code/* * PositionManager.java - Manages positions * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 2001, 2003 Slava Pestov * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.gjt.sp.jedit.buffer; //{{{ Imports import javax.swing.text.Position; import java.util.*; import org.gjt.sp.util.Log; //}}} /** * A class internal to jEdit's document model. You should not use it * directly. * * @author Slava Pestov * @version $Id: PositionManager.java,v 1.35 2003/11/18 20:51:57 spestov Exp $ * @since jEdit 4.2pre3 */ public class PositionManager { //{{{ createPosition() method public synchronized Position createPosition(int offset) { PosBottomHalf bh = new PosBottomHalf(offset); PosBottomHalf existing = (PosBottomHalf)positions.get(bh); if(existing == null) { positions.put(bh,bh); existing = bh; } return new PosTopHalf(existing); } //}}} //{{{ contentInserted() method public synchronized void contentInserted(int offset, int length) { if(positions.size() == 0) return; /* get all positions from offset to the end, inclusive */ Iterator iter = positions.tailMap(new PosBottomHalf(offset)) .keySet().iterator(); iteration = true; while(iter.hasNext()) { PosBottomHalf bh = (PosBottomHalf)iter.next(); bh.offset += length; } iteration = false; } //}}} //{{{ contentRemoved() method public synchronized void contentRemoved(int offset, int length) { if(positions.size() == 0) return; /* get all positions from offset to the end, inclusive */ Iterator iter = positions.tailMap(new PosBottomHalf(offset)) .keySet().iterator(); iteration = true; while(iter.hasNext()) { PosBottomHalf bh = (PosBottomHalf)iter.next(); if(bh.offset <= offset + length) bh.offset = offset; else bh.offset -= length; } iteration = false; } //}}} boolean iteration; //{{{ Private members private SortedMap positions = new TreeMap(); //}}} //{{{ Inner classes //{{{ PosTopHalf class class PosTopHalf implements Position { PosBottomHalf bh; //{{{ PosTopHalf constructor PosTopHalf(PosBottomHalf bh) { this.bh = bh; bh.ref(); } //}}} //{{{ getOffset() method public int getOffset() { return bh.offset; } //}}} //{{{ finalize() method protected void finalize() { synchronized(PositionManager.this) { bh.unref(); } } //}}} } //}}} //{{{ PosBottomHalf class class PosBottomHalf implements Comparable { int offset; int ref; //{{{ PosBottomHalf constructor PosBottomHalf(int offset) { this.offset = offset; } //}}} //{{{ ref() method void ref() { ref++; } //}}} //{{{ unref() method void unref() { if(--ref == 0) positions.remove(this); } //}}} //{{{ equals() method public boolean equals(Object o) { if(!(o instanceof PosBottomHalf)) return false; return ((PosBottomHalf)o).offset == offset; } //}}} //{{{ compareTo() method public int compareTo(Object o) { if(iteration) Log.log(Log.ERROR,this,"Consistency failure"); return offset - ((PosBottomHalf)o).offset; } //}}} } //}}} //}}} } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.