Bueno, si usted sabe que en general la gente tendrán relativamente pocos puntos de inserción, que podría contener una matriz de punteros en su búfer de texto original y cuando el usuario intenta insertar en su interior, que "dividir" el buffer por el desove otra puntero al resto de la memoria intermedia, por lo que la longitud de la primera puntero de modo que se detenga en el punto de inserción y la adición de una tercera puntero para el texto que se inserta entre medio, un poco como:
long original text la la la
^ *^
| 2nd part
1st part
y la estrella de puntos en un nuevo búfer de texto donde comienza a agregar el texto que se va a insertar.
Cuando renderiza (o analiza en general) su archivo de texto, recorre la matriz de punteros y luego realiza su trabajo en cada búfer. Por supuesto, si el búfer es lo suficientemente pequeño, omita agregar una nueva parte del búfer, pero eso es solo heurística, pruebe cada uno y obtenga una idea de cuál funciona mejor.
También podría considerar dividir el archivo de texto en carga en varios búferes, digamos cada 1MB más o menos, porque si carga el archivo en un solo búfer necesitará crear un nuevo búfer para el texto insertado debido al tamaño. De nuevo, esta es una optimización heurística.
¿Un editor de texto para qué? Escritorio, web, .... consola? –
No estoy seguro acerca de la pregunta general, pero para la pregunta específica de inserción, muchos editores manejan el texto como cuerdas: http://en.wikipedia.org/wiki/Rope_%28computer_science%29 –
@Bart: un editor de texto sin formato simple, sin embargo, supongo que las reglas básicas de los editores de texto son buenas incluso para los procesadores de textos de texto enriquecido. Me estoy dirigiendo a un editor no basado en web, sin embargo, una vez más, creo que la misma teoría central es válida incluso para editores basados en web y para cualquier idioma (aunque yo lo codificaría en C++). – Wizard79