--- cxx/Makefile | 6 +++++- cxx/cxx_stdmap/Makefile | 41 +++++++++++++++++++++++++++++++++++++ cxx/cxx_stdmap/main.cc | 33 ++++++++++++++++++++++++++++++ cxx/cxx_stdmap/rtems_config.c | 47 +++++++++++++++++++++++++++++++++++++++++++ cxx/cxx_stdmap/wscript | 14 +++++++++++++ cxx/wscript | 1 + 6 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 cxx/cxx_stdmap/Makefile create mode 100644 cxx/cxx_stdmap/main.cc create mode 100644 cxx/cxx_stdmap/rtems_config.c create mode 100644 cxx/cxx_stdmap/wscript
diff --git a/cxx/Makefile b/cxx/Makefile index e5fa10b..d97f794 100644 --- a/cxx/Makefile +++ b/cxx/Makefile @@ -4,5 +4,9 @@ include $(RTEMS_SHARE)/make/directory.cfg # These tests require C++ ifneq ($(CXX_FOR_TARGET),) - SUBDIRS= cxx_throw libcpp + SUBDIRS = cxx_throw + SUBDIRS += cxx_stdmap + + # This is specific to application Makefile support + SUBDIRS += libcpp endif diff --git a/cxx/cxx_stdmap/Makefile b/cxx/cxx_stdmap/Makefile new file mode 100644 index 0000000..a2a43a1 --- /dev/null +++ b/cxx/cxx_stdmap/Makefile @@ -0,0 +1,41 @@ +# +# Makefile +# + +# +# RTEMS_MAKEFILE_PATH is typically set in an environment variable +# + +EXEC=cxx_stdmap.exe +PGM=${ARCH}/$(EXEC) + +# C source names +CSRCS = rtems_config.c +COBJS_ = $(CSRCS:.c=.o) +COBJS = $(COBJS_:%=${ARCH}/%) + +# C++ source names +CXXSRCS = main.cc +CXXOBJS_ = $(CXXSRCS:.cc=.o) +CXXOBJS = $(CXXOBJS_:%=${ARCH}/%) + +# AS source names +ASSRCS = +ASOBJS_ = $(ASSRCS:.s=.o) +ASOBJS = $(ASOBJS_:%=${ARCH}/%) + +# Libraries +LIBS = + +include $(RTEMS_MAKEFILE_PATH)/Makefile.inc + +include $(RTEMS_CUSTOM) +include $(PROJECT_ROOT)/make/leaf.cfg + +OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS) + +all: ${ARCH} $(PGM) + +$(PGM): $(OBJS) + $(make-cxx-exe) + diff --git a/cxx/cxx_stdmap/main.cc b/cxx/cxx_stdmap/main.cc new file mode 100644 index 0000000..f7cb30a --- /dev/null +++ b/cxx/cxx_stdmap/main.cc @@ -0,0 +1,33 @@ +#include <iostream> +#include <map> +#include <set> +#include <algorithm> +#include <functional> + +int main() { + + // Creating & Initializing a map of String & Ints + std::map<std::string, int> mapOfWordCount = { { "aaa", 10 }, { "ddd", 41 }, + { "bbb", 62 }, { "ccc", 13 } }; + + // Declaring the type of Predicate that accepts 2 pairs and return a bool + typedef std::function<bool(std::pair<std::string, int>, std::pair<std::string, int>)> Comparator; + + // Defining a lambda function to compare two pairs. It will compare two pairs using second field + Comparator compFunctor = + [](std::pair<std::string, int> elem1 ,std::pair<std::string, int> elem2) + { + return elem1.second < elem2.second; + }; + + // Declaring a set that will store the pairs using above comparision logic + std::set<std::pair<std::string, int>, Comparator> setOfWords( + mapOfWordCount.begin(), mapOfWordCount.end(), compFunctor); + + // Iterate over a set using range base for loop + // It will display the items in sorted order of values + for (std::pair<std::string, int> element : setOfWords) + std::cout << element.first << " :: " << element.second << std::endl; + + return 0; +} diff --git a/cxx/cxx_stdmap/rtems_config.c b/cxx/cxx_stdmap/rtems_config.c new file mode 100644 index 0000000..f813838 --- /dev/null +++ b/cxx/cxx_stdmap/rtems_config.c @@ -0,0 +1,47 @@ + +#include <stdlib.h> + +int main(int argc, char **argv); + +static char *argv_list[] = { + "cxx_stdmap", + "" +}; + + +static void *POSIX_Init(void *arg) +{ + (void) arg; /* deliberately ignored */ + + /* + * Initialize optional services + */ + + /* + * Could get arguments from command line or have a static set. + */ + (void) main(1, argv_list); + + exit(0); + + return NULL; +} + +#include <bsp.h> /* for device driver prototypes */ + +/* NOTICE: the clock driver is explicitly disabled */ +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_MICROSECONDS_PER_TICK 1000 + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_UNLIMITED_OBJECTS +#define CONFIGURE_UNIFIED_WORK_AREAS +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 32 + +#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (64 * 1024) + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> diff --git a/cxx/cxx_stdmap/wscript b/cxx/cxx_stdmap/wscript new file mode 100644 index 0000000..9e2e42d --- /dev/null +++ b/cxx/cxx_stdmap/wscript @@ -0,0 +1,14 @@ +# Copyright 2013 Gedare Bloom (ged...@rtems.org) +# +# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file. +# + +# Waf build script for std::map RTEMS example +import rtems_waf.rtems as rtems + +def build(bld): + rtems.build(bld) + + bld(features = 'cxx cxxprogram', + target = 'cxx_stdmap.exe', + source = ['main.cc', 'rtems_config.c']) diff --git a/cxx/wscript b/cxx/wscript index 874c130..14cc13d 100644 --- a/cxx/wscript +++ b/cxx/wscript @@ -10,4 +10,5 @@ def build(bld): if bld.env['CXX'] is not None: bld.recurse('libcpp') bld.recurse('cxx_throw') + bld.recurse('cxx_stdmap') -- 1.8.3.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel