Packet.cpp

00001 
00002 //
00003 // SFML - Simple and Fast Multimedia Library
00004 // Copyright (C) 2007 Laurent Gomila (laurent.gom@gmail.com)
00005 //
00006 // This software is provided 'as-is', without any express or implied warranty.
00007 // In no event will the authors be held liable for any damages arising from the use of this software.
00008 //
00009 // Permission is granted to anyone to use this software for any purpose,
00010 // including commercial applications, and to alter it and redistribute it freely,
00011 // subject to the following restrictions:
00012 //
00013 // 1. The origin of this software must not be misrepresented;
00014 //    you must not claim that you wrote the original software.
00015 //    If you use this software in a product, an acknowledgment
00016 //    in the product documentation would be appreciated but is not required.
00017 //
00018 // 2. Altered source versions must be plainly marked as such,
00019 //    and must not be misrepresented as being the original software.
00020 //
00021 // 3. This notice may not be removed or altered from any source distribution.
00022 //
00024 
00026 // Headers
00028 #include <SFML/Network/Packet.h>
00029 #include <SFML/Network/Packet.hpp>
00030 #include <SFML/Internal.h>
00031 
00032 
00033 struct sfPacket
00034 {
00035     sf::Packet This;
00036 };
00037 
00038 
00039 namespace
00040 {
00044     template <typename T>
00045     T PacketRead(sfPacket* Packet, T Default = 0)
00046     {
00047         CSFML_CHECK_RETURN(Packet, Default);
00048 
00049         T Value;
00050         Packet->This >> Value;
00051         return Value;
00052     }
00053 
00057     template <typename T>
00058     void PacketWrite(sfPacket* Packet, T Value)
00059     {
00060         CSFML_CHECK(Packet);
00061 
00062         Packet->This << Value;
00063     }
00064 }
00065 
00066 
00070 sfPacket* sfPacket_Create()
00071 {
00072     return new sfPacket;
00073 }
00074 
00075 
00079 void sfPacket_Destroy(sfPacket* Packet)
00080 {
00081     delete Packet;
00082 }
00083 
00084 
00088 void sfPacket_Append(sfPacket* Packet, void* Data, size_t SizeInBytes)
00089 {
00090     CSFML_CALL(Packet, Append(Data, SizeInBytes));
00091 }
00092 
00093 
00097 void sfPacket_Clear(sfPacket* Packet)
00098 {
00099     CSFML_CALL(Packet, Clear());
00100 }
00101 
00102 
00108 const char* sfPacket_GetData(sfPacket* Packet)
00109 {
00110     CSFML_CALL_RETURN(Packet, GetData(), NULL);
00111 }
00112 
00113 
00117 sfUint32 sfPacket_GetDataSize(sfPacket* Packet)
00118 {
00119     CSFML_CALL_RETURN(Packet, GetDataSize(), 0);
00120 }
00121 
00122 
00126 sfBool sfPacket_CanRead(sfPacket* Packet)
00127 {
00128     CSFML_CALL_RETURN(Packet, operator bool(), sfFalse);
00129 }
00130 
00131 
00138 sfInt8   sfPacket_ReadInt8(sfPacket* Packet)   {return PacketRead<sfInt8>(Packet);}
00139 sfUint8  sfPacket_ReadUint8(sfPacket* Packet)  {return PacketRead<sfUint8>(Packet);}
00140 sfInt16  sfPacket_ReadInt16(sfPacket* Packet)  {return PacketRead<sfInt16>(Packet);}
00141 sfUint16 sfPacket_ReadUint16(sfPacket* Packet) {return PacketRead<sfUint16>(Packet);}
00142 sfInt32  sfPacket_ReadInt32(sfPacket* Packet)  {return PacketRead<sfInt32>(Packet);}
00143 sfUint32 sfPacket_ReadUint32(sfPacket* Packet) {return PacketRead<sfUint32>(Packet);}
00144 float    sfPacket_ReadFloat(sfPacket* Packet)  {return PacketRead<float>(Packet);}
00145 double   sfPacket_ReadDouble(sfPacket* Packet) {return PacketRead<double>(Packet);}
00146 
00147 void sfPacket_ReadString(sfPacket* Packet, char* String)
00148 {
00149     CSFML_CHECK(Packet);
00150 
00151     if (String)
00152         Packet->This >> String;
00153 }
00154 
00155 
00162 void sfPacket_WriteInt8(sfPacket* Packet,   sfInt8 Value)      {PacketWrite(Packet, Value);}
00163 void sfPacket_WriteUint8(sfPacket* Packet,  sfUint8 Value)     {PacketWrite(Packet, Value);}
00164 void sfPacket_WriteInt16(sfPacket* Packet,  sfInt16 Value)     {PacketWrite(Packet, Value);}
00165 void sfPacket_WriteUint16(sfPacket* Packet, sfUint16 Value)    {PacketWrite(Packet, Value);}
00166 void sfPacket_WriteInt32(sfPacket* Packet,  sfInt32 Value)     {PacketWrite(Packet, Value);}
00167 void sfPacket_WriteUint32(sfPacket* Packet, sfUint32 Value)    {PacketWrite(Packet, Value);}
00168 void sfPacket_WriteFloat(sfPacket* Packet,  float Value)       {PacketWrite(Packet, Value);}
00169 void sfPacket_WriteDouble(sfPacket* Packet, double Value)      {PacketWrite(Packet, Value);}
00170 
00171 void sfPacket_WriteString(sfPacket* Packet, const char* String)
00172 {
00173     CSFML_CHECK(Packet);
00174 
00175     if (String)
00176         Packet->This << String;
00177 }