neoGFX
Cross-platform C++ app/game engine
Loading...
Searching...
No Matches
i_packet.hpp
Go to the documentation of this file.
1// i_packet.hpp
2/*
3 * Copyright (c) 2007 Leigh Johnston.
4 *
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are
9 * met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 *
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 *
18 * * Neither the name of Leigh Johnston nor the names of any
19 * other contributors to this software may be used to endorse or
20 * promote products derived from this software without specific prior
21 * written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*/
35
36#pragma once
37
38#include <neolib/neolib.hpp>
39#include <stdexcept>
40#include <memory>
41
42namespace neolib
43{
44 template <typename CharType>
46 {
47 // types
48 public:
49 typedef CharType character_type;
52 typedef std::size_t size_type;
55 typedef std::unique_ptr<i_basic_packet> clone_pointer;
56 // exceptions
57 public:
58 struct packet_empty : std::logic_error { packet_empty() : std::logic_error("i_basic_packet::packet_empty") {} };
59 struct packet_too_big : std::runtime_error { packet_too_big() : std::runtime_error("i_basic_packet::packet_too_big") {} };
60 // construction
61 public:
62 virtual ~i_basic_packet() = default;
63 // interface
64 public:
65 virtual const_pointer data() const = 0;
66 virtual pointer data() = 0;
67 virtual size_type length() const = 0;
68 virtual bool has_max_length() const = 0;
69 virtual size_type max_length() const = 0;
70 bool empty() const { return length() == 0; }
71 virtual void clear() = 0;
72 const_iterator begin() const { return !empty() ? data() : 0; }
73 const_iterator end() const { return !empty() ? data() + length(): 0; }
74 iterator begin() { return !empty() ? data() : 0; }
75 iterator end() { return !empty() ? data() + length(): 0; }
76 virtual bool take_some(const_pointer& aFirst, const_pointer aLast) = 0;
77 virtual clone_pointer clone() const = 0;
78 virtual void copy_from(const i_basic_packet<CharType>& aSource) = 0;
79 };
80
82}
virtual size_type max_length() const =0
virtual pointer data()=0
virtual void clear()=0
const_iterator begin() const
Definition i_packet.hpp:72
character_type * pointer
Definition i_packet.hpp:51
virtual void copy_from(const i_basic_packet< CharType > &aSource)=0
const_iterator end() const
Definition i_packet.hpp:73
virtual bool take_some(const_pointer &aFirst, const_pointer aLast)=0
virtual clone_pointer clone() const =0
virtual bool has_max_length() const =0
const character_type * const_pointer
Definition i_packet.hpp:50
virtual ~i_basic_packet()=default
virtual const_pointer data() const =0
std::size_t size_type
Definition i_packet.hpp:52
const_pointer const_iterator
Definition i_packet.hpp:53
std::unique_ptr< i_basic_packet > clone_pointer
Definition i_packet.hpp:55
virtual size_type length() const =0
i_basic_packet< char > i_packet
Definition i_packet.hpp:81