161 Commits

Author SHA1 Message Date
Colin Snover
f1d9955540 COMMON: Fix calling Span::getStringAt with non-zero index 2017-02-08 12:05:14 -06:00
Bastien Bouclet
ce343f7168 TESTS: Fix building Common::Span test on big endian systems 2017-01-14 10:36:04 +01:00
Colin Snover
3cfc396ecd COMMON: Simplify Span code
Implicitly generated constructors can be used instead of explicit
constructors, which reduces the amount of necessary boilerplate.

Long lists of identical typedefs to the superclass are now defined
using a macro.

data() const now returns a pointer to data that matches the
value_type of the data, instead of forcing the data to be const.
This better matches the intent of the Span class, which provides
a view into data, rather than being a container that holds data.
2017-01-08 14:08:16 -06:00
Colin Snover
9c60bcf069 COMMON: Add more lcov-guided Span tests 2017-01-08 13:21:10 -06:00
Colin Snover
2558b20cdd COMMON: Improve test coverage for Span and fix bugs from testing 2017-01-08 13:20:23 -06:00
Colin Snover
640f6039ca COMMON: Add Span to common library
Span is roughly modelled on the GSL span<T> type, and is intended
to replace direct access to raw pointers -- especially pointers
that are passed to functions along with a separate size
parameter. It provides low-cost bounds-checked reads and writes,
as well as convenience functions for reading common values
(integers of varying endianness, strings, etc.). While similar to
MemoryReadStream in purpose, Span is superior in cases where
memory is writable, where memory is accessed randomly rather than
sequentially, or where any invalid access should be treated as an
unrecoverable error. It should also be more efficient than a
MemoryReadStream because it is implemented using CRTP, so there is
no runtime overhead from dynamic dispatch.

NamedSpan is an extension of Span which provides enhanced
debugging information when out-of-bounds memory accesses occur.
It allows programmers to name the memory span at construction time,
and it also tracks the offsets of subspans so that the absolute
byte offset of the original memory can be provided in the error
message if an out-of-bounds access occurs.

SpanOwner is similar to ScopedPtr but has awareness of the design
of Span objects, so allows the memory pointed to by the Span object
inside the SpanOwner to be freed when the SpanOwner is freed
without requiring holding a separate pointer to the start of
memory. It also provides some copy semantics, so unlike a ScopedPtr,
SpanOwners can be held by objects in movable containers like
Common::Array -- but note that because there are no move semantics
in C++98, this means that a new, complete memory copy of the
pointed-to data will be created, rather than just a new Span
pointing to the same block of memory, when a container holding a
SpanOwner expands.
2017-01-08 13:20:23 -06:00
Willem Jan Palenstijn
c919c9996c TESTS: Fix warnings 2017-01-05 22:07:24 +01:00
Colin Snover
9d3893459f COMMON: Add strnlen for safer C string length reads
This API is intended for use in cases where C strings come
from untrusted sources like game files, where malformed data
missing the null terminator would cause strlen to read out of
bounds.
2017-01-05 22:07:24 +01:00
Eugene Sandulenko
355c4fa646 JANITORIAL: Remove more trailing spaces 2016-10-09 15:02:02 +02:00
Eugene Sandulenko
78e240c23b TESTS: Fix warning 2016-09-05 08:24:37 +02:00
Eugene Sandulenko
e0d445bb74 TESTS: Fix SortedArray test 2016-06-04 13:49:55 +02:00
Eugene Sandulenko
5a8eb1c9d6 TESTS: Implement SortedArray test 2016-05-23 16:36:34 +02:00
Borja Lorente Escobar
a19b50ddf2 COMMON: Add replace functions to Common and String.
COMMON: Add replacement to common/algorithm.h

COMMON: Intermediate commit to show doubts.

 COMMON: Basic String::replace() methods implemented.

COMMON: Fix typo in the algorithm.h documentation.

COMMON: Fix documentation of String::replace()

COMMON: Fix formatting issues in method signatures.

COMMON: Add assert and reformat loops in str and algorithm.

