Subversion Repositories HomeAutomation

Rev

Rev 1608 | Rev 1952 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
1596 runge 1
/*
2
 *
3
 *  Copyright (C) 2010  Mattias Runge
4
 *
5
 *  This program is free software; you can redistribute it and/or modify
6
 *  it under the terms of the GNU General Public License as published by
7
 *  the Free Software Foundation; either version 2 of the License, or
8
 *  (at your option) any later version.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License along
16
 *  with this program; if not, write to the Free Software Foundation, Inc.,
17
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
 *
19
 */
20
 
21
#include "Byteset.h"
22
 
23
#include "string.h"
24
 
1598 runge 25
#include <boost/lexical_cast.hpp>
26
 
1596 runge 27
namespace atom {
1642 runge 28
namespace common {
1596 runge 29
 
30
Byteset::Byteset(unsigned int max_size)
31
{
32
    this->max_size_ = max_size;
33
    this->bytes_ = new unsigned char[this->max_size_];
34
 
35
    this->Clear();
36
}
37
 
38
Byteset::Byteset(const Byteset& set)
39
{
1597 runge 40
    this->max_size_ = set.size_;
1596 runge 41
    this->size_ = this->max_size_;
42
    this->bytes_ = new unsigned char[this->max_size_];
43
 
44
    memcpy(this->bytes_, set.bytes_, this->max_size_);
45
}
46
 
47
Byteset::Byteset(std::string str)
48
{
1608 runge 49
    this->max_size_ = str.size() + 1;
1596 runge 50
    this->size_ = this->max_size_;
51
    this->bytes_ = new unsigned char[this->max_size_];
52
 
53
    memcpy(this->bytes_, str.data(), this->max_size_);
54
}
55
 
56
Byteset::~Byteset()
57
{
58
    delete [] this->bytes_;
59
}
60
 
61
unsigned char* Byteset::Get() const
62
{
63
    return this->bytes_;
64
}
65
 
1597 runge 66
std::string Byteset::ToCharString()
67
{
1608 runge 68
    return std::string((char*)this->bytes_, this->size_ - 1);
1597 runge 69
}
70
 
1598 runge 71
std::string Byteset::ToDebugString()
72
{
73
    std::string debug_string;
74
 
75
    for (unsigned int n = 0; n < this->size_; n++)
76
    {
77
        debug_string += boost::lexical_cast<std::string>((unsigned int)this->bytes_[n]) + ",";
78
    }
79
 
80
    return debug_string;
81
}
82
 
1596 runge 83
unsigned char& Byteset::operator[](unsigned int index)
84
{
1642 runge 85
    if (this->size_ < index + 1)
86
    {
87
        this->size_ = index + 1;
88
    }
89
 
1596 runge 90
    return this->bytes_[index];
91
}
92
 
93
unsigned int Byteset::GetMaxSize() const
94
{
95
    return this->max_size_;
96
}
97
 
98
unsigned int Byteset::GetSize() const
99
{
100
    return this->size_;
101
}
102
 
103
void Byteset::SetSize(unsigned int size)
104
{
105
    this->size_ = size;
106
}
107
 
108
void Byteset::Append(unsigned char byte)
109
{
110
    this->bytes_[this->size_] = byte;
111
    this->size_++;
112
}
113
 
114
void Byteset::Clear()
115
{
116
    memset(this->bytes_, 0, this->max_size_);
117
    this->size_ = 0;
118
}
1642 runge 119
 
120
void Byteset::Fill(char c)
121
{
122
    memset(this->bytes_, c, this->max_size_);
123
    this->size_ = 0;
124
}
1596 runge 125
 
126
}; // namespace type
127
}; // namespace atom