lib_LTLIBRARIES = libACL.la
-libACL_la_SOURCES = string.cpp
+libACL_la_SOURCES = string.cpp regex.cpp
include_HEADERS = String.h
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libACL_la_LIBADD =
-am_libACL_la_OBJECTS = string.lo
+am_libACL_la_OBJECTS = string.lo regex.lo
libACL_la_OBJECTS = $(am_libACL_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
lib_LTLIBRARIES = libACL.la
-libACL_la_SOURCES = string.cpp
+libACL_la_SOURCES = string.cpp regex.cpp
include_HEADERS = String.h
all: all-am
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string.Plo@am__quote@
.cpp.o:
friend bool operator == (const String &s, const regex &r);
friend bool operator == (const regex &r, const String &s);
+ // TODO: The != operator
};
/*
* Other operators to think about...
*/
// TODO: boundary check.
+// TODO: Assignment to an individual character does not decouple references (BUG)
char& String::operator[](int i)
{
AM_CPPFLAGS = -I../src
LDADD = ../src/.libs/libACL.la
-check_PROGRAMS = string_assign string_basics string_compare string_cat
+check_PROGRAMS = string_assign string_basics string_compare string_cat string_substring string_regex
-string_assign_SOURCES = string_assign.cpp
-string_basics_SOURCES = string_basics.cpp
-string_compare_SOURCES = string_compare.cpp
-string_cat_SOURCES = string_cat.cpp
+string_assign_SOURCES = string_assign.cpp
+string_basics_SOURCES = string_basics.cpp
+string_compare_SOURCES = string_compare.cpp
+string_cat_SOURCES = string_cat.cpp
+string_substring_SOURCES = string_substring.cpp
+string_regex_SOURCES = string_regex.cpp
build_triplet = @build@
host_triplet = @host@
check_PROGRAMS = string_assign$(EXEEXT) string_basics$(EXEEXT) \
- string_compare$(EXEEXT) string_cat$(EXEEXT)
+ string_compare$(EXEEXT) string_cat$(EXEEXT) \
+ string_substring$(EXEEXT) string_regex$(EXEEXT)
subdir = test
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
string_compare_OBJECTS = $(am_string_compare_OBJECTS)
string_compare_LDADD = $(LDADD)
string_compare_DEPENDENCIES = ../src/.libs/libACL.la
+am_string_regex_OBJECTS = string_regex.$(OBJEXT)
+string_regex_OBJECTS = $(am_string_regex_OBJECTS)
+string_regex_LDADD = $(LDADD)
+string_regex_DEPENDENCIES = ../src/.libs/libACL.la
+am_string_substring_OBJECTS = string_substring.$(OBJEXT)
+string_substring_OBJECTS = $(am_string_substring_OBJECTS)
+string_substring_LDADD = $(LDADD)
+string_substring_DEPENDENCIES = ../src/.libs/libACL.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_CXXLD_0 = @echo " CXXLD " $@;
am__v_CXXLD_1 =
SOURCES = $(string_assign_SOURCES) $(string_basics_SOURCES) \
- $(string_cat_SOURCES) $(string_compare_SOURCES)
+ $(string_cat_SOURCES) $(string_compare_SOURCES) \
+ $(string_regex_SOURCES) $(string_substring_SOURCES)
DIST_SOURCES = $(string_assign_SOURCES) $(string_basics_SOURCES) \
- $(string_cat_SOURCES) $(string_compare_SOURCES)
+ $(string_cat_SOURCES) $(string_compare_SOURCES) \
+ $(string_regex_SOURCES) $(string_substring_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
string_basics_SOURCES = string_basics.cpp
string_compare_SOURCES = string_compare.cpp
string_cat_SOURCES = string_cat.cpp
+string_substring_SOURCES = string_substring.cpp
+string_regex_SOURCES = string_regex.cpp
all: all-am
.SUFFIXES:
@rm -f string_compare$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(string_compare_OBJECTS) $(string_compare_LDADD) $(LIBS)
+string_regex$(EXEEXT): $(string_regex_OBJECTS) $(string_regex_DEPENDENCIES) $(EXTRA_string_regex_DEPENDENCIES)
+ @rm -f string_regex$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(string_regex_OBJECTS) $(string_regex_LDADD) $(LIBS)
+
+string_substring$(EXEEXT): $(string_substring_OBJECTS) $(string_substring_DEPENDENCIES) $(EXTRA_string_substring_DEPENDENCIES)
+ @rm -f string_substring$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(string_substring_OBJECTS) $(string_substring_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_basics.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_cat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_compare.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_regex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_substring.Po@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+string_substring.log: string_substring$(EXEEXT)
+ @p='string_substring$(EXEEXT)'; \
+ b='string_substring'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+string_regex.log: string_regex$(EXEEXT)
+ @p='string_regex$(EXEEXT)'; \
+ b='string_regex'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
check_output.log: check_output
@p='check_output'; \
b='check_output'; \
std::cout << "The default contructor makes an empty string: \"" << s0 << "\"\n";
assert(~s0 == 0);
+ assert(s0 == "");
// A string from a signle character
String s1('p');
--- /dev/null
+/*******************************************************
+ * Unit test for the String class
+ *
+ * test regular expression operations
+ ******************************************************
+ *
+ */
+
+#include "String.h"
+#include <assert.h>
+
+int main()
+{
+ // TODO: test regex coinstructors
+
+ // A simple regular expression
+ regex nr("[0-9]+");
+
+ // Regular expression matching
+ String s1 = "abcdef";
+ String s2 = "abd123def";
+
+ std::cout << "Regular expression matching.\n";
+ assert((s1 == nr) == false);
+ assert((s2 == nr) == true);
+
+ // Select a substring with a regex
+
+ String match;
+
+ match = s2(nr);
+ std::cout << "The matching part of \"" << s2 << "\" is \"" << match << "\"\n";
+ assert(match == "123");
+
+ return 0;
+}
+
--- /dev/null
+Regular expression matching.
+The matching part of "abd123def" is "123"
+PASS string_regex (exit status: 0)
--- /dev/null
+/*******************************************************
+ * Unit test for the String class
+ *
+ * test substring operations
+ ******************************************************
+ *
+ */
+
+#include "String.h"
+#include <assert.h>
+
+int main()
+{
+ // Default contructor: empty string
+ String s0;
+
+ // Select a substring
+ String s1 = "abcdefghijkl";
+ String s2 = s1(3,5); // s2 = "defgh"
+
+ std::cout << "The substring (3,5) of " << s1 << " is " << s2 << "\n";
+ assert(s2 == "defgh");
+
+ String s3 = "abcdefghijkl";
+ String s4 = "12345678";
+
+ std::cout << "Replace substring (3,5) of " << s3 << " with " << s4 << " : ";
+ s3(3,5) = s4; // s3 = "abc12345678ijkl"
+ std::cout << s3 << "\n";
+ assert(s3 == "abc12345678ijkl");
+
+ String s5 = "abcdefghijkl";
+ String s6 = "12345678";
+
+ std::cout << "Insert \"" << s6 << "\" into \"" << s5 << "\" : ";
+ s5(3, 0) = s6;
+ std::cout << s5 << "\n";
+ assert(s5 == "abc12345678defghijkl");
+
+ std::cout << "Remove part of \"" << s5 << "\" : ";
+ s5(11,5) = "";
+ std::cout << s5 << "\n";
+ assert(s5 == "abc12345678ijkl");
+
+ return 0;
+}
+