COMMON: Fix typo in comment.

COMMON: Fix style in string test cases.

COMMON: Add Doxygen documentation to algorithm and String.

COMMON: Add Doxygen documentation to algorithm and String.

COMMON: Add Doxygen documentation to algorithm.

COMMON: Fix style in algorithm comments.

COMMON: Add Doxygen comments to String.

COMMON: Add Doxygen comments to algorithm test function.

COMMON: Add String support for substring replace.

COMMON: Fix string replace to comply with STL

COMMON: Fix documentation on string replace

COMMON: Fix style in string replace

COMMON: Fix unwanted reference problem in String::replace().

COMMON: Fix indentation in comments for replace

COMMON: Fix indentation in replace

COMMON: Fix comments in String::replace to match implementation.

COMMON: Remove assert to allow for not-null-terminated character arrays

COMMON: Add new test for String::replace

COMMON: Fix broken comments on String::replace

COMMON: Fix sharing bug on ensureCapacity

COMMON: Remove superfluous call to makeUnique()
2016-05-16 22:01:21 +02:00
Colin Snover
4ba0ff8deb COMMON: Add convenience method to Common::Rational for 1:1 ratios
For SCI engine games, ratios may not be normalised and so to avoid
extra scaling, there needs to be a way to simply check whether a
ratio is 1:1.
2016-02-18 13:18:02 -06:00
Colin Snover
7d54f0aaaf COMMON: Add methods for inserting and erasing with iterators
This provides improved feature parity to Common::List and is used
in SCI32 engine.
2016-02-18 13:18:01 -06:00
Johannes Schickel
06641f29a7 COMMON: Allow '#' to only match digits in matchString. 2016-01-26 16:35:30 +01:00
Bertrand Augereau
5ad9cd1a1a COMMON: More sort unit tests 2015-11-10 20:30:51 +01:00
Johannes Schickel
ba228f2bea TEST: Fix another typo in uint64 endian tests. 2015-01-04 21:22:43 +01:00
Johannes Schickel
daa8fca001 TEST: Fix uint64 endian related test code.
This does not fix the actual implementation issues which are present right
now!
2015-01-04 21:09:32 +01:00
Johannes Schickel
f1e58efe90 TEST: Fix C++11 compat warnings. 2015-01-04 21:09:32 +01:00
Adrian Astley
93167fabb5 TEST: Create test cases for reading uint64 from a stream 2014-12-21 04:12:43 -06:00
Adrian Astley
a4685796ce TEST: Add unit tests for uint64 reading 2014-12-19 11:53:32 -06:00
Johannes Schickel
bb70ea04e9 TEST: Remove odd test in rendermode tests.
This specific test checked whether the pointer for two static strings have a
different address. Since the specific strings checked had the same "value"
string pooling optimizations will result in them to have the same address and
thus make this test fail. Furthermore, the test seemed completely pointless,
I simply dropped it now.
2014-08-07 15:04:13 +02:00
Max Horn
4d02f67bd1 ALL: Resolve multiple clang warnings 2014-03-30 14:38:02 +02:00
Tobia Tesan
d2c85e19eb TEST: Whitespaces in test/common/ 2013-07-10 13:22:57 +02:00
Tobia Tesan
e9406fad24 TEST: removed fixed hashes in test/common/hash-str.h
The hash function does not necessarily have to conform to one specific algorithm as long as equals/differs is respected.
2013-07-10 13:22:01 +02:00
Tobia Tesan
6245a68632 TEST: Thorough testing for common/hash-str.h
We test the various equal_to and hash functions therein.
2013-07-10 13:21:24 +02:00
Tobia Tesan
2e4933dcd5 TEST: reorganize test/common/util.h
Split a few test cases in two.
The resulting file is now better organized.
2013-07-10 13:17:59 +02:00
Tobia Tesan
377789db77 TEST: tests for common/rendermode.h
tests for parseRenderMode, renderMode2GUIO and getRenderModeCode.
2013-07-10 13:17:52 +02:00
Tobia Tesan
4a18eab8a5 TEST: test cases for common/util.cpp 2013-07-10 13:17:47 +02:00
Tobia Tesan
4f7d92acb4 TEST: tests for common/huffman.h
A few tests for the Huffman decoder.

The encoding is the example from Wikipedia.
This could be improved by someone more knowledgeable by
generating one at runtime or using multiple encodings
which would each contain one edge case.
2013-07-10 13:17:41 +02:00
richiesams
e1ff60da7a COMMON: Add erase method to String class 2013-06-20 15:40:25 -05:00
Willem Jan Palenstijn
da8eeb9dbe TESTS: Add failing test for repeated seeks in BufferedSeekableReadStream 2013-01-26 19:25:41 +01:00
Bastien Bouclet
c5f368d115 TEST: Add missing include 2012-12-16 10:45:31 +01:00
Bastien Bouclet
0f432b9003 TEST: Add some tests for Common::BitStreamImpl 2012-12-16 10:29:58 +01:00
Johannes Schickel
6b6b7532ae TEST: Add two (simple) tests for MemoryWriteStream. 2012-10-09 23:06:35 +02:00
Johannes Schickel
a5f4ff36ff TEST: Add a test case for SafeSeekableSubReadStream::eos handling. 2012-03-11 01:23:57 +01:00
Johannes Schickel
22c5dadb41 TEST: Add a test case for MemoryReadStream::eos handling. 2012-03-11 01:22:39 +01:00
Johannes Schickel
da96f80016 TEST: Silence some signed/unsigned comparison warnings. 2012-02-22 20:25:26 +01:00
Tarek Soliman
a4798602d7 JANITORIAL: Fix missing whitespace in pointer cast
find -name '*.h' -or -name '*.cpp' | xargs sed -r -i 's@\(([A-Za-z0-9]+)\*\)@(\1 *)@g'

This seems to have caught some params as well which is not undesirable IMO.
It also caught some strings containing this which is undesirable so I
excluded them manually. (engines/sci/engine/kernel_tables.h)
2012-02-15 10:07:10 -06:00
Johannes Schickel
a877ae2704 TEST: Extend Common::Array copy-constructor test a bit. 2011-10-09 03:30:32 +02:00
Johannes Schickel
1e0b05ff99 TEST: Add a very tiny and simple unit test for intLog2. 2011-08-19 01:14:09 +02:00
Christoph Mallon
ab80b20a30 COMMON: Replace x + ARRAYSIZE(x) by the simpler ARRAYEND(x). 2011-08-07 15:19:08 +02:00
Christoph Mallon
23a0f5318c JANITORIAL: Remove trailing empty lines. 2011-08-07 13:53:33 +02:00
Max Horn
0a0258edcf COMMON: Let Common::normalizePath normalize '..' in paths
There are some unit tests to verify that this works correctly.
There is a small chance that this causes regressions in weird setups.
2011-06-03 17:33:07 +02:00
Max Horn
8e3aafd30d COMMON: Provide our own implementations for scumm_str(n)icmp
This takes up a tiny little bit of extra binary size, but gets
rid of some awful #ifdef hackery.
2011-05-23 19:12:25 +02:00
Max Horn
88319a727a COMMON: Fix inserting an array into itself under certain conditions 2011-05-16 15:23:17 +02:00
Max Horn
65fc72e30a COMMON: Add some testcases for common/endian.h 2011-04-12 17:23:32 +02:00
Max Horn
97bfd60e61 COMMON: Reduce overflow risk in Common::Rational += and -= operators
svn-id: r55839
2011-02-09 00:12:02 +00:00
Johannes Schickel
867c0d9645 COMMON: Add an erase method which takes an iterator to HashMap.
Currently there is no iterator returned from this method, to have some
similarity to associative containers of the STL.

I also "added" one unit test for this method, which is basically just
a copy of the HashMap::erase(const Key &) test with the required adaptions.

svn-id: r55661
2011-01-30 17:28:35 +00:00