aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bitstring.h51
-rw-r--r--src/crypt.cpp7
-rw-r--r--src/crypt.h11
-rw-r--r--src/doxy/formatting.dox35
-rw-r--r--src/doxy/groups.dox10
-rw-r--r--src/doxy/main.dox1
-rw-r--r--src/doxy/streams.dox13
-rw-r--r--src/fbasicstring.h35
-rw-r--r--src/hash.h16
-rw-r--r--src/ito.h2
-rw-r--r--src/list.h2
-rw-r--r--src/set.h3
-rw-r--r--src/tests/console.cpp36
-rw-r--r--src/util.h68
14 files changed, 205 insertions, 85 deletions
diff --git a/src/bitstring.h b/src/bitstring.h
index 35f854f..b5f1ada 100644
--- a/src/bitstring.h
+++ b/src/bitstring.h
@@ -202,57 +202,6 @@ namespace Bu
202 */ 202 */
203 long toLong( long iStart = 0, long iSize = 32 ); 203 long toLong( long iStart = 0, long iSize = 32 );
204 204
205 /**
206 * Converts the data into a human-readable SString object. SString is
207 * used to make transport of the string and management very simple.
208 * Since BitStrings will generally be longer than your average strip of
209 * ints a faculty is included and turned on by default that will insert
210 * spacers into the output text every 8 places. For debugging work,
211 * this is definately reccomended.
212 *@param bAddSpacers Leave set to true in order to have the output
213 * broken into logical groupings of 8 bits per block. Set to off to
214 * have a harder
215 * to read solid block of bits.
216 *@returns A SString object containing the produced string.
217 */
218 //std::string toString( bool bAddSpacers = true );
219
220 // Utility
221 /**
222 * Converts the given number of bits into the smallest allocatable unit,
223 * which is bytes in C and on most systems nowadays. This is the
224 * minimum number of bytes needed to contain the given number of bits,
225 * so there is generally some slop if they are not evenly divisible.
226 *@param iBits The number of bits you wish to use.
227 *@returns The number of bytes you will need to contain the given number
228 * of bits.
229 */
230 //static long bitsToBytes( long iBits );
231
232 /**
233 * Writes all data in the BitString, including a small header block
234 * describing the number of bits in the BitString to the file described
235 * by the given file descriptor. The data writen is purely sequential
236 * and probably not too easy to read by other mechanisms, although the
237 * readFromFile function should always be able to do it. This function
238 * does not open nor close the file pointed to by fh.
239 *@param fh The file descriptor of the file to write the data to.
240 *@returns true if the operation completed without error, false
241 * otherwise.
242 */
243 //bool writeToFile( FILE *fh );
244
245 /**
246 * Reads data formatted by writeToFile and clears out any data that may
247 * have been in the BitString. This function preserves nothing in the
248 * original BitString that it may be replacing. This function does not
249 * open nor close the file pointed to by fh.
250 *@param fh The file descriptor to try to read the data from.
251 *@returns true if the operation completed without error, false
252 * otherwise.
253 */
254 //bool readFromFile( FILE *fh );
255
256 //operators 205 //operators
257 BitString &operator=( const BitString &xSrc ); 206 BitString &operator=( const BitString &xSrc );
258 BitString operator~(); 207 BitString operator~();
diff --git a/src/crypt.cpp b/src/crypt.cpp
index 9111cda..dbf90ab 100644
--- a/src/crypt.cpp
+++ b/src/crypt.cpp
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2008 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libbu++ library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#include "bu/crypt.h" 8#include "bu/crypt.h"
2#include "bu/md5.h" 9#include "bu/md5.h"
3#include "bu/base64.h" 10#include "bu/base64.h"
diff --git a/src/crypt.h b/src/crypt.h
index 1ea1b85..a38ff52 100644
--- a/src/crypt.h
+++ b/src/crypt.h
@@ -1,3 +1,10 @@
1/*
2 * Copyright (C) 2007-2008 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libbu++ library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
1#ifndef BU_CRYPT_H 8#ifndef BU_CRYPT_H
2#define BU_CRYPT_H 9#define BU_CRYPT_H
3 10
@@ -5,8 +12,8 @@
5 12
6namespace Bu 13namespace Bu
7{ 14{
8 FString cryptPass( const FString &sPass, const FString &sSalt ); 15 FString cryptPass( const Bu::FString &sPass, const Bu::FString &sSalt );
9 FString cryptPass( const FString &sPass ); 16 FString cryptPass( const Bu::FString &sPass );
10}; 17};
11 18
12#endif 19#endif
diff --git a/src/doxy/formatting.dox b/src/doxy/formatting.dox
new file mode 100644
index 0000000..7b440cb
--- /dev/null
+++ b/src/doxy/formatting.dox
@@ -0,0 +1,35 @@
1/*
2 * Copyright (C) 2007-2008 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libbu++ library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
8/**
9 *@page howto_formatting Formatting data for streams and the console.
10 *
11 * Libbu++ provides a powerful and flexible interface for writing formatted
12 * data easily to any Stream. This is implemented as a seperate set of
13 * classes from the basic Stream system in order to simplify both systems and
14 * provide additional flexibility and organization.
15 *
16 *@section secBasics The Basics: Writing to the console (standard i/o)
17 * Libbu++ provides the global variable Bu::sio already instantiated and ready
18 * to be used to access the standard input and output via the Bu::Formatter
19 * class. If you are familiar with the STL cout then you're practically done.
20 * A quick example may be best.
21 *@code
22#include <bu/sio.h>
23using namespace Bu;
24
25int main()
26{
27 int i = 47;
28
29 sio << "Hello, world." << sio.nl
30 << "Here is a number: " << i << sio.nl;
31
32 return 0;
33}
34@endcode
35 */
diff --git a/src/doxy/groups.dox b/src/doxy/groups.dox
index 9b54950..285923c 100644
--- a/src/doxy/groups.dox
+++ b/src/doxy/groups.dox
@@ -6,26 +6,26 @@
6 */ 6 */
7 7
8/** 8/**
9 *@defgroup Threading 9 *@defgroup Threading Threading
10 * Threads are awesome. 10 * Threads are awesome.
11 */ 11 */
12 12
13/** 13/**
14 *@defgroup Serving 14 *@defgroup Serving Serving
15 * Serving data is pretty cool too. 15 * Serving data is pretty cool too.
16 */ 16 */
17 17
18/** 18/**
19 *@defgroup Containers 19 *@defgroup Containers Containers
20 * Containers for data. 20 * Containers for data.
21 */ 21 */
22 22
23/** 23/**
24 *@defgroup Taf 24 *@defgroup Taf Taf
25 * Taf is the best! 25 * Taf is the best!
26 */ 26 */
27 27
28/** 28/**
29 *@defgroup Streams 29 *@defgroup Streams Streams
30 * Streams are for data. 30 * Streams are for data.
31 */ 31 */
diff --git a/src/doxy/main.dox b/src/doxy/main.dox
index 6030f0c..5e822e1 100644
--- a/src/doxy/main.dox
+++ b/src/doxy/main.dox
@@ -18,6 +18,7 @@
18 * comprehensive guides and API reference, but doesn't yet. For now check out 18 * comprehensive guides and API reference, but doesn't yet. For now check out
19 * these sections: 19 * these sections:
20 * - @ref howto_streams 20 * - @ref howto_streams
21 * - @ref howto_formatting
21 * - @ref howto_archives 22 * - @ref howto_archives
22 * - @ref howto_threading 23 * - @ref howto_threading
23 * - @ref howto_servers 24 * - @ref howto_servers
diff --git a/src/doxy/streams.dox b/src/doxy/streams.dox
index 8217210..9655743 100644
--- a/src/doxy/streams.dox
+++ b/src/doxy/streams.dox
@@ -44,11 +44,10 @@
44 * data. 44 * data.
45 * 45 *
46 *@section difference How are libbu++ streams different form stl streams? 46 *@section difference How are libbu++ streams different form stl streams?
47 * While not globally true, many stl streams are designed for formatting the 47 * The most basic difference is that libbu++ streams are geared more towards a
48 * data that flows through the stream, that means that when you attempt to 48 * lower level feel, giving you easy and more direct access to many features,
49 * write a uint32_t into a standard stream it can be difficult to predict what 49 * while seperating all of the formatting code used for console I/O and number
50 * the result will be, will it be the binary representation or a textual 50 * to text conversion, etc, in a seperate place.
51 * conversion?
52 * 51 *
53 * Libbu++ streams are very direct about how the data is handled. All end-point 52 * Libbu++ streams are very direct about how the data is handled. All end-point
54 * streams will always handle the data that you provide or request without any 53 * streams will always handle the data that you provide or request without any
@@ -59,8 +58,8 @@
59 * easy as possible to write general code that was as easy as possible to 58 * easy as possible to write general code that was as easy as possible to
60 * extend, and as clear as possible. We have accomplished this by making 59 * extend, and as clear as possible. We have accomplished this by making
61 * streams simple, yet flexible, with a clear API and a flexible filter system 60 * streams simple, yet flexible, with a clear API and a flexible filter system
62 * that something geared towards more general formatting, conversion, and 61 * that something geared towards more general formatting, conversion can't
63 * operator-only access can't touch. 62 * touch.
64 * 63 *
65 *@section usage Using streams directly 64 *@section usage Using streams directly
66 * To create a stream depends on the type of stream that you're interested in, 65 * To create a stream depends on the type of stream that you're interested in,
diff --git a/src/fbasicstring.h b/src/fbasicstring.h
index b9e4871..fbfc5ef 100644
--- a/src/fbasicstring.h
+++ b/src/fbasicstring.h
@@ -706,6 +706,7 @@ namespace Bu
706 /** 706 /**
707 * Append another FString to this one. 707 * Append another FString to this one.
708 *@param sData (MyType &) The FString to append. 708 *@param sData (MyType &) The FString to append.
709 *@param nStart Start position in sData to start copying from.
709 *@param nLen How much data to append. 710 *@param nLen How much data to append.
710 */ 711 */
711 void append( const MyType & sData, long nStart, long nLen ) 712 void append( const MyType & sData, long nStart, long nLen )
@@ -715,6 +716,11 @@ namespace Bu
715 append( sData.getStr(), nStart, nLen ); 716 append( sData.getStr(), nStart, nLen );
716 } 717 }
717 718
719 /**
720 * Append data to this FString using the passed in iterator as a base.
721 * The iterator is const, it is not changed.
722 *@param s Iterator from any compatible FBasicString to copy data from.
723 */
718 void append( const const_iterator &s ) 724 void append( const const_iterator &s )
719 { 725 {
720 if( !s.isValid() ) 726 if( !s.isValid() )
@@ -731,11 +737,24 @@ namespace Bu
731 } 737 }
732 } 738 }
733 739
740 /**
741 * Append data to this FString using the passed in iterator as a base.
742 * The iterator is const, it is not changed.
743 *@param s Iterator from any compatible FBasicString to copy data from.
744 */
734 void append( const iterator &s ) // I get complainst without this one 745 void append( const iterator &s ) // I get complainst without this one
735 { 746 {
736 append( const_iterator( s ) ); 747 append( const_iterator( s ) );
737 } 748 }
738 749
750 /**
751 * Append data to this FString using the passed in iterator as a base,
752 * and copy data until the ending iterator is reached. The character
753 * at the ending iterator is not copied.
754 * The iterators are const, they are not changed.
755 *@param s Iterator from any compatible FBasicString to copy data from.
756 *@param e Iterator to stop copying at.
757 */
739 void append( const const_iterator &s, const const_iterator &e ) 758 void append( const const_iterator &s, const const_iterator &e )
740 { 759 {
741 if( !s.isValid() ) 760 if( !s.isValid() )
@@ -885,10 +904,6 @@ namespace Bu
885 } 904 }
886 905
887 /** 906 /**
888 *@todo void prepend( const chr &cData )
889 */
890
891 /**
892 * Clear all data from the string. 907 * Clear all data from the string.
893 */ 908 */
894 void clear() 909 void clear()
@@ -1079,7 +1094,7 @@ namespace Bu
1079 1094
1080 /** 1095 /**
1081 * Plus equals operator for FString. 1096 * Plus equals operator for FString.
1082 *@param pData (const MyType &) The FString to append to your FString. 1097 *@param rSrc (const MyType &) The FString to append to your FString.
1083 */ 1098 */
1084 MyType &operator+=( const MyType &rSrc ) 1099 MyType &operator+=( const MyType &rSrc )
1085 { 1100 {
@@ -1093,7 +1108,7 @@ namespace Bu
1093 1108
1094 /** 1109 /**
1095 * Plus equals operator for FString. 1110 * Plus equals operator for FString.
1096 *@param pData (const chr) The character to append to your FString. 1111 *@param cData (const chr) The character to append to your FString.
1097 */ 1112 */
1098 MyType &operator+=( const chr cData ) 1113 MyType &operator+=( const chr cData )
1099 { 1114 {
@@ -1603,7 +1618,8 @@ namespace Bu
1603 1618
1604 /** 1619 /**
1605 * Find the index of the first occurrance of cChar 1620 * Find the index of the first occurrance of cChar
1606 *@param sText (const chr *) The string to search for. 1621 *@param cChar The character to search for.
1622 *@param iStart The position in the string to start searching from.
1607 *@returns (long) The index of the first occurrance. -1 for not found. 1623 *@returns (long) The index of the first occurrance. -1 for not found.
1608 */ 1624 */
1609 long findIdx( const chr cChar, long iStart=0 ) const 1625 long findIdx( const chr cChar, long iStart=0 ) const
@@ -1619,8 +1635,9 @@ namespace Bu
1619 1635
1620 /** 1636 /**
1621 * Find the index of the first occurrance of sText 1637 * Find the index of the first occurrance of sText
1622 *@param cChar (const chr) The character to search for. 1638 *@param sText The null-terminated string to search for.
1623 *@returns (long) The index of the first occurrance. -1 for not found. 1639 *@param iStart The position in the string to start searching from.
1640 *@returns The index of the first occurrance. -1 for not found.
1624 */ 1641 */
1625 long findIdx( const chr *sText, long iStart=0 ) const 1642 long findIdx( const chr *sText, long iStart=0 ) const
1626 { 1643 {
diff --git a/src/hash.h b/src/hash.h
index 3868a4e..50a35b8 100644
--- a/src/hash.h
+++ b/src/hash.h
@@ -17,8 +17,8 @@
17#include "bu/exceptionbase.h" 17#include "bu/exceptionbase.h"
18#include "bu/list.h" 18#include "bu/list.h"
19#include "bu/util.h" 19#include "bu/util.h"
20///#include "archival.h" 20//#include "archival.h"
21///#include "archive.h" 21//#include "archive.h"
22 22
23#define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0)) 23#define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0))
24 24
@@ -37,6 +37,14 @@ namespace Bu
37 template<typename T> 37 template<typename T>
38 bool __cmpHashKeys( const T &a, const T &b ); 38 bool __cmpHashKeys( const T &a, const T &b );
39 39
40 /**
41 * Default functor used to compute the size of hash tables. This version
42 * effectively doubles the size of the table when space is low, ensuring
43 * that you always wind up with an odd number for the table size. A
44 * better but slower option is to always find the next prime number that's
45 * above double your current table size, but that has the potential to be
46 * slower.
47 */
40 struct __calcNextTSize_fast 48 struct __calcNextTSize_fast
41 { 49 {
42 uint32_t operator()( uint32_t nCapacity, uint32_t, uint32_t nDeleted ) const 50 uint32_t operator()( uint32_t nCapacity, uint32_t, uint32_t nDeleted ) const
@@ -677,7 +685,7 @@ namespace Bu
677 685
678 /** 686 /**
679 * Get the value behind this iterator. 687 * Get the value behind this iterator.
680 *@returs (value_type &) The value behind this iterator. 688 *@returns (value_type &) The value behind this iterator.
681 */ 689 */
682 value &getValue() 690 value &getValue()
683 { 691 {
@@ -804,7 +812,7 @@ namespace Bu
804 812
805 /** 813 /**
806 * Get the value behind this iterator. 814 * Get the value behind this iterator.
807 *@returs (value_type &) The value behind this iterator. 815 *@returns (value_type &) The value behind this iterator.
808 */ 816 */
809 const value &getValue() const 817 const value &getValue() const
810 { 818 {
diff --git a/src/ito.h b/src/ito.h
index 9829d28..3539929 100644
--- a/src/ito.h
+++ b/src/ito.h
@@ -94,7 +94,7 @@ namespace Bu
94 * the function that actually makes up the thread, it simply calls the 94 * the function that actually makes up the thread, it simply calls the
95 * run member function in an OO-friendly way. This is what allows us to 95 * run member function in an OO-friendly way. This is what allows us to
96 * use member variables from within the thread itself. 96 * use member variables from within the thread itself.
97 *@param Should always be this. 97 *@param pThread Should always be this.
98 *@returns This is specified by posix, I'm not sure yet. 98 *@returns This is specified by posix, I'm not sure yet.
99 */ 99 */
100 static void *threadRunner( void *pThread ); 100 static void *threadRunner( void *pThread );
diff --git a/src/list.h b/src/list.h
index c517a9e..934766b 100644
--- a/src/list.h
+++ b/src/list.h
@@ -611,7 +611,7 @@ namespace Bu
611 611
612 /** 612 /**
613 * Erase an item from the list if you already know the item. 613 * Erase an item from the list if you already know the item.
614 *@param ob The item to find and erase. 614 *@param v The item to find and erase.
615 */ 615 */
616 void erase( const value &v ) 616 void erase( const value &v )
617 { 617 {
diff --git a/src/set.h b/src/set.h
index a25b0bf..aec5781 100644
--- a/src/set.h
+++ b/src/set.h
@@ -184,9 +184,8 @@ namespace Bu
184 } 184 }
185 185
186 /** 186 /**
187 * Insert a value (v) under key (k) into the hash table 187 * Insert key (k) into the set
188 *@param k (key_type) Key to list the value under. 188 *@param k (key_type) Key to list the value under.
189 *@param v (value_type) Value to store in the hash table.
190 */ 189 */
191 virtual void insert( key k ) 190 virtual void insert( key k )
192 { 191 {
diff --git a/src/tests/console.cpp b/src/tests/console.cpp
new file mode 100644
index 0000000..628482b
--- /dev/null
+++ b/src/tests/console.cpp
@@ -0,0 +1,36 @@
1#include <bu/sio.h>
2using namespace Bu;
3
4#include <iostream>
5using namespace std;
6
7typedef struct Counter
8{
9 Counter() : i( 0 )
10 {
11 }
12
13 int get()
14 {
15 i++;
16 return i-1;
17 }
18
19 int i;
20} Counter;
21
22template<typename a>
23void runtest( a &out )
24{
25 Counter c;
26 out << c.get() << ", " << c.get() << ", " << c.get() << ", " << c.get() << ", " << c.get() << "\n";
27}
28
29int main()
30{
31 runtest( cout );
32 runtest( sio );
33
34 return 0;
35}
36
diff --git a/src/util.h b/src/util.h
index efbfb26..ea107ee 100644
--- a/src/util.h
+++ b/src/util.h
@@ -19,6 +19,12 @@
19 19
20namespace Bu 20namespace Bu
21{ 21{
22 /**
23 * Swap the value of two variables, uses references, so it's pretty safe.
24 * Objects passed in must support a basic assignemnt operator (=);
25 *@param a Variable to recieve the value of parameter b
26 *@param b Variable to recieve the value of parameter a
27 */
22 template<typename item> 28 template<typename item>
23 void swap( item &a, item &b ) 29 void swap( item &a, item &b )
24 { 30 {
@@ -27,36 +33,78 @@ namespace Bu
27 b = tmp; 33 b = tmp;
28 } 34 }
29 35
36 /**
37 * Finds the lesser of the two objects, objects passed in must be
38 * less-than-comparable.
39 *@param a A value to test.
40 *@param b Another value to test.
41 *@returns A reference to the lesser of a or b.
42 */
30 template<typename item> 43 template<typename item>
31 const item &min( const item &a, const item &b ) 44 const item &min( const item &a, const item &b )
32 { 45 {
33 return a<b?a:b; 46 return a<b?a:b;
34 } 47 }
35 48
49 /**
50 * Finds the lesser of the two objects, objects passed in must be
51 * less-than-comparable.
52 *@param a A value to test.
53 *@param b Another value to test.
54 *@returns A reference to the lesser of a or b.
55 */
36 template<typename item> 56 template<typename item>
37 item &min( item &a, item &b ) 57 item &min( item &a, item &b )
38 { 58 {
39 return a<b?a:b; 59 return a<b?a:b;
40 } 60 }
41 61
62 /**
63 * Finds the greater of the two objects, objects passed in must be
64 * less-than-comparable.
65 *@param a A value to test.
66 *@param b Another value to test.
67 *@returns A reference to the greater of a or b.
68 */
42 template<typename item> 69 template<typename item>
43 const item &max( const item &a, const item &b ) 70 const item &max( const item &a, const item &b )
44 { 71 {
45 return a>b?a:b; 72 return b<a?a:b;
46 } 73 }
47 74
75 /**
76 * Finds the greater of the two objects, objects passed in must be
77 * less-than-comparable.
78 *@param a A value to test.
79 *@param b Another value to test.
80 *@returns A reference to the greater of a or b.
81 */
48 template<typename item> 82 template<typename item>
49 item &max( item &a, item &b ) 83 item &max( item &a, item &b )
50 { 84 {
51 return a>b?a:b; 85 return b<a?a:b;
52 } 86 }
53 87
88 /**
89 * Given three objects this finds the one between the other two.
90 *@param a A value to test.
91 *@param b Another value to test.
92 *@param c Yet another value to test.
93 *@returns A reference to the mid-value of a, b, and c.
94 */
54 template<typename item> 95 template<typename item>
55 const item &mid( const item &a, const item &b, const item &c ) 96 const item &mid( const item &a, const item &b, const item &c )
56 { 97 {
57 return min( max( a, b ), c ); 98 return min( max( a, b ), c );
58 } 99 }
59 100
101 /**
102 * Given three objects this finds the one between the other two.
103 *@param a A value to test.
104 *@param b Another value to test.
105 *@param c Yet another value to test.
106 *@returns A reference to the mid-value of a, b, and c.
107 */
60 template<typename item> 108 template<typename item>
61 item &mid( item &a, item &b, item &c ) 109 item &mid( item &a, item &b, item &c )
62 { 110 {
@@ -66,6 +114,10 @@ namespace Bu
66 // 114 //
67 // Basic comparison functors 115 // Basic comparison functors
68 // 116 //
117 /**
118 * Simple less-than comparison functor. Objects being used should be
119 * less-than-comparable.
120 */
69 template<typename item> 121 template<typename item>
70 struct __basicLTCmp 122 struct __basicLTCmp
71 { 123 {
@@ -75,6 +127,10 @@ namespace Bu
75 } 127 }
76 }; 128 };
77 129
130 /**
131 * Simple greater-than comparison functor. Objects being used should be
132 * greater-than-comparable.
133 */
78 template<typename item> 134 template<typename item>
79 struct __basicGTCmp 135 struct __basicGTCmp
80 { 136 {
@@ -84,6 +140,9 @@ namespace Bu
84 } 140 }
85 }; 141 };
86 142
143 /**
144 * As __basicLTCmp but dereferences the passed in pointers before comparing.
145 */
87 template<typename item> 146 template<typename item>
88 struct __basicPtrLTCmp 147 struct __basicPtrLTCmp
89 { 148 {
@@ -93,6 +152,9 @@ namespace Bu
93 } 152 }
94 }; 153 };
95 154
155 /**
156 * As __basicGTCmp but dereferences the passed in pointers before comparing.
157 */
96 template<typename item> 158 template<typename item>
97 struct __basicPtrGTCmp 159 struct __basicPtrGTCmp
98 { 160 {