Commit 9c4730ea authored by Anton Bukov's avatar Anton Bukov

Some fixes

parent bc8c36a7
Debug Debug
/*.opensdf Release
ipch
*.opensdf
*.sdf *.sdf
*.user *.user
*.suo
\ No newline at end of file
...@@ -211,7 +211,9 @@ namespace boolinq ...@@ -211,7 +211,9 @@ namespace boolinq
template<typename TRet> template<typename TRet>
LinqObj<Enumerator<T,std::pair<TE,std::set<TRet> > > > distinct(std::function<TRet(T)> transform) const LinqObj<Enumerator<T,std::pair<TE,std::set<TRet> > > > distinct(std::function<TRet(T)> transform) const
{ {
return Enumerator<T,std::pair<TE,std::set<TRet> > >([=](std::pair<TE,std::set<TRet> > & pair)->T{ typedef std::pair<TE,std::set<TRet> > DataType;
return Enumerator<T,DataType>([=](DataType & pair)->T{
for (;;) for (;;)
{ {
T object = pair.first.nextObject(); T object = pair.first.nextObject();
...@@ -530,7 +532,9 @@ namespace boolinq ...@@ -530,7 +532,9 @@ namespace boolinq
template<typename TE2> template<typename TE2>
LinqObj<Enumerator<T,std::pair<bool,std::pair<TE,TE2> > > > concat(LinqObj<TE2> rhs) const LinqObj<Enumerator<T,std::pair<bool,std::pair<TE,TE2> > > > concat(LinqObj<TE2> rhs) const
{ {
return Enumerator<T,std::pair<bool,std::pair<TE,TE2> > >([=](std::pair<bool,std::pair<TE,TE2> > & pair)->T{ typedef std::pair<bool,std::pair<TE,TE2> > DataType;
return Enumerator<T,DataType>([=](DataType & pair)->T{
if (pair.first) if (pair.first)
return pair.second.second.nextObject(); return pair.second.second.nextObject();
try { return pair.second.first.nextObject(); } try { return pair.second.first.nextObject(); }
...@@ -600,10 +604,12 @@ namespace boolinq ...@@ -600,10 +604,12 @@ namespace boolinq
LinqObj<Enumerator<int,std::pair<int,std::pair<TE,T> > > > bytes(BytesDirection direction = FirstToLast) const LinqObj<Enumerator<int,std::pair<int,std::pair<TE,T> > > > bytes(BytesDirection direction = FirstToLast) const
{ {
typedef std::pair<int,std::pair<TE,T> > DataType;
auto pair = std::make_pair(_enumerator, T()); auto pair = std::make_pair(_enumerator, T());
pair.second = pair.first.nextObject(); pair.second = pair.first.nextObject();
return Enumerator<int,std::pair<int,std::pair<TE,T> > >([=](std::pair<int,std::pair<TE,T> > & pair)->int{ return Enumerator<int,DataType>([=](DataType & pair)->int{
if (direction == FirstToLast && pair.first == sizeof(T) if (direction == FirstToLast && pair.first == sizeof(T)
|| direction == LastToFirst && pair.first == -1) || direction == LastToFirst && pair.first == -1)
{ {
...@@ -636,14 +642,15 @@ namespace boolinq ...@@ -636,14 +642,15 @@ namespace boolinq
LinqObj<Enumerator<int,std::pair<int,std::pair<LinqObj<Enumerator<int,std::pair<int,std::pair<TE,T> > > >,unsigned char> > > > LinqObj<Enumerator<int,std::pair<int,std::pair<LinqObj<Enumerator<int,std::pair<int,std::pair<TE,T> > > >,unsigned char> > > >
bits(BitsDirection direction = HighToLow, BytesDirection bytesDirection = FirstToLast) const bits(BitsDirection direction = HighToLow, BytesDirection bytesDirection = FirstToLast) const
{ {
typedef std::pair<int,std::pair<LinqObj<Enumerator<int,std::pair<int,std::pair<TE,T> > > >,unsigned char> > DataType;
auto inner = bytes(bytesDirection); auto inner = bytes(bytesDirection);
return Enumerator<int,std::pair<int,std::pair<LinqObj<Enumerator<int,std::pair<int,std::pair<TE,T> > > >,unsigned char> > >( return Enumerator<int,DataType>([=](DataType & pair)->int{
[=](std::pair<int,std::pair<LinqObj<Enumerator<int,std::pair<int,std::pair<TE,T> > > >,unsigned char> > & pair)->int{
if (direction == LowToHigh && pair.first == CHAR_BIT if (direction == LowToHigh && pair.first == CHAR_BIT
|| direction == HighToLow && pair.first == -1) || direction == HighToLow && pair.first == -1)
{ {
pair.first = (direction == LowToHigh) ? 0 : CHAR_BIT-1; pair.first = (direction == LowToHigh) ? 0 : CHAR_BIT-1;
pair.second.second = pair.second.first.nextObject(); pair.second.second = (unsigned char)pair.second.first.nextObject();
} }
int value = 1 & (pair.second.second >> (pair.first % CHAR_BIT)); int value = 1 & (pair.second.second >> (pair.first % CHAR_BIT));
pair.first += (direction == LowToHigh) ? 1 : -1; pair.first += (direction == LowToHigh) ? 1 : -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment