Class STRING
SmallEiffel -0.77
class interface STRING
--
-- Resizable character STRINGs.
--
creation
make (needed_capacity: INTEGER)
-- Initialize the string to have at least needed_capacity
-- characters of storage.
require
non_negative_size: needed_capacity >= 0
ensure
needed_capacity <= capacity;
empty_string: count = 0
copy (other: like Current)
-- Copy other onto Current.
require
other_not_void: other /= Void
ensure
count = other.count;
is_equal: is_equal(other)
blank (nr_blanks: INTEGER)
-- Initialize string with nr_blanks blanks.
require
nr_blanks >= 0
ensure
count = nr_blanks;
occurrences_of(' ') = count
from_external (p: POINTER)
-- Internal storage is set using p (may be dangerous because
-- the external C string p is not duplicated).
-- Assume p has a null character at the end in order to
-- compute the Eiffel count. This extra null character
-- is not part of the Eiffel STRING.
-- Also consider from_external_copy to choose the most appropriate.
require
p.is_not_null
ensure
capacity = count + 1;
p = to_external
from_external_copy (p: POINTER)
-- Internal storage is set using a copy of p.
-- Assume p has a null character at the end in order to
-- compute the Eiffel count. This extra null character
-- is not part of the Eiffel STRING.
-- Also consider from_external to choose the most appropriate.
make_from_string (s: STRING)
-- Initialize from the characters of s.
-- (Useful in proper descendants of class STRING, to
-- initialize a string-like object from a manifest string.)
require
s /= Void
ensure
count = s.count
feature(s) from HASHABLE
hash_code: INTEGER
-- The hash-code value of Current.
ensure
good_hash_value: Result >= 0
feature(s) from COMPARABLE
infix "<" (other: like Current): BOOLEAN
-- Is Current less than other ?
require
other_exists: other /= Void
ensure
asymmetric: Result implies not (other < Current)
infix "<=" (other: like Current): BOOLEAN
-- Is Current less than or equal other?
require
other_exists: other /= Void
ensure
definition: Result = (Current < other or is_equal(other))
infix ">" (other: like Current): BOOLEAN
-- Is Current strictly greater than other?
require
other_exists: other /= Void
ensure
definition: Result = (other < Current)
infix ">=" (other: like Current): BOOLEAN
-- Is Current greater than or equal than other?
require
other_exists: other /= Void
ensure
definition: Result = (other <= Current)
in_range (lower, upper: like Current): BOOLEAN
-- Return true if Current is in range [lower..upper]
ensure
Result = (Current >= lower and Current <= upper)
compare (other: like Current): INTEGER
-- If current object equal to other, 0;
-- if smaller, -1; if greater, 1.
require
other_exists: other /= Void
ensure
equal_zero: Result = 0 = is_equal(other);
smaller_negative: Result = - 1 = Current < other;
greater_positive: Result = 1 = Current > other
three_way_comparison (other: like Current): INTEGER
-- If current object equal to other, 0;
-- if smaller, -1; if greater, 1.
require
other_exists: other /= Void
ensure
equal_zero: Result = 0 = is_equal(other);
smaller_negative: Result = - 1 = Current < other;
greater_positive: Result = 1 = Current > other
min (other: like Current): like Current
-- Minimum of Current and other.
require
other /= Void
ensure
Result <= Current and then Result <= other;
compare(Result) = 0 or else other.compare(Result) = 0
max (other: like Current): like Current
-- Maximum of Current and other.
require
other /= Void
ensure
Result >= Current and then Result >= other;
compare(Result) = 0 or else other.compare(Result) = 0
feature(s) from STRING
count: INTEGER
-- String length.
capacity: INTEGER
-- Capacity of the storage.
feature(s) from STRING
-- Creation / Modification :
make (needed_capacity: INTEGER)
-- Initialize the string to have at least needed_capacity
-- characters of storage.
require
non_negative_size: needed_capacity >= 0
ensure
needed_capacity <= capacity;
empty_string: count = 0
blank (nr_blanks: INTEGER)
-- Initialize string with nr_blanks blanks.
require
nr_blanks >= 0
ensure
count = nr_blanks;
occurrences_of(' ') = count
feature(s) from STRING
-- Testing :
empty: BOOLEAN
-- Has string length 0?
item (index: INTEGER): CHARACTER
-- Character at position index.
require
valid_index(index)
infix "@" (index: INTEGER): CHARACTER
-- Character at position index.
require
valid_index(index)
valid_index (index: INTEGER): BOOLEAN
-- True when index is valid (i.e., inside actual bounds).
ensure
Result = (1 <= index and then index <= count)
same_as (other: STRING): BOOLEAN
-- Case insensitive is_equal.
require
other /= Void
is_equal (other: like Current): BOOLEAN
-- Has Current the same text as other ?
require
other_not_void: other /= Void
ensure
consistent: standard_is_equal(other) implies Result;
symmetric: Result implies other.is_equal(Current)
index_of (ch: CHARACTER): INTEGER
-- Gives the index of the first occurrence ch or
-- count + 1 if none.
ensure
Result /= count + 1 implies item(Result) = ch
index_of_string (other: STRING): INTEGER
-- Position of the first occurrence of other
-- or count + 1 if none.
require
not other.empty
has (ch: CHARACTER): BOOLEAN
-- True if ch is in the STRING.
has_string (other: STRING): BOOLEAN
-- True if other is in the STRING.
occurrences_of (c: CHARACTER): INTEGER
-- Number of times character c appears in the string.
ensure
Result >= 0
occurrences (c: CHARACTER): INTEGER
-- Number of times character c appears in the string.
ensure
Result >= 0
has_suffix (s: STRING): BOOLEAN
-- True if suffix of Current is s.
require
s /= Void
has_prefix (p: STRING): BOOLEAN
-- True if prefix of Current is p.
require
p /= Void
replace_all (old_character, new_character: like item)
-- Replace all occurrences of the element old_character by
-- new_character.
ensure
count = old count;
occurrences_of(old_character) = 0
is_integer: BOOLEAN
-- Can contents be read as an INTEGER ?
is_real: BOOLEAN
-- Contents can be read as a REAL.
is_double: BOOLEAN
-- Contents can be read as a DOUBLE.
is_bit: BOOLEAN
-- True when the contents is a sequence of bits (i.e., mixed
-- characters 0 and characters 1).
ensure
Result = (count = occurrences_of('0') + occurrences_of('1'))
feature(s) from STRING
-- Modification :
clear
-- Clear out the current STRING.
-- Note : internal storage memory is neither released nor shrunk.
ensure
count = 0
feature(s) from STRING
-- Modification :
wipe_out
-- Clear out the current STRING.
-- Note : internal storage memory is neither released nor shrunk.
ensure
count = 0
copy (other: like Current)
-- Copy other onto Current.
require
other_not_void: other /= Void
ensure
count = other.count;
is_equal: is_equal(other)
fill (c: CHARACTER)
-- Replace every character with c.
ensure
occurrences_of(c) = count
fill_with (c: CHARACTER)
-- Replace every character with c.
ensure
occurrences_of(c) = count
fill_blank
-- Fill entire string with blanks
ensure
occurrences_of(' ') = count
append (other: STRING)
-- Append other to Current.
require
other /= Void
append_string (other: STRING)
-- Append other to Current.
require
other /= Void
prepend (other: STRING)
-- Prepend other to Current
require
other /= Void
ensure
count = other.count + old count
infix "+" (other: STRING): STRING
-- Create a new STRING which is the concatenation of
-- Current and other.
require
other /= Void
ensure
Result.count = count + other.count
put (ch: CHARACTER; index: INTEGER)
-- Put ch at position index.
require
valid_index(index)
ensure
item(index) = ch
swap (i1, i2: INTEGER)
require
valid_index(i1);
valid_index(i2)
ensure
item(i1) = old item(i2);
item(i2) = old item(i1)
insert (ch: CHARACTER; index: INTEGER)
-- Insert ch after position index.
require
0 <= index and index <= count
ensure
item(index + 1) = ch
shrink (low, up: INTEGER)
-- Keep only the slice low .. up or nothing
-- when the slice is empty.
require
1 <= low;
low <= count;
1 <= up;
up <= count
ensure
up > low implies count = up - low + 1
remove (index: INTEGER)
-- Remove character at position index.
require
valid_index(index)
ensure
count = old count - 1
add_first (ch: CHARACTER)
-- Add ch at first position.
ensure
count = 1 + old count;
item(1) = ch
add_last (ch: CHARACTER)
-- Append ch to string
ensure
count = 1 + old count;
item(count) = ch
extend (ch: CHARACTER)
-- Append ch to string
ensure
count = 1 + old count;
item(count) = ch
append_character (ch: CHARACTER)
-- Append ch to string
ensure
count = 1 + old count;
item(count) = ch
precede (ch: CHARACTER)
-- Prepend ch to string
ensure
item(1) = ch
to_lower
-- Convert all characters to lower case.
to_upper
-- Convert all characters to upper case.
remove_first (nb: INTEGER)
-- Remove nb first characters.
require
nb >= 0;
count >= nb
ensure
count = old count - nb
remove_last (nb: INTEGER)
-- Remove nb last characters.
require
0 <= nb;
nb <= count
ensure
count = old count - nb
remove_between (low, up: INTEGER)
-- Remove character between positions low and up.
require
valid_index(low);
valid_index(up);
low <= up
ensure
count = old count - up - low + 1
remove_suffix (s: STRING)
-- Remove the suffix s of current string.
require
has_suffix(s)
ensure
old count = count + s.count
remove_prefix (s: STRING)
-- Remove the prefix s of current string.
require
has_prefix(s)
ensure
old count = count + s.count
left_adjust
-- Remove leading blanks.
ensure
stripped: empty or else item(1) /= ' '
right_adjust
-- Remove trailing blanks.
ensure
stripped: empty or else item(count) /= ' '
feature(s) from STRING
-- Features which don't modify the string
first: CHARACTER
require
not empty
last: CHARACTER
require
not empty
feature(s) from STRING
-- Conversion :
to_integer: INTEGER
-- Current must looks like an INTEGER.
require
is_integer
to_real: REAL
-- Conversion to the corresponding REAL value.
-- The string must looks like a REAL (or like an
-- INTEGER because fractionnal part is optional).
require
is_integer or is_real
to_double: DOUBLE
-- Conversion to the corresponding DOUBLE value.
-- The string must looks like a DOUBLE, like
-- a REAL (or like an INTEGER because fractionnal
-- part is optional).
require
is_integer or is_real
binary_to_integer: INTEGER
-- Assume there is enougth space in the INTEGER to store
-- the corresponding decimal value.
require
is_bit;
count <= Integer_bits
to_hexadecimal
-- Convert Current bit sequence into the corresponding
-- hexadecimal notation.
require
is_bit
feature(s) from STRING
-- Printing :
out_in_tagged_out_memory
-- Append terse printable represention of current object
-- in tagged_out_memory.
fill_tagged_out_memory
-- Append a viewable information in tagged_out_memory in
-- order to affect the behavior of out, tagged_out, etc.
feature(s) from STRING
-- Other features :
substring (low, up: INTEGER): like Current
-- Create a new string initialized with range low.. up.
require
1 <= low;
low <= up;
up <= count
extend_multiple (c: CHARACTER; n: INTEGER)
-- Extend Current with n times character c.
require
n >= 0
ensure
count = n + old count
precede_multiple (c: CHARACTER; n: INTEGER)
-- Prepend n times character c to Current.
require
n >= 0
ensure
count = n + old count
extend_to_count (c: CHARACTER; needed_count: INTEGER)
-- Extend Current with c until needed_count is reached.
-- Do nothing if needed_count is already greater or equal
-- to count.
require
needed_count >= 0
ensure
count >= needed_count
precede_to_count (c: CHARACTER; needed_count: INTEGER)
-- Prepend c to Current until needed_count is reached.
-- Do nothing if needed_count is already greater or equal
-- to count.
require
needed_count >= 0
ensure
count >= needed_count
reverse
-- Reverse the string.
remove_all_occurrences (ch: CHARACTER)
-- Remove all occurrences of ch.
ensure
count = old count - old occurrences_of(ch)
substring_index (other: STRING; start: INTEGER): INTEGER
-- Position of first occurrence of other at or after
-- start;
-- 0 if none.
require
start_large_enough: start >= 1;
start_small_enough: start <= count;
string_exist: other /= Void
feature(s) from STRING
-- Splitting a STRING :
split: ARRAY[STRING]
-- Split the string into an array of words.
-- Uses is_separator of CHARACTER to find words.
-- Gives Void or a non empty array.
ensure
Result /= Void implies not Result.empty
split_in (words: COLLECTION[STRING])
-- Same jobs as split but result is appended in words.
require
words /= Void
ensure
words.count >= old words.count
feature(s) from STRING
-- Other feature :
set_last (ch: CHARACTER)
ensure
last = ch
feature(s) from STRING
-- Interfacing with C string :
to_external: POINTER
-- Gives C access to the internal storage (may be dangerous).
-- To be compatible with C, a null character is added at the end
-- of the internal storage. This extra null character is not
-- part of the Eiffel STRING.
ensure
count = old count;
Result.is_not_null
from_external (p: POINTER)
-- Internal storage is set using p (may be dangerous because
-- the external C string p is not duplicated).
-- Assume p has a null character at the end in order to
-- compute the Eiffel count. This extra null character
-- is not part of the Eiffel STRING.
-- Also consider from_external_copy to choose the most appropriate.
require
p.is_not_null
ensure
capacity = count + 1;
p = to_external
from_external_copy (p: POINTER)
-- Internal storage is set using a copy of p.
-- Assume p has a null character at the end in order to
-- compute the Eiffel count. This extra null character
-- is not part of the Eiffel STRING.
-- Also consider from_external to choose the most appropriate.
feature(s) from STRING
-- Other feature here for ELKS'95 compatibility :
make_from_string (s: STRING)
-- Initialize from the characters of s.
-- (Useful in proper descendants of class STRING, to
-- initialize a string-like object from a manifest string.)
require
s /= Void
ensure
count = s.count
head (n: INTEGER)
-- Remove all characters except fo the first n.
-- Do nothing if n >= count.
require
n >= 0
ensure
count = n.min(old count)
tail (n: INTEGER)
-- Remove all characters except for the last n.
-- Do nothing if n >= count.
require
n >= 0
ensure
count = n.min(old count)
invariant
0 <= count;
count <= capacity;
capacity > 0 implies storage.is_not_null;
end of STRING