Commit a9506e39 by Szeberényi Imre

v0

parents
#
# Makefile pelda a string1 feladat (3. labor) megoldasanak forditasara
# gnumake valtozat
# Linuxokon es ural2-n is elerheto
#
PROG = string5_test # a program neve (ezt allitjuk elo)
PROG_O = string5.o rendez.o string5_test.o # program object fajljai
PROG_H = string5.h # program header fajljai
PROG_L = # program libjei
MTRACE_O = memtrace.o # memtrace object fajl
MTRACE_H = memtrace.h # memtrace es memcheck header fajlja
CXX = g++ # a C fordito neve
#CXX = clang++ # clang-ot (llvm) is erdemes kiprobalni
CXXFLAGS = -pedantic -Wall -Werror # kapcsolok: legyen bobeszedu es pedans
CXXFLAGS += -g -DMEMTRACE # es legyeb debug info is
LDFLAGS = -g # debug a linkelesnel
# osszes object, osszes header osszes lib
OBJS = $(PROG_O) $(MTRACE_O)
HEADS = $(PROG_H) $(MTRACE_H)
LIBS = $(PROG_L)
# alapertelmezett cel: program
.PHONY: all
all: $(PROG)
$(PROG): $(OBJS)
$(CXX) $(LDFLAGS) $(OBJS) -o $@ $(LIBS)
# feltetelezzuk, hogy az osszes obj fugg az osszes headertol
$(OBJS): $(HEADS)
# takaritas igeny szerint
.PHONY: clean
clean:
rm -f $(OBJS) $(PROG)
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
/*********************************
Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016.
inclue-ok: 2017., 2018. 2019.
singleton: 2019.
*********************************/
#ifndef MEMTRACE_H
#define MEMTRACE_H
#if defined(MEMTRACE)
/*ha definiálva van, akkor a hibakat ebbe a fajlba írja, egyébkent stderr-re*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
#define MEMTRACE_TO_MEMORY
/*ha definialva van, akkor futas kozben fajlba irja a foglalasokat*/
/*ekkor nincs ellenorzes, csak naplozas*/
/*#define MEMTRACE_TO_FILE*/
/*ha definialva van, akkor a megallaskor automatikus riport keszul */
#define MEMTRACE_AUTO
/*ha definialva van, akkor malloc()/calloc()/realloc()/free() kovetve lesz*/
#define MEMTRACE_C
#ifdef MEMTRACE_C
/*ha definialva van, akkor free(NULL) nem okoz hibat*/
#define ALLOW_FREE_NULL
#endif
#ifdef __cplusplus
/*ha definialva van, akkor new/delete/new[]/delete[] kovetve lesz*/
#define MEMTRACE_CPP
#endif
#if defined(__cplusplus) && defined(MEMTRACE_TO_MEMORY)
/*ha definialva van, akkor atexit helyett objektumot hasznal*/
/*ajanlott bekapcsolni*/
#define USE_ATEXIT_OBJECT
#endif
/******************************************/
/* INNEN NE MODOSITSD */
/******************************************/
#ifdef NO_MEMTRACE_TO_FILE
#undef MEMTRACE_TO_FILE
#endif
#ifdef NO_MEMTRACE_TO_MEMORY
#undef MEMTRACE_TO_MEMORY
#endif
#ifndef MEMTRACE_AUTO
#undef USE_ATEXIT_OBJECT
#endif
#ifdef __cplusplus
#define START_NAMESPACE namespace memtrace {
#define END_NAMESPACE } /*namespace*/
#define TRACEC(func) memtrace::func
#include <new>
#else
#define START_NAMESPACE
#define END_NAMESPACE
#define TRACEC(func) func
#endif
// THROW deklaráció változatai
#if defined(_MSC_VER)
// VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900
// * nem biztos, hogy jó így *
#define THROW_BADALLOC
#define THROW_NOTHING
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#else
#if __cplusplus < 201103L
// C++2003 vagy régebbi
#define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_NOTHING throw ()
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#endif
START_NAMESPACE
int allocated_blocks();
END_NAMESPACE
#if defined(MEMTRACE_TO_MEMORY)
START_NAMESPACE
int mem_check(void);
END_NAMESPACE
#endif
#if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT)
#include <cstdio>
START_NAMESPACE
class atexit_class {
private:
atexit_class() {
#if defined(CPORTA) && !defined(CPORTA_NOSETBUF)
setbuf(stdout, 0);
setbuf(stderr, 0);
#endif
}
public:
static atexit_class& get_atexit_obj() {
static atexit_class instance; // singleton példány
return instance;
}
int check() {
return mem_check();
}
~atexit_class() {
check();
}
};
/// A statikus referencia minden fordítási egységben keletkezik, de
/// mindegyik egyetlen példányra fog hivatkozni a singleton minta miatt
static atexit_class& atexit_obj = atexit_class::get_atexit_obj();
END_NAMESPACE
#endif/*MEMTRACE_TO_MEMORY && USE_ATEXIT_OBJECT*/
/*Innentol csak a "normal" include eseten kell, kulonben osszezavarja a mukodest*/
#ifndef FROM_MEMTRACE_CPP
#include <stdlib.h>
#ifdef __cplusplus
#include <iostream>
/* ide gyűjtjük a nemtrace-vel összeakadó headereket, hogy előbb legyenek */
#include <fstream> // VS 2013 headerjében van deleted definició
#include <sstream>
#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#endif
#ifdef MEMTRACE_CPP
namespace std {
typedef void (*new_handler)();
}
#endif
#ifdef MEMTRACE_C
START_NAMESPACE
#undef malloc
#define malloc(size) TRACEC(traced_malloc)(size,#size,__LINE__,__FILE__)
void * traced_malloc(size_t size, const char *size_txt, int line, const char * file);
#undef calloc
#define calloc(count,size) TRACEC(traced_calloc)(count, size, #count","#size,__LINE__,__FILE__)
void * traced_calloc(size_t count, size_t size, const char *size_txt, int line, const char * file);
#undef free
#define free(p) TRACEC(traced_free)(p, #p,__LINE__,__FILE__)
void traced_free(void * p, const char *size_txt, int line, const char * file);
#undef realloc
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
void * traced_realloc(void * old, size_t size, const char *size_txt, int line, const char * file);
void mem_dump(void const *mem, size_t size, FILE* fp);
END_NAMESPACE
#endif/*MEMTRACE_C*/
#ifdef MEMTRACE_CPP
START_NAMESPACE
#undef set_new_handler
#define set_new_handler(f) TRACEC(_set_new_handler)(f)
void _set_new_handler(std::new_handler h);
void set_delete_call(int line, const char * file);
END_NAMESPACE
void * operator new(size_t size, int line, const char * file) THROW_BADALLOC;
void * operator new[](size_t size, int line, const char * file) THROW_BADALLOC;
void * operator new(size_t size) THROW_BADALLOC;
void * operator new[](size_t size) THROW_BADALLOC;
void operator delete(void * p) THROW_NOTHING;
void operator delete[](void * p) THROW_NOTHING;
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void *p, int, const char *) THROW_NOTHING;
void operator delete[](void *p, int, const char *) THROW_NOTHING;
#define new new(__LINE__, __FILE__)
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
#ifdef CPORTA
#define system(...) // system(__VA_ARGS__)
#endif
#endif /*MEMTRACE_CPP*/
#endif /*FROM_MEMTRACE_CPP*/
#endif /*MEMCHECK*/
#endif /*MEMTRACE_H*/
/**
* \file rendez.cpp
*
* Egyszerű teszt modul az ékezetes karaktereket tartalmazó
* String osztály kipróbálására.
* Az összehasonlítás figyelembe veszi az LC_COLLATE beállítást
*
* A programból kiírt szövegkonstansok megjelenése azonban függ
* a forrásfájl karakterkódolásától.
* Ezt itt meglehetősen fapados módon feltételes include-dal próbáltuk
* megoldani.
* Igazi hordozható megoldást csak valamilyen lokalizációs technika
* használata ad (pl. gettext, wxString, stb.)
*
*/
#ifdef _MSC_VER
// MSC ne adjon figyelmeztető üzenetet a sztringkezelő függvényekre.
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <clocale>
#if defined(WIN32) || defined(_WIN32)
# include <windows.h>
# include "rendez.h" // latin-2 kódolású szövegek
#else
# include "rendez_u8.h" // UTF8 kódolású szövegek
#endif
#include "string5.h"
using std::cout;
using std::endl;
using std::cin;
#if ELKESZULT >= 11
/// Összehasonlító a qsorthoz
int cmp(const void* s1, const void* s2) {
return strcoll((*(const String**)s1)->c_str(), (*(const String**)s2)->c_str());
}
void rendez() {
cout << endl;
cout << String(INDUL) << endl;
const int N = 15;
String szavak[N]; /// Itt lesznek a szavak
String *poik[N]; /// Itt pedig a pointerek a rendezéshez
int db;
cout << String(IRJON) << N << String(SZOVEGET) << endl <<
String(UTOLSO) << endl;
cout << String(MINTA) << endl;
for (db = 0; db < N && cin >> szavak[db]; ++db)
poik[db] = &szavak[db]; /// címek tömbjét képezzük
/// Pointerek tömbjét rendezzük
qsort(poik, db, sizeof(String*), cmp);
cout << "----- Rendezve: ------" << endl;
for (int i = 0; i < db; ++i) {
poik[i]->printDbg(""); /// így a hossz is látszik UTF-8-nál nem egyezik meg a betűk számával
// cout << *poik[i] << endl;
}
}
#endif
#ifndef RENDEZ_H
#define RENDEZ_H
/*
* latin-2 kodolasu szovegek
*
* windows alatt ez kell
*/
#define INDUL "kezetes betk prbja:"
#define IRJON "rjon legfeljebb "
#define SZOVEGET " szbl ll szveget!"
#define UTOLSO "Az utols sor utn EOF (ctrl-Z/ctrl-D) legyen!"
#define MINTA " Pl: dm Bla Ern s Ott kgyt bvl"
void rendez();
#endif
/*
* utf-8 kodolasu szovegek
*
* Nem windows alatt feltehetoen ez kell
*/
#define INDUL "Ékezetes betűk próbája:"
#define IRJON "Írjon legfeljebb "
#define SZOVEGET " szóból álló szöveget!"
#define UTOLSO "Az utolsó sor után EOF (ctrl-Z/ctrl-D) legyen!"
#define MINTA " Pl: Ádám Béla Ernő és Ottó kígyót bűvöl"
void rendez();
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="string5" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/string2" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
<Add option="-DMEMTRACE" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/string2" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wextra" />
<Add option="-Wall" />
<Add option="-Werror" />
</Compiler>
<Unit filename="gtest_lite.h" />
<Unit filename="memtrace.cpp" />
<Unit filename="memtrace.h" />
<Unit filename="rendez.cpp" />
<Unit filename="rendez.h" />
<Unit filename="rendez_u8.h" />
<Unit filename="string5.cpp" />
<Unit filename="string5.h" />
<Unit filename="string5_test.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
<DoxyBlocks>
<comment_style block="0" line="0" />
<doxyfile_project />
<doxyfile_build />
<doxyfile_warnings />
<doxyfile_output />
<doxyfile_dot />
<general />
</DoxyBlocks>
</Extensions>
</Project>
</CodeBlocks_project_file>
/**
*
* \file string5.cpp
*
* Itt kell megvalósítania a hiányzó tagfüggvényeket.
* Segítségül megadtuk a C++ nem OO eszközeinek felhasználásával készített String-kezelő
* függvényke neveit.
*
* Ha valamit INLINE-ként valósít meg, akkor annak a string5.h-ba kell kerülnie,
* akár kívül akár osztályon belül definiálja. (Az inline függvényeknek minden
* fordítási egységben elérhetőknek kell lenniük)
* *
* A teszteléskor ne felejtse el beállítani a string5.h állományban az ELKESZULT makrót.
*
*/
#ifdef _MSC_VER
// MSC ne adjon figyelmeztető üzenetet a C sztringkezelő függvényeire
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <iostream> // Kiíratáshoz
#include <cstring> // Sztringműveletekhez
#include "memtrace.h" // a standard headerek után kell lennie
#include "string5.h"
/// Konstruktorok: egy char karakterből (createString)
/// egy nullával lezárt char sorozatból (createString)
/// Másoló konstruktor: String-ből készít (createString)
/// Destruktor (disposeString)
/// operator=
/// [] operátorok: egy megadott indexű elem REFERENCIÁJÁVAL térnek vissza (charAtString)
/// indexhiba esetén const char * kivételt dob!
/// + operátorok:
/// String-hez jobbról karaktert ad (addString)
/// String-hez String-et ad (addString)
/// << operator, ami kiír az ostream-re
/// >> operátor, ami beolvas az istream-ről egy szót
#ifndef STRING_H
#define STRING_H
/**
* \file string5.h
*
* Ez a fájl tartalmazza a
* - String osztály deklarációját
* - az inline függvényeket. Ha valamit inline-ként akar megvalósítani,
* akkor azt ebbe a fájlba írja! Tipikusan a rövid kódokat szokás
* inline-két megvalósítani (pl: c_str).
* Más függvényeket ill. definíciókat ne írjon a .h fájlba!
*
* A C nyelven megvalósított String adatszerkezetet (string1) a 2. laboron a
* C++ nyelv nem OO eszközeivel átalakítottuk (string2_cpp).
*
* Most továbblépünk és a String adatszerkezetet igazi osztállyá alakítjuk:
* Az adatokon műveletet végző függvényeket összezárjuk az adatokkal,
* így ezek a függvények tagfüggvényekké válnak és
* formálisan eltűnik az első paraméterük (s0) (ezt this-ként azért megkapják).
* A nevük is megváltozik, mert most már az összetartozást, és a
* paraméterek típusára való utalást már nem a név hordozza, hanem az osztály.
* A createString... alakú függvényekből konstruktorok keletkeznek.
* A disposeString destruktorrá alakul át.
* Egyes műveletvégző függvényekből pedig operátor függvény lesz.
*/
/**
* Az Ön feladata ebben fájlban bővíteni a megkezdett deklarációt, és string5.cpp
* fájlban pedig megvalósítani (definiálni) az osztály egyes függvényeit úgy,
* hogy az a lenti követelményeknek eleget tegyen.
*
* Ahogyan halad a megvalósítással egyre több tesztesetet kell lefuttatni,
* ezért az ELKESZULT makró értéket folyamatosan növelje a feladatsorszámoknak
* megfelelően!
*
* Tanulságos a megvalósítás előtt már a megnövelt értékkel is lefordítani
* a programot, és elemezni a kapott hibajelzést.
*
*/
/**
* Az ELKESZULT makró értékét a lenti feladatoknak megfelelően állítsa be,
* azaz, sorban haladva ahol tart a feladatok megoldásában!
* Ne hagyjon ki feladatot!
*/
#define ELKESZULT 0
/**
* \section fel Feladat:
* A 2. laborgyakorlaton létrehoztunk egy dinamikus sztring (String) adatszerkezet
* és a rajta műveleteket végző függvényeket
* A tanultakat felhasználva a string5.h és a string5.cpp állományokban definiáljon ill.
* implementáljon egy olyan sztring (String) osztályt C++ nyelven, ami dinamikusan tárol
* és rendelkezik az alábbi tulajdonságokkal:
*
*ELKESZULT értéke - feladatok:
* 1 A paraméter nélkül hívható konstruktora üres sztringet hozzon létre!
* Van olyan tagfüggvénye ( size() ), ami visszaadja a sztring hosszát.
* 2. Van olyan tagfüggvénye ( c_str() ), ami C-sztringgel, azaz nullával lezárt
* karaktersorozatra mutató pointerrel (const char *) tér vissza.
* 3. Van olyan konstruktora, ami karakterből hoz létre sztringet.
* 4. Van olyan konstruktora, ami C-sztringből (const char*) hoz létre sztringet.
* 5. Az osztályból létrehozott objektum legyen átadható értékparaméterként!
* 6. Támogassa a többszörös értékadást (b = a = a)!
* 7. Legyenek olyan operátorai (operator+), amivel a sztring végéhez sztringet
* és karaktert is lehet fűzni!
* 8. Lehessen karakterhez is sztringet fűzni a + operátorral!
* 9. A tárolt a karakterek legyenek elérhetőek a szokásos módon indexeléssel!
* Az indexeléssel elért elem legyen használható balértékként is!
* A konstans objektumok is legyenek indexelhetők.
* Az indexelési hiba esetén dobjon const char * kivételt!
* 10. Készítsen olyan << operátort, amivel egy sztring kiírható egy ostream típusú
* objektumra!
*
* Szorgalmi feladatok:
* 11. Készítsen olyan fűzhető >> operátort, amivel be tud olvasni egy szót egy sztring-be!
* A beolvasó működjön úgy, mint a scanf %s, azaz a szó végét white space határolja!
* A szó eleji white space karaktereket pedig el kell dobni.
* *Megj: az istream wshite space kezelése a flags() tagfüggvénnyel szabályozható.
* 12. Próbálja ki ékezetes szövegekkel is az elkészített String osztályt!
* Segítségül elkészítettünk egy egyszerű kódrészletet ami szavakat olvas be,
* majd qsort() függvénnyel rendezi azokat.
* Az ékezetes karakterek kódolásával kapcsolatban korábban már volt egy egyszerű
* szorgalmi feladat feladat. Most a rendezésen van a hangsúly.
* Értse meg a rendez.cpp fájlban levő kód működését és futtassa a programot!
* 13. A setlocale függvényhívás beállítja a karakterek és sztringek összehasonlításához
* szükséges nyelvi környezetet (LC_COLLATE) próbálja ki! Változott a rendezési
* sorrend?
*/
#include <iostream>
#ifndef MEMTRACE
#error "definialja projekt szinten a MEMTARCE makrot!"
#endif // MEMTRACE
/**
* A String osztály.
* A 'pData'-ban vannak a karakterek (a lezáró nullával együtt), 'len' a hossza.
* A hosszba nem számít bele a lezáró nulla.
*
* Korábban a len adattag unsigned int típusú volt. Most helyette a size_t típust használjuk.
* Ezzel a típussal tér vissza a sizeof operator is, később több helyen ezt használjuk
* mérettípusként.
*/
class String {
char *pData; ///< pointer az adatra
size_t len; ///< hossz lezáró nulla nélkül
public:
/// Kiírunk egy Stringet (debug célokra)
/// Ezt a tagfüggvényt elkészítettük, hogy használja a hibák felderítéséhez.
/// Igény szerint módosítható
/// @param txt - nullával lezárt szövegre mutató pointer.
/// Ezt a szöveget írjuk ki a debug információ előtt.
void printDbg(const char *txt = "") const {
std::cout << txt << "[" << len << "], "
<< (pData ? pData : "(NULL)") << '|' << std::endl;
}
/// Az első két feladatot előre megoldottuk, de lehet, hogy nem jól.
/// Az üres sztring reprezentációja nem szerencsés, mert így NULL pointerré
/// konvertál a c_str(), ami külön kezelést igényel a későbbiekben.
/// Ezt a teszt program sem fogadja el.
/// Gondolja végig, és változtassa meg!
/// Két lehetőség van:
/// a) nem NULL pointert tárol, hanem ténylegesen üres sztringet.
/// b) NULL-t tárol, de a c_str() üres sztringet ad vissza helyette
/// Bármelyik megoldás jó, mert ez az osztály belügye.
/// Paraméter nélküli konstruktor:
String() :pData(0), len(0) {}
/// Sztring hosszát adja vissza.
/// @return sztring tényleges hossza (lezáró nulla nélkül).
size_t size() const { return len; }
/// C-sztringet ad vissza
/// @return pointer a tárolt, vagy azzal azonos tartalmú nullával lezárt sztring-re.
const char* c_str() const { return pData;}
/// Itt folytassa a tagfüggvények deklarációit a feladatoknak megfelelően.
/// ...
}; /// Itt az osztály deklarációjának vége
/// Ide kerülnek a globális operátorok deklarációi.
/// ...
#endif
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{82AFFF26-CC4E-40EA-9A70-39F4765ABFC0}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>string5</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;MEMTRACE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="gtest_lite.h" />
<ClInclude Include="memtrace.h" />
<ClInclude Include="rendez.h" />
<ClInclude Include="rendez_u8.h" />
<ClInclude Include="string5.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="memtrace.cpp" />
<ClCompile Include="rendez.cpp" />
<ClCompile Include="string5.cpp" />
<ClCompile Include="string5_test.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="gtest_lite.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="memtrace.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="string2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="rendez.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="rendez_u8.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="memtrace.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="rendez.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="string2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="string2_test.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{82AFFF26-CC4E-40EA-9A70-39F4765ABFC0}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>string2</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;MEMTRACE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="gtest_lite.h" />
<ClInclude Include="memtrace.h" />
<ClInclude Include="rendez.h" />
<ClInclude Include="rendez_u8.h" />
<ClInclude Include="string2.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="memtrace.cpp" />
<ClCompile Include="rendez.cpp" />
<ClCompile Include="string2.cpp" />
<ClCompile Include="string2_test.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment