Skip to content

Commit

Permalink
Fix std namespaces bug and some serialization bugs
Browse files Browse the repository at this point in the history
- Remove std from serialization header files
- Change containers (vectors, set, map, pair) layout
- Add virtual destructor to ITraversable and Iterator classes
- Use unique IDs to identify Container and UserObject globally

Signed-off-by: MHesham <mhesham.fcis@gmail.com>
  • Loading branch information
MHesham committed Feb 22, 2014
1 parent 9c0ec4d commit 8e32c4c
Show file tree
Hide file tree
Showing 10 changed files with 35 additions and 35 deletions.
4 changes: 3 additions & 1 deletion ObjectSerializer/Include/Container.h
Expand Up @@ -15,14 +15,16 @@ namespace Serialization
DefaultCtor = 0xfeedbeef,
};

Container() : m_cookie(DefaultCtor) {}
Container() : m_cookie(DefaultCtor), m_objID(++sm_lastSerializableObjID) {}

virtual int ContainerCount() = 0;
virtual void Clear() = 0;
virtual void AddTemp() = 0;
virtual char* GetTemp() = 0;

private:
Cookie m_cookie;
size_t m_objID;
};
}
#endif // CONTAINER_H
2 changes: 2 additions & 0 deletions ObjectSerializer/Include/ISerializable.h
Expand Up @@ -16,6 +16,8 @@ namespace Serialization
virtual ISerializable* Prototype() const = 0;
std::string CName() const { return typeid(*this).name(); }
};

extern size_t sm_lastSerializableObjID;
}

#define OBJECT_SERIALIZABLE(ClassName) \
Expand Down
4 changes: 2 additions & 2 deletions ObjectSerializer/Include/ITraversable.h
Expand Up @@ -9,14 +9,14 @@ namespace Serialization
virtual char* Current() = 0;
virtual bool MoveNext() = 0;
virtual void Reset() = 0;
~Iterator() {}
virtual ~Iterator() {}
};

class ITraversable
{
public:
virtual Iterator* GetIterator() = 0;
~ITraversable() {}
virtual ~ITraversable() {}
};
}

Expand Down
10 changes: 5 additions & 5 deletions ObjectSerializer/Include/SMap.h
Expand Up @@ -17,12 +17,12 @@ namespace Serialization
class MapIterator;

template<class TKey, class TValue>
class SMap : public std::map<TKey, TValue>, public Container
class SMap : public Container, public std::map<TKey, TValue>
{
SPair<TKey, TValue> m_temp;
public:
Iterator* GetIterator() { return new MapIterator<TKey, TValue>(this); }
string TypeName() const { return "SMap"; }
std::string TypeName() const { return "SMap"; }
int TypeSize() const { return sizeof(SMap<TKey, TValue>); }
ISerializable* Prototype() const { return new SMap<TKey, TValue>; }
int ContainerCount(){ return size(); }
Expand All @@ -35,12 +35,12 @@ namespace Serialization
class MapIterator : public Iterator
{
bool m_initialized;
map<TKey, TValue>* m_map;
typename map<TKey, TValue>::iterator m_current;
std::map<TKey, TValue>* m_map;
typename std::map<TKey, TValue>::iterator m_current;
SPair<TKey, TValue> m_pair;

public:
MapIterator(map<TKey, TValue>* p_map) : m_map(p_map), m_current(p_map->begin()), m_initialized(false) {}
MapIterator(std::map<TKey, TValue>* p_map) : m_map(p_map), m_current(p_map->begin()), m_initialized(false) {}

virtual char* Current()
{
Expand Down
2 changes: 1 addition & 1 deletion ObjectSerializer/Include/SPair.h
Expand Up @@ -10,7 +10,7 @@
namespace Serialization
{
template<class TKey, class TValue>
class SPair : public std::pair<TKey, TValue>, public UserObject
class SPair : public UserObject, public std::pair<TKey, TValue>
{
public:
SPair() : pair(TKey(), TValue()) {}
Expand Down
2 changes: 1 addition & 1 deletion ObjectSerializer/Include/SSet.h
Expand Up @@ -13,7 +13,7 @@ namespace Serialization
class SetIterator;

template<class TKey>
class SSet : public std::set<TKey>, public Container
class SSet : public Container, public std::set<TKey>
{
TKey m_temp;
public:
Expand Down
13 changes: 6 additions & 7 deletions ObjectSerializer/Include/SVector.h
Expand Up @@ -2,7 +2,6 @@
#define SVECTOR_H

#include <vector>
using namespace std;

#ifndef CONTAINER_H
#include "Container.h"
Expand All @@ -14,15 +13,15 @@ namespace Serialization
class VectorIterator;

template<class T>
class SVector : public vector<T>, public Container
class SVector : public Container, public std::vector<T>
{
T m_temp;
public:
SVector() {}
SVector(size_t p_initialSize, T p_initialValue) : vector(p_initialSize, p_initialValue) {}
SVector(const vector<T>& p_other) { this->clear(); insert(this->begin(), p_other.begin(), p_other.end()); }
SVector(const std::vector<T>& p_other) { this->clear(); insert(this->begin(), p_other.begin(), p_other.end()); }
Iterator* GetIterator() { return new VectorIterator<T>(this); }
string TypeName() const { return "SVector"; }
std::string TypeName() const { return "SVector"; }
int TypeSize() const { return sizeof(SVector<T>); }
ISerializable* Prototype() const { return new SVector<T>; }
int ContainerCount(){ return size(); }
Expand All @@ -35,11 +34,11 @@ namespace Serialization
class VectorIterator : public Iterator
{
bool m_initialized;
SVector<T>* m_vector;
typename vector<T>::iterator m_current;
std::vector<T>* m_vector;
typename std::vector<T>::iterator m_current;

public:
VectorIterator(SVector<T>* p_vector) : m_vector(p_vector), m_initialized(false) {}
VectorIterator(std::vector<T>* p_vector) : m_vector(p_vector), m_initialized(false) {}

char* Current()
{
Expand Down
25 changes: 10 additions & 15 deletions ObjectSerializer/Include/UserObject.h
Expand Up @@ -6,11 +6,8 @@
#include <stdarg.h>
#include <cassert>
#include <typeinfo>
using namespace std;

#ifndef SVECTOR_H
#include "SVector.h"
#endif
#include "SVector.h"
#ifndef SERIALIZABLE_H
#include "ISerializable.h"
#endif
Expand All @@ -24,27 +21,20 @@ namespace Serialization
Initialized = 0xfeedbeef,
Uninitialized = 0xdeadbeef
};


public:
UserObject() : m_objectState(Uninitialized) {}
UserObject() : m_objectState(Uninitialized), m_objID(++sm_lastSerializableObjID) {}
Iterator* GetIterator() { return new VectorIterator<char*>(&m_membersAddresses); }

void InitializeAddresses()
{
// catch any type-casting failure by assuring a predefinded values
_ASSERTE(Initialized == m_objectState || Uninitialized == m_objectState);
if(Uninitialized == m_objectState )
{
InitializeAddressesAux();
m_objectState = Initialized;
}
m_membersAddresses.clear();
InitializeAddressesAux();
m_objectState = Initialized;
}

private:
ObjectState m_objectState;
SVector<char*> m_membersAddresses;

protected:
void AddMemberAddress(unsigned nAddresses, ...)
{
Expand All @@ -63,6 +53,11 @@ namespace Serialization
}

virtual void InitializeAddressesAux() = 0;

private:
ObjectState m_objectState;
size_t m_objID;
std::vector<char*> m_membersAddresses;
};

#define OBJECT_MEMBERS(N, ...) \
Expand Down
6 changes: 3 additions & 3 deletions ObjectSerializer/ObjectSerializer.vcxproj.filters
Expand Up @@ -12,16 +12,16 @@
<Filter Include="Header Files\FileManager">
<UniqueIdentifier>{9a19e153-fde8-443f-8f95-f4b63d4ca833}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Container">
<UniqueIdentifier>{c9dc0b32-1dd0-4b52-8510-16eb6dc81306}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Type">
<UniqueIdentifier>{c848cf22-499c-49a6-bfa5-354dcc8d26f2}</UniqueIdentifier>
</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</Extensions>
</Filter>
<Filter Include="Header Files\Container">
<UniqueIdentifier>{c9dc0b32-1dd0-4b52-8510-16eb6dc81306}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Source\FileManager.cpp">
Expand Down
2 changes: 2 additions & 0 deletions ObjectSerializer/Source/ObjectSerializer.cpp
Expand Up @@ -13,6 +13,8 @@
#include <cassert>
#include <algorithm>

size_t Serialization::sm_lastSerializableObjID = 0;

//----------------------------------------------------------------------------------------------
ObjectSerializer::ObjectSerializer()
{
Expand Down

0 comments on commit 8e32c4c

Please sign in to comment.