From e629acc128cf0e61b8d836c6ae75c6d4e4a32bd9 Mon Sep 17 00:00:00 2001 From: Oren Miller Date: Tue, 1 Nov 2005 05:56:54 +0000 Subject: [PATCH] remove group methods will remove just one group instead of all of them --- src/.NET/Group.cpp | 80 +++++++- src/.NET/Group.h | 16 +- src/.NET/Message.cpp | 165 ++++++++++++++- src/.NET/Message.h | 41 +++- src/C++/FieldMap.cpp | 40 +++- src/C++/FieldMap.h | 7 +- src/C++/Group.cpp | 12 ++ src/C++/Group.h | 2 + src/C++/Message.h | 10 +- src/C++/test/MessagesTestCase.cpp | 10 + src/java/quickfix_Group.cpp | 42 +++- src/java/quickfix_Group.h | 72 +++++-- src/java/quickfix_Message.cpp | 306 +++++++++++++++++++++++----- src/java/quickfix_Message.h | 168 ++++++++++++--- src/java/src/quickfix/FieldMap.java | 10 + src/java/src/quickfix/Group.java | 24 ++- src/java/src/quickfix/Message.java | 123 ++++++++++- 17 files changed, 986 insertions(+), 142 deletions(-) diff --git a/src/.NET/Group.cpp b/src/.NET/Group.cpp index 97d11441f..16fc4e532 100644 --- a/src/.NET/Group.cpp +++ b/src/.NET/Group.cpp @@ -27,6 +27,8 @@ namespace QuickFix void Group::setField( StringField* field ) { QF_STACK_TRY + checkDisposed(); + m_pUnmanaged->setField ( FIX::StringField ( field->getField(), convertString( field->getValue() ) ) ); @@ -37,6 +39,8 @@ void Group::setField( StringField* field ) void Group::setField( BooleanField* field ) { QF_STACK_TRY + checkDisposed(); + m_pUnmanaged->setField ( FIX::BoolField( field->getField(), field->getValue() ) ); @@ -46,6 +50,8 @@ void Group::setField( BooleanField* field ) void Group::setField( CharField* field ) { QF_STACK_TRY + checkDisposed(); + m_pUnmanaged->setField ( FIX::CharField( field->getField(), field->getValue() ) ); @@ -55,6 +61,8 @@ void Group::setField( CharField* field ) void Group::setField( IntField* field ) { QF_STACK_TRY + checkDisposed(); + m_pUnmanaged->setField ( FIX::IntField( field->getField(), field->getValue() ) ); @@ -64,6 +72,8 @@ void Group::setField( IntField* field ) void Group::setField( DoubleField* field ) { QF_STACK_TRY + checkDisposed(); + m_pUnmanaged->setField ( FIX::DoubleField( field->getField(), field->getValue() ) ); @@ -73,6 +83,8 @@ void Group::setField( DoubleField* field ) void Group::setField( UtcTimeStampField* field ) { QF_STACK_TRY + checkDisposed(); + DateTime value = field->getValue(); m_pUnmanaged->setField ( FIX::UtcTimeStampField @@ -88,6 +100,8 @@ void Group::setField( UtcTimeStampField* field ) void Group::setField( UtcDateOnlyField* field ) { QF_STACK_TRY + checkDisposed(); + DateTime value = field->getValue(); m_pUnmanaged->setField ( FIX::UtcDateOnlyField @@ -100,6 +114,8 @@ void Group::setField( UtcDateOnlyField* field ) void Group::setField( UtcTimeOnlyField* field ) { QF_STACK_TRY + checkDisposed(); + DateTime value = field->getValue(); m_pUnmanaged->setField ( FIX::UtcTimeOnlyField @@ -113,6 +129,7 @@ void Group::setField( UtcTimeOnlyField* field ) StringField* Group::getField( StringField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { field->setValue( m_pUnmanaged->getField( field->getField() ).c_str() ); @@ -127,6 +144,7 @@ StringField* Group::getField( StringField* field ) throw( FieldNotFound* ) BooleanField* Group::getField( BooleanField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { field->setValue @@ -143,6 +161,7 @@ BooleanField* Group::getField( BooleanField* field ) throw( FieldNotFound* ) CharField* Group::getField( CharField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { field->setValue @@ -159,6 +178,7 @@ CharField* Group::getField( CharField* field ) throw( FieldNotFound* ) IntField* Group::getField( IntField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { field->setValue @@ -175,6 +195,7 @@ IntField* Group::getField( IntField* field ) throw( FieldNotFound* ) DoubleField* Group::getField( DoubleField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { field->setValue @@ -192,6 +213,7 @@ UtcTimeStampField* Group::getField( UtcTimeStampField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { FIX::UtcTimeStamp fixd; @@ -211,6 +233,7 @@ throw( FieldNotFound* ) UtcDateOnlyField* Group::getField( UtcDateOnlyField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { FIX::UtcDate fixd; @@ -230,6 +253,7 @@ UtcTimeOnlyField* Group::getField( UtcTimeOnlyField* field ) throw( FieldNotFound* ) { QF_STACK_TRY + checkDisposed(); try { FIX::UtcTimeOnly fixd; @@ -247,44 +271,86 @@ throw( FieldNotFound* ) bool Group::isSetField( Field* field ) { QF_STACK_TRY - return m_pUnmanaged->isSetField( field->getField() ); + checkDisposed(); return m_pUnmanaged->isSetField( field->getField() ); QF_STACK_CATCH } String* Group::getField( int field ) throw( FieldNotFound* ) { QF_STACK_TRY - return m_pUnmanaged->getField( field ).c_str(); + checkDisposed(); return m_pUnmanaged->getField( field ).c_str(); QF_STACK_CATCH } void Group::setField( int field, String* value ) { QF_STACK_TRY - m_pUnmanaged->setField( field, convertString(value) ); + checkDisposed(); m_pUnmanaged->setField( field, convertString(value) ); QF_STACK_CATCH } void Group::removeField( int field ) { QF_STACK_TRY - m_pUnmanaged->removeField( field ); + checkDisposed(); m_pUnmanaged->removeField( field ); QF_STACK_CATCH } bool Group::hasGroup( int field ) { QF_STACK_TRY - return ((FIX::FieldMap*)m_pUnmanaged)->hasGroup( field ); + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->hasGroup( field ); + QF_STACK_CATCH +} + +bool Group::hasGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->hasGroup( num, field ); + QF_STACK_CATCH +} + +bool Group::hasGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->hasGroup( num, group->field() ); + QF_STACK_CATCH +} + +bool Group::hasGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->hasGroup( group->field() ); + QF_STACK_CATCH +} + +void Group::removeGroup( int field ) +{ QF_STACK_TRY + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->removeGroup( field ); + QF_STACK_CATCH +} + +void Group::removeGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->removeGroup( num, field ); + QF_STACK_CATCH +} + +void Group::removeGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->removeGroup( num, group->field() ); + QF_STACK_CATCH +} + +void Group::removeGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return ((FIX::FieldMap*)m_pUnmanaged)->removeGroup( group->field() ); QF_STACK_CATCH } int Group::groupCount( int field ) { QF_STACK_TRY - return m_pUnmanaged->groupCount( field ); + checkDisposed(); return m_pUnmanaged->groupCount( field ); QF_STACK_CATCH } bool Group::isSetField( int field ) { QF_STACK_TRY - return m_pUnmanaged->isSetField( field ); + checkDisposed(); return m_pUnmanaged->isSetField( field ); QF_STACK_CATCH } } diff --git a/src/.NET/Group.h b/src/.NET/Group.h index 5028524b4..936c77e6f 100644 --- a/src/.NET/Group.h +++ b/src/.NET/Group.h @@ -118,7 +118,17 @@ public __gc class Group : public IDisposable String* getField( int field ) throw( FieldNotFound* ); void setField( int field, String* ); void removeField( int field ); + bool hasGroup( int field ); + bool hasGroup( unsigned num, int field ); + bool hasGroup( unsigned num, Group* group ); + bool hasGroup( Group* group ); + + void removeGroup( int field ); + void removeGroup( unsigned num, int field ); + void removeGroup( unsigned num, Group* group ); + void removeGroup( Group* group ); + int groupCount( int field ); bool isSetField( int field ); @@ -144,12 +154,6 @@ public __gc class Group : public IDisposable QF_STACK_CATCH } - void removeGroup( Group* group ) - { QF_STACK_TRY - m_pUnmanaged->removeGroup( group->unmanaged() ); - QF_STACK_CATCH - } - private: FIX::Group* m_pUnmanaged; bool disposed; diff --git a/src/.NET/Message.cpp b/src/.NET/Message.cpp index 9f13756f3..c1ccf0c5d 100644 --- a/src/.NET/Message.cpp +++ b/src/.NET/Message.cpp @@ -260,26 +260,73 @@ throw( FieldNotFound* ) checkDisposed(); return mapGetField( field, *m_pUnmanaged ); QF_STACK_CATCH } + void Message::setField( int field, String* value ) { QF_STACK_TRY checkDisposed(); return mapSetField( field, value, *m_pUnmanaged ); QF_STACK_CATCH } + void Message::removeField( int field ) { QF_STACK_TRY checkDisposed(); return mapRemoveField( field, *m_pUnmanaged ); QF_STACK_CATCH } + bool Message::hasGroup( int field ) { QF_STACK_TRY checkDisposed(); return mapHasGroup( field, *m_pUnmanaged ); QF_STACK_CATCH } + +bool Message::hasGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return mapHasGroup( num, field, *m_pUnmanaged ); + QF_STACK_CATCH +} + +bool Message::hasGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return mapHasGroup( num, group->field(), *m_pUnmanaged ); + QF_STACK_CATCH +} + +bool Message::hasGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return mapHasGroup( group->field(), *m_pUnmanaged ); + QF_STACK_CATCH +} + +void Message::removeGroup( int field ) +{ QF_STACK_TRY + checkDisposed(); return mapRemoveGroup( field, *m_pUnmanaged ); + QF_STACK_CATCH +} + +void Message::removeGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return mapRemoveGroup( num, field, *m_pUnmanaged ); + QF_STACK_CATCH +} + +void Message::removeGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return mapRemoveGroup( num, group->field(), *m_pUnmanaged ); + QF_STACK_CATCH +} + +void Message::removeGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return mapRemoveGroup( group->field(), *m_pUnmanaged ); + QF_STACK_CATCH +} + int Message::groupCount( int field ) { QF_STACK_TRY checkDisposed(); return mapGroupCount( field, *m_pUnmanaged ); QF_STACK_CATCH } + bool Message::isSetField( int field ) { QF_STACK_TRY return m_pUnmanaged->isSetField( field ); @@ -513,30 +560,76 @@ throw( FieldNotFound* ) return m_message->mapGetField( field, m_message->m_pUnmanaged->getHeader() ); QF_STACK_CATCH } + void Message::Header::setField( int field, String* value ) { QF_STACK_TRY checkDisposed(); return m_message->mapSetField( field, value, m_message->m_pUnmanaged->getHeader() ); QF_STACK_CATCH } + void Message::Header::removeField( int field ) { QF_STACK_TRY checkDisposed(); return m_message->mapRemoveField( field, m_message->m_pUnmanaged->getHeader() ); QF_STACK_CATCH } + bool Message::Header::hasGroup( int field ) { QF_STACK_TRY - checkDisposed(); - return m_message->mapHasGroup( field, m_message->m_pUnmanaged->getHeader() ); + checkDisposed(); return m_message->mapHasGroup( field, m_message->m_pUnmanaged->getHeader() ); + QF_STACK_CATCH +} + +bool Message::Header::hasGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapHasGroup( num, field, m_message->m_pUnmanaged->getHeader() ); + QF_STACK_CATCH +} + +bool Message::Header::hasGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapHasGroup( num, group->field(), m_message->m_pUnmanaged->getHeader() ); + QF_STACK_CATCH +} + +bool Message::Header::hasGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapHasGroup( group->field(), m_message->m_pUnmanaged->getHeader() ); + QF_STACK_CATCH +} + +void Message::Header::removeGroup( int field ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( field, m_message->m_pUnmanaged->getHeader() ); + QF_STACK_CATCH +} + +void Message::Header::removeGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( num, field, m_message->m_pUnmanaged->getHeader() ); QF_STACK_CATCH } + +void Message::Header::removeGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( num, group->field(), m_message->m_pUnmanaged->getHeader() ); + QF_STACK_CATCH +} + +void Message::Header::removeGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( group->field(), m_message->m_pUnmanaged->getHeader() ); + QF_STACK_CATCH +} + int Message::Header::groupCount( int field ) { QF_STACK_TRY checkDisposed(); return m_message->mapGroupCount( field, m_message->m_pUnmanaged->getHeader() ); QF_STACK_CATCH } + bool Message::Header::isSetField( int field ) { QF_STACK_TRY return m_message->m_pUnmanaged->getHeader().isSetField( field ); @@ -770,30 +863,76 @@ throw( FieldNotFound* ) return m_message->mapGetField( field, m_message->m_pUnmanaged->getTrailer() ); QF_STACK_CATCH } + void Message::Trailer::setField( int field, String* value ) { QF_STACK_TRY checkDisposed(); return m_message->mapSetField( field, value, m_message->m_pUnmanaged->getTrailer() ); QF_STACK_CATCH } + void Message::Trailer::removeField( int field ) { QF_STACK_TRY checkDisposed(); return m_message->mapRemoveField( field, m_message->m_pUnmanaged->getTrailer() ); QF_STACK_CATCH } + bool Message::Trailer::hasGroup( int field ) { QF_STACK_TRY - checkDisposed(); - return m_message->mapHasGroup( field, m_message->m_pUnmanaged->getTrailer() ); + checkDisposed(); return m_message->mapHasGroup( field, m_message->m_pUnmanaged->getTrailer() ); QF_STACK_CATCH } + +bool Message::Trailer::hasGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapHasGroup( num, field, m_message->m_pUnmanaged->getTrailer() ); + QF_STACK_CATCH +} + +bool Message::Trailer::hasGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapHasGroup( num, group->field(), m_message->m_pUnmanaged->getTrailer() ); + QF_STACK_CATCH +} + +bool Message::Trailer::hasGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapHasGroup( group->field(), m_message->m_pUnmanaged->getTrailer() ); + QF_STACK_CATCH +} + +void Message::Trailer::removeGroup( int field ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( field, m_message->m_pUnmanaged->getTrailer() ); + QF_STACK_CATCH +} + +void Message::Trailer::removeGroup( unsigned num, int field ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( num, field, m_message->m_pUnmanaged->getTrailer() ); + QF_STACK_CATCH +} + +void Message::Trailer::removeGroup( unsigned num, Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( num, group->field(), m_message->m_pUnmanaged->getTrailer() ); + QF_STACK_CATCH +} + +void Message::Trailer::removeGroup( Group* group ) +{ QF_STACK_TRY + checkDisposed(); return m_message->mapRemoveGroup( group->field(), m_message->m_pUnmanaged->getTrailer() ); + QF_STACK_CATCH +} + int Message::Trailer::groupCount( int field ) { QF_STACK_TRY checkDisposed(); return m_message->mapGroupCount( field, m_message->m_pUnmanaged->getTrailer() ); QF_STACK_CATCH } + bool Message::Trailer::isSetField( int field ) { QF_STACK_TRY return m_message->m_pUnmanaged->getTrailer().isSetField( field ); @@ -1168,6 +1307,24 @@ bool Message::mapHasGroup( int field, FIX::FieldMap& map ) QF_STACK_CATCH } +bool Message::mapHasGroup( unsigned num, int field, FIX::FieldMap& map ) +{ QF_STACK_TRY + return map.hasGroup( num, field ); + QF_STACK_CATCH +} + +void Message::mapRemoveGroup( int field, FIX::FieldMap& map ) +{ QF_STACK_TRY + map.removeGroup( field ); + QF_STACK_CATCH +} + +void Message::mapRemoveGroup( unsigned num, int field, FIX::FieldMap& map ) +{ QF_STACK_TRY + map.removeGroup( num, field ); + QF_STACK_CATCH +} + int Message::mapGroupCount( int field, FIX::FieldMap& map ) { QF_STACK_TRY return map.groupCount(field); diff --git a/src/.NET/Message.h b/src/.NET/Message.h index 7a0cdf175..01fcd869e 100644 --- a/src/.NET/Message.h +++ b/src/.NET/Message.h @@ -199,7 +199,17 @@ public __gc class Message : public FieldMap, public IDisposable String* getField( int field ) throw( FieldNotFound* ); void setField( int field, String* ); void removeField( int field ); + bool hasGroup( int field ); + bool hasGroup( unsigned num, int field ); + bool hasGroup( unsigned num, Group* group ); + bool hasGroup( Group* group ); + + void removeGroup( int field ); + void removeGroup( unsigned num, int field ); + void removeGroup( unsigned num, Group* group ); + void removeGroup( Group* group ); + int groupCount( int field ); bool isSetField( int field ); @@ -225,12 +235,6 @@ public __gc class Message : public FieldMap, public IDisposable QF_STACK_CATCH } - void removeGroup( Group* group ) - { QF_STACK_TRY - m_pUnmanaged->removeGroup( group->unmanaged() ); - QF_STACK_CATCH - } - __gc class Header : public FieldMap, public IDisposable { public: @@ -279,7 +283,17 @@ public __gc class Message : public FieldMap, public IDisposable String* getField( int field ) throw( FieldNotFound* ); void setField( int field, String* ); void removeField( int field ); + bool hasGroup( int field ); + bool hasGroup( unsigned num, int field ); + bool hasGroup( unsigned num, Group* group ); + bool hasGroup( Group* group ); + + void removeGroup( int field ); + void removeGroup( unsigned num, int field ); + void removeGroup( unsigned num, Group* group ); + void removeGroup( Group* group ); + int groupCount( int field ); bool isSetField( int field ); @@ -405,7 +419,17 @@ public __gc class Message : public FieldMap, public IDisposable String* getField( int field ) throw( FieldNotFound* ); void setField( int field, String* ); void removeField( int field ); + bool hasGroup( int field ); + bool hasGroup( unsigned num, int field ); + bool hasGroup( unsigned num, Group* group ); + bool hasGroup( Group* group ); + + void removeGroup( int field ); + void removeGroup( unsigned num, int field ); + void removeGroup( unsigned num, Group* group ); + void removeGroup( Group* group ); + int groupCount( int field ); bool isSetField( int field ); @@ -592,9 +616,12 @@ public __gc class Message : public FieldMap, public IDisposable void mapSetField( int field, String*, FIX::FieldMap& map ); String* mapGetField( int field, FIX::FieldMap& map ) - throw( FieldNotFound* ); + throw( FieldNotFound* ); void mapRemoveField( int field, FIX::FieldMap& map ); + bool mapHasGroup( unsigned num, int field, FIX::FieldMap& map ); bool mapHasGroup( int field, FIX::FieldMap& map ); + void mapRemoveGroup( unsigned num, int field, FIX::FieldMap& map ); + void mapRemoveGroup( int field, FIX::FieldMap& map ); int mapGroupCount( int field, FIX::FieldMap& map ); protected: diff --git a/src/C++/FieldMap.cpp b/src/C++/FieldMap.cpp index 38672b3cf..fbde134d7 100644 --- a/src/C++/FieldMap.cpp +++ b/src/C++/FieldMap.cpp @@ -84,14 +84,36 @@ throw( FieldNotFound ) QF_STACK_POP } -void FieldMap::removeGroup( int field ) +void FieldMap::removeGroup( int num, int field ) { Groups::iterator i = m_groups.find( field ); - std::vector < FieldMap* >::iterator j; - for ( j = i->second.begin(); j != i->second.end(); ++j ) - delete *j; + if ( i == m_groups.end() ) return; + if ( num <= 0 ) return; + std::vector< FieldMap* >& vector = i->second; + if ( vector.size() < ( unsigned ) num ) return; + + std::deque< FieldMap* > queue; + while( vector.size() > (unsigned)num ) + { + queue.push_back( vector.back() ); + vector.pop_back(); + } + delete vector.back(); + vector.pop_back(); + while( queue.size() ) + { + vector.push_back( queue.front() ); + queue.pop_front(); + } + + if( vector.size() == 0 ) + m_groups.erase( field ); +} - m_groups.erase( field ); +void FieldMap::removeGroup( int field ) +{ QF_STACK_PUSH(FieldMap::removeGroup) + removeGroup( groupCount(field), field ); + QF_STACK_POP } void FieldMap::removeField( int field ) @@ -104,6 +126,14 @@ void FieldMap::removeField( int field ) QF_STACK_POP } +bool FieldMap::hasGroup( int num, int field ) const +{ QF_STACK_PUSH(FieldMap::hasGroup) + + return groupCount(field) >= num; + + QF_STACK_POP +} + bool FieldMap::hasGroup( int field ) const { QF_STACK_PUSH(FieldMap::hasGroup) diff --git a/src/C++/FieldMap.h b/src/C++/FieldMap.h index 9df87d9ab..4ae017d38 100644 --- a/src/C++/FieldMap.h +++ b/src/C++/FieldMap.h @@ -129,11 +129,16 @@ class FieldMap FieldMap& getGroup( int num, int field, FieldMap& group ) const throw( FieldNotFound ); + /// Remove a specific instance of a group. + void removeGroup( int num, int field ); /// Remove all instances of a group. void removeGroup( int field ); - /// Check to see if a group exists + /// Check to see any instance of a group exists bool hasGroup( int field ) const; + /// Check to see if a specific instance of a group exists + bool hasGroup( int num, int field ) const; + /// Count the number of instance of a group int groupCount( int field ) const; /// Clear all fields from the map diff --git a/src/C++/Group.cpp b/src/C++/Group.cpp index 414c26bcd..d0b4c3937 100644 --- a/src/C++/Group.cpp +++ b/src/C++/Group.cpp @@ -40,6 +40,12 @@ Group& Group::getGroup( unsigned num, Group& group ) const throw( FieldNotFound QF_STACK_POP } +void Group::removeGroup( unsigned num, Group& group ) +{ QF_STACK_PUSH(Group::removeGroup) + FieldMap::removeGroup( num, group.field() ); + QF_STACK_POP +} + void Group::removeGroup( Group& group ) { QF_STACK_PUSH(Group::removeGroup) FieldMap::removeGroup( group.field() ); @@ -47,6 +53,12 @@ void Group::removeGroup( Group& group ) } bool Group::hasGroup( unsigned num, Group& group ) +{ QF_STACK_PUSH(Group::hasGroup) + return FieldMap::hasGroup( num, group.field() ); + QF_STACK_POP +} + +bool Group::hasGroup( const Group& group ) { QF_STACK_PUSH(Group::hasGroup) return FieldMap::hasGroup( group.field() ); QF_STACK_POP diff --git a/src/C++/Group.h b/src/C++/Group.h index 192a4c294..e43bcc793 100644 --- a/src/C++/Group.h +++ b/src/C++/Group.h @@ -60,7 +60,9 @@ class Group : public FieldMap void addGroup( Group& group ); Group& getGroup( unsigned num, Group& group ) const throw( FieldNotFound ); + void removeGroup( unsigned num, Group& group ); void removeGroup( Group& group ); + bool hasGroup( const Group& group ); bool hasGroup( unsigned num, Group& group ); private: diff --git a/src/C++/Message.h b/src/C++/Message.h index 13c3a96ab..1155b55d9 100644 --- a/src/C++/Message.h +++ b/src/C++/Message.h @@ -98,13 +98,15 @@ class Message : public FieldMap ( FieldMap::getGroup( num, group.field(), group ) ); } + void removeGroup( unsigned num, Group& group ) + { FieldMap::removeGroup( num, group.field() ); } void removeGroup( Group& group ) - { - FieldMap::removeGroup( group.field() ); - } + { FieldMap::removeGroup( group.field() ); } - bool hasGroup( unsigned num, Group& group ) + bool hasGroup( const Group& group ) { return FieldMap::hasGroup( group.field() ); } + bool hasGroup( unsigned num, Group& group ) + { return FieldMap::hasGroup( num, group.field() ); } protected: // Constructor for derived classes diff --git a/src/C++/test/MessagesTestCase.cpp b/src/C++/test/MessagesTestCase.cpp index d71120646..f9381179e 100644 --- a/src/C++/test/MessagesTestCase.cpp +++ b/src/C++/test/MessagesTestCase.cpp @@ -429,6 +429,16 @@ void MessageTestCase::addRemoveGroup::onRun( Message& object ) assert( object.hasGroup(2, group) ); assert( object.hasGroup(3, group) ); + object.removeGroup( 2, group ); + assert( object.hasGroup(1, group) ); + assert( object.hasGroup(2, group) ); + assert( !object.hasGroup(3, group) ); + + object.removeGroup( group ); + assert( object.hasGroup(1, group) ); + assert( !object.hasGroup(2, group) ); + assert( !object.hasGroup(3, group) ); + object.removeGroup( group ); assert( !object.hasGroup(1, group) ); assert( !object.hasGroup(2, group) ); diff --git a/src/java/quickfix_Group.cpp b/src/java/quickfix_Group.cpp index 75436ed78..41b49be4f 100644 --- a/src/java/quickfix_Group.cpp +++ b/src/java/quickfix_Group.cpp @@ -112,16 +112,46 @@ JNIEXPORT jobject JNICALL Java_quickfix_Group_getGroup QF_STACK_CATCH } -JNIEXPORT void JNICALL Java_quickfix_Group_removeGroup -( JNIEnv *pEnv, jobject obj, jobject group ) +JNIEXPORT void JNICALL Java_quickfix_Group_removeGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) { QF_STACK_TRY - if( isNullAndThrow(group) ) return; + JVM::set( pEnv ); + FIX::FieldMap* pMessage = getCPPGroup( obj ); + pMessage->removeGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Group_removeGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY JVM::set( pEnv ); - FIX::Group* pThis = getCPPGroup( obj ); - FIX::Group* pGroup = getCPPGroup( group ); - pThis->removeGroup( *pGroup ); + FIX::FieldMap* pMessage = getCPPGroup( obj ); + pMessage->removeGroup( num, field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Group_hasGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::FieldMap* pMessage = getCPPGroup( obj ); + pMessage->hasGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Group_hasGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::FieldMap* pMessage = getCPPGroup( obj ); + pMessage->hasGroup( num, field ); QF_STACK_CATCH } diff --git a/src/java/quickfix_Group.h b/src/java/quickfix_Group.h index 0959febd8..a348742bb 100644 --- a/src/java/quickfix_Group.h +++ b/src/java/quickfix_Group.h @@ -33,27 +33,19 @@ JNIEXPORT void JNICALL Java_quickfix_Group_destroy /* * Class: quickfix_Group - * Method: addGroup - * Signature: (Lquickfix/Group;)V + * Method: field + * Signature: ()I */ -JNIEXPORT void JNICALL Java_quickfix_Group_addGroup - (JNIEnv *, jobject, jobject); - -/* - * Class: quickfix_Group - * Method: getGroup - * Signature: (ILquickfix/Group;)Lquickfix/Group; - */ -JNIEXPORT jobject JNICALL Java_quickfix_Group_getGroup - (JNIEnv *, jobject, jint, jobject); +JNIEXPORT jint JNICALL Java_quickfix_Group_field + (JNIEnv *, jobject); /* * Class: quickfix_Group - * Method: removeGroup - * Signature: (Lquickfix/Group;)V + * Method: delim + * Signature: ()I */ -JNIEXPORT void JNICALL Java_quickfix_Group_removeGroup - (JNIEnv *, jobject, jobject); +JNIEXPORT jint JNICALL Java_quickfix_Group_delim + (JNIEnv *, jobject); /* * Class: quickfix_Group @@ -215,6 +207,54 @@ JNIEXPORT jboolean JNICALL Java_quickfix_Group_isSetField JNIEXPORT void JNICALL Java_quickfix_Group_removeField (JNIEnv *, jobject, jint); +/* + * Class: quickfix_Group + * Method: addGroup + * Signature: (Lquickfix/Group;)V + */ +JNIEXPORT void JNICALL Java_quickfix_Group_addGroup + (JNIEnv *, jobject, jobject); + +/* + * Class: quickfix_Group + * Method: getGroup + * Signature: (ILquickfix/Group;)Lquickfix/Group; + */ +JNIEXPORT jobject JNICALL Java_quickfix_Group_getGroup + (JNIEnv *, jobject, jint, jobject); + +/* + * Class: quickfix_Group + * Method: removeGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Group_removeGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Group + * Method: removeGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Group_removeGroup__II + (JNIEnv *, jobject, jint, jint); + +/* + * Class: quickfix_Group + * Method: hasGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Group_hasGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Group + * Method: hasGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Group_hasGroup__II + (JNIEnv *, jobject, jint, jint); + /* * Class: quickfix_Group * Method: groupIteratorCreate diff --git a/src/java/quickfix_Message.cpp b/src/java/quickfix_Message.cpp index f908e7b72..e21ab375e 100644 --- a/src/java/quickfix_Message.cpp +++ b/src/java/quickfix_Message.cpp @@ -86,61 +86,6 @@ JNIEXPORT jobject JNICALL Java_quickfix_Message_clone QF_STACK_CATCH } -JNIEXPORT void JNICALL Java_quickfix_Message_addGroup -( JNIEnv *pEnv, jobject obj, jobject group ) -{ QF_STACK_TRY - - if( isNullAndThrow(group) ) return; - - JVM::set( pEnv ); - FIX::Message* pMessage = getCPPMessage( obj ); - JVMObject jgroup( group ); - FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); - pMessage->addGroup( *pGroup ); - - QF_STACK_CATCH -} - -JNIEXPORT jobject JNICALL Java_quickfix_Message_getGroup -( JNIEnv *pEnv, jobject obj, jint num, jobject group ) -{ QF_STACK_TRY - - if( isNullAndThrow(group) ) return 0; - - JVM::set( pEnv ); - FIX::Message* pMessage = getCPPMessage( obj ); - JVMObject jgroup( group ); - FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); - - try - { - pMessage->getGroup( num, *pGroup ); - return group; - } - catch( FIX::FieldNotFound& e ) - { - throwNew( "Lquickfix/FieldNotFound;", FIX::IntConvertor::convert( e.field ).c_str() ); - return 0; - } - - QF_STACK_CATCH -} - -JNIEXPORT void JNICALL Java_quickfix_Message_removeGroup -( JNIEnv *pEnv, jobject obj, jobject group ) -{ QF_STACK_TRY - - if( isNullAndThrow(group) ) return; - - JVM::set( pEnv ); - FIX::Message* pMessage = getCPPMessage( obj ); - JVMObject jgroup( group ); - FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); - pMessage->removeGroup( *pGroup ); - - QF_STACK_CATCH -} - JNIEXPORT void JNICALL Java_quickfix_Message_setString ( JNIEnv *pEnv, jobject obj, jint field, jstring value ) { QF_STACK_TRY @@ -372,6 +317,90 @@ JNIEXPORT void JNICALL Java_quickfix_Message_removeField QF_STACK_CATCH } +JNIEXPORT void JNICALL Java_quickfix_Message_addGroup +( JNIEnv *pEnv, jobject obj, jobject group ) +{ QF_STACK_TRY + + if( isNullAndThrow(group) ) return; + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + JVMObject jgroup( group ); + FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); + pMessage->addGroup( *pGroup ); + + QF_STACK_CATCH +} + +JNIEXPORT jobject JNICALL Java_quickfix_Message_getGroup +( JNIEnv *pEnv, jobject obj, jint num, jobject group ) +{ QF_STACK_TRY + + if( isNullAndThrow(group) ) return 0; + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + JVMObject jgroup( group ); + FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); + + try + { + pMessage->getGroup( num, *pGroup ); + return group; + } + catch( FIX::FieldNotFound& e ) + { + throwNew( "Lquickfix/FieldNotFound;", FIX::IntConvertor::convert( e.field ).c_str() ); + return 0; + } + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_removeGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::FieldMap* pMessage = getCPPMessage( obj ); + pMessage->removeGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_removeGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::FieldMap* pMessage = getCPPMessage( obj ); + pMessage->removeGroup( num, field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_hasGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::FieldMap* pMessage = getCPPMessage( obj ); + pMessage->hasGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_hasGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::FieldMap* pMessage = getCPPMessage( obj ); + pMessage->hasGroup( num, field ); + + QF_STACK_CATCH +} + // Header Methods JNIEXPORT void JNICALL Java_quickfix_Message_headerSetString @@ -605,6 +634,90 @@ JNIEXPORT void JNICALL Java_quickfix_Message_headerRemoveField QF_STACK_CATCH } +JNIEXPORT void JNICALL Java_quickfix_Message_headerAddGroup +( JNIEnv *pEnv, jobject obj, jobject group ) +{ QF_STACK_TRY + + if( isNullAndThrow(group) ) return; + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + JVMObject jgroup( group ); + FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); + pMessage->getHeader().addGroup( pGroup->field(), *pGroup ); + + QF_STACK_CATCH +} + +JNIEXPORT jobject JNICALL Java_quickfix_Message_headerGetGroup +( JNIEnv *pEnv, jobject obj, jint num, jobject group ) +{ QF_STACK_TRY + + if( isNullAndThrow(group) ) return 0; + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + JVMObject jgroup( group ); + FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); + + try + { + pMessage->getHeader().getGroup( num, pGroup->field(), *pGroup ); + return group; + } + catch( FIX::FieldNotFound& e ) + { + throwNew( "Lquickfix/FieldNotFound;", FIX::IntConvertor::convert( e.field ).c_str() ); + return 0; + } + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_headerRemoveGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getHeader().removeGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_headerRemoveGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getHeader().removeGroup( num, field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_headerHasGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getHeader().hasGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_headerHasGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getHeader().hasGroup( num, field ); + + QF_STACK_CATCH +} + JNIEXPORT jobject JNICALL Java_quickfix_Message_headerIteratorCreate ( JNIEnv *pEnv, jobject obj, jobject iterator ) { QF_STACK_TRY @@ -896,6 +1009,89 @@ JNIEXPORT void JNICALL Java_quickfix_Message_trailerRemoveField QF_STACK_CATCH } +JNIEXPORT void JNICALL Java_quickfix_Message_trailerAddGroup +( JNIEnv *pEnv, jobject obj, jobject group ) +{ QF_STACK_TRY + + if( isNullAndThrow(group) ) return; + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + JVMObject jgroup( group ); + FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); + pMessage->getTrailer().addGroup( pGroup->field(), *pGroup ); + + QF_STACK_CATCH +} + +JNIEXPORT jobject JNICALL Java_quickfix_Message_trailerGetGroup +( JNIEnv *pEnv, jobject obj, jint num, jobject group ) +{ QF_STACK_TRY + + if( isNullAndThrow(group) ) return 0; + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + JVMObject jgroup( group ); + FIX::Group* pGroup = ( FIX::Group* ) jgroup.getLong( "cppPointer" ); + + try + { + pMessage->getTrailer().getGroup( num, pGroup->field(), *pGroup ); + return group; + } + catch( FIX::FieldNotFound& e ) + { + throwNew( "Lquickfix/FieldNotFound;", FIX::IntConvertor::convert( e.field ).c_str() ); + return 0; + } + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_trailerRemoveGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getTrailer().removeGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_trailerRemoveGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getTrailer().removeGroup( num, field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_trailerHasGroup__I +( JNIEnv *pEnv, jobject obj, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getTrailer().hasGroup( field ); + + QF_STACK_CATCH +} + +JNIEXPORT void JNICALL Java_quickfix_Message_trailerHasGroup__II +( JNIEnv *pEnv, jobject obj, jint num, jint field ) +{ QF_STACK_TRY + + JVM::set( pEnv ); + FIX::Message* pMessage = getCPPMessage( obj ); + pMessage->getTrailer().hasGroup( num, field ); + + QF_STACK_CATCH +} JNIEXPORT jobject JNICALL Java_quickfix_Message_trailerIteratorCreate ( JNIEnv *pEnv, jobject obj, jobject iterator ) { QF_STACK_TRY diff --git a/src/java/quickfix_Message.h b/src/java/quickfix_Message.h index 6de8485e2..0d654d41e 100644 --- a/src/java/quickfix_Message.h +++ b/src/java/quickfix_Message.h @@ -39,30 +39,6 @@ JNIEXPORT void JNICALL Java_quickfix_Message_destroy JNIEXPORT jobject JNICALL Java_quickfix_Message_clone (JNIEnv *, jobject); -/* - * Class: quickfix_Message - * Method: addGroup - * Signature: (Lquickfix/Group;)V - */ -JNIEXPORT void JNICALL Java_quickfix_Message_addGroup - (JNIEnv *, jobject, jobject); - -/* - * Class: quickfix_Message - * Method: getGroup - * Signature: (ILquickfix/Group;)Lquickfix/Group; - */ -JNIEXPORT jobject JNICALL Java_quickfix_Message_getGroup - (JNIEnv *, jobject, jint, jobject); - -/* - * Class: quickfix_Message - * Method: removeGroup - * Signature: (Lquickfix/Group;)V - */ -JNIEXPORT void JNICALL Java_quickfix_Message_removeGroup - (JNIEnv *, jobject, jobject); - /* * Class: quickfix_Message * Method: setString @@ -223,6 +199,54 @@ JNIEXPORT jboolean JNICALL Java_quickfix_Message_isSetField JNIEXPORT void JNICALL Java_quickfix_Message_removeField (JNIEnv *, jobject, jint); +/* + * Class: quickfix_Message + * Method: addGroup + * Signature: (Lquickfix/Group;)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_addGroup + (JNIEnv *, jobject, jobject); + +/* + * Class: quickfix_Message + * Method: getGroup + * Signature: (ILquickfix/Group;)Lquickfix/Group; + */ +JNIEXPORT jobject JNICALL Java_quickfix_Message_getGroup + (JNIEnv *, jobject, jint, jobject); + +/* + * Class: quickfix_Message + * Method: removeGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_removeGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Message + * Method: removeGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_removeGroup__II + (JNIEnv *, jobject, jint, jint); + +/* + * Class: quickfix_Message + * Method: hasGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_hasGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Message + * Method: hasGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_hasGroup__II + (JNIEnv *, jobject, jint, jint); + /* * Class: quickfix_Message * Method: toString @@ -463,6 +487,54 @@ JNIEXPORT jboolean JNICALL Java_quickfix_Message_headerIsSetField JNIEXPORT void JNICALL Java_quickfix_Message_headerRemoveField (JNIEnv *, jobject, jint); +/* + * Class: quickfix_Message + * Method: headerAddGroup + * Signature: (Lquickfix/Group;)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_headerAddGroup + (JNIEnv *, jobject, jobject); + +/* + * Class: quickfix_Message + * Method: headerGetGroup + * Signature: (ILquickfix/Group;)Lquickfix/Group; + */ +JNIEXPORT jobject JNICALL Java_quickfix_Message_headerGetGroup + (JNIEnv *, jobject, jint, jobject); + +/* + * Class: quickfix_Message + * Method: headerRemoveGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_headerRemoveGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Message + * Method: headerRemoveGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_headerRemoveGroup__II + (JNIEnv *, jobject, jint, jint); + +/* + * Class: quickfix_Message + * Method: headerHasGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_headerHasGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Message + * Method: headerHasGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_headerHasGroup__II + (JNIEnv *, jobject, jint, jint); + /* * Class: quickfix_Message * Method: headerIteratorCreate @@ -647,6 +719,54 @@ JNIEXPORT jboolean JNICALL Java_quickfix_Message_trailerIsSetField JNIEXPORT void JNICALL Java_quickfix_Message_trailerRemoveField (JNIEnv *, jobject, jint); +/* + * Class: quickfix_Message + * Method: trailerAddGroup + * Signature: (Lquickfix/Group;)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_trailerAddGroup + (JNIEnv *, jobject, jobject); + +/* + * Class: quickfix_Message + * Method: trailerGetGroup + * Signature: (ILquickfix/Group;)Lquickfix/Group; + */ +JNIEXPORT jobject JNICALL Java_quickfix_Message_trailerGetGroup + (JNIEnv *, jobject, jint, jobject); + +/* + * Class: quickfix_Message + * Method: trailerRemoveGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_trailerRemoveGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Message + * Method: trailerRemoveGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_trailerRemoveGroup__II + (JNIEnv *, jobject, jint, jint); + +/* + * Class: quickfix_Message + * Method: trailerHasGroup + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_trailerHasGroup__I + (JNIEnv *, jobject, jint); + +/* + * Class: quickfix_Message + * Method: trailerHasGroup + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_quickfix_Message_trailerHasGroup__II + (JNIEnv *, jobject, jint, jint); + /* * Class: quickfix_Message * Method: trailerIteratorCreate diff --git a/src/java/src/quickfix/FieldMap.java b/src/java/src/quickfix/FieldMap.java index 70c56c30a..17bd0c48e 100644 --- a/src/java/src/quickfix/FieldMap.java +++ b/src/java/src/quickfix/FieldMap.java @@ -59,5 +59,15 @@ public abstract class FieldMap { public abstract boolean isSetField(int field); public abstract boolean isSetField(Field field); public abstract void removeField(int field); + public abstract void addGroup(Group group); + public abstract Group getGroup(int num, Group group) throws FieldNotFound; + public abstract void removeGroup(int field); + public abstract void removeGroup(int num, int field); + public abstract void removeGroup(int num, Group group); + public abstract void removeGroup(Group group); + public abstract void hasGroup(int field); + public abstract void hasGroup(int num, int field); + public abstract void hasGroup(int num, Group group); + public abstract void hasGroup(Group group); public abstract Iterator iterator(); } diff --git a/src/java/src/quickfix/Group.java b/src/java/src/quickfix/Group.java index 6d2d5b74b..f9aa840d6 100644 --- a/src/java/src/quickfix/Group.java +++ b/src/java/src/quickfix/Group.java @@ -39,9 +39,8 @@ protected void finalize() { private native void create(int field, int delim, int[] order); private native void destroy(); - public native void addGroup(Group group); - public native Group getGroup(int num, Group group) throws FieldNotFound; - public native void removeGroup(Group group); + public native int field(); + public native int delim(); public native void setString(int field, String value); public native void setBoolean(int field, boolean value); @@ -127,6 +126,25 @@ public boolean isSetField(Field field) { } public native void removeField(int field); + public native void addGroup(Group group); + public native Group getGroup(int num, Group group) throws FieldNotFound; + public native void removeGroup(int field); + public native void removeGroup(int num, int field); + public void removeGroup(int num, Group group) { + removeGroup( num, group.field() ); + } + public void removeGroup(Group group) { + removeGroup( group.field() ); + } + public native void hasGroup(int field); + public native void hasGroup(int num, int field); + public void hasGroup(int num, Group group) { + hasGroup( num, group.field() ); + } + public void hasGroup(Group group) { + hasGroup( group.field() ); + } + public java.util.Iterator iterator() { return new Iterator( this ); } diff --git a/src/java/src/quickfix/Message.java b/src/java/src/quickfix/Message.java index b699a2ea0..b341d309e 100644 --- a/src/java/src/quickfix/Message.java +++ b/src/java/src/quickfix/Message.java @@ -92,10 +92,6 @@ protected void finalize() { public native Object clone(); - public native void addGroup(Group group); - public native Group getGroup(int num, Group group) throws FieldNotFound; - public native void removeGroup(Group group); - public native void setString(int field, String value); public native void setBoolean(int field, boolean value); public native void setChar(int field, char value); @@ -180,6 +176,25 @@ public boolean isSetField(Field field) { } public native void removeField(int field); + public native void addGroup(Group group); + public native Group getGroup(int num, Group group) throws FieldNotFound; + public native void removeGroup(int field); + public native void removeGroup(int num, int field); + public void removeGroup(int num, Group group) { + removeGroup( num, group.field() ); + } + public void removeGroup(Group group) { + removeGroup( group.field() ); + } + public native void hasGroup(int field); + public native void hasGroup(int num, int field); + public void hasGroup(int num, Group group) { + hasGroup( num, group.field() ); + } + public void hasGroup(Group group) { + hasGroup( group.field() ); + } + public java.util.Iterator iterator() { return new Iterator( this ); } @@ -373,6 +388,37 @@ public void removeField(int field) { headerRemoveField( field ); } + public void addGroup(Group group) { + headerAddGroup( group ); + } + public Group getGroup(int num, Group group) throws FieldNotFound { + return headerGetGroup( num, group ); + } + public void removeGroup(int field) { + headerRemoveGroup( field ); + } + public void removeGroup(int num, int field) { + headerRemoveGroup( num, field ); + } + public void removeGroup(int num, Group group) { + headerRemoveGroup( num, group.field() ); + } + public void removeGroup(Group group) { + headerRemoveGroup( group.field() ); + } + public void hasGroup(int field) { + headerHasGroup( field ); + } + public void hasGroup(int num, int field) { + headerHasGroup( num, field ); + } + public void hasGroup(int num, Group group) { + headerHasGroup( num, group.field() ); + } + public void hasGroup(Group group) { + headerHasGroup( group.field() ); + } + public java.util.Iterator iterator() { return new Iterator( message ); } @@ -528,6 +574,37 @@ public void removeField(int field) { trailerRemoveField( field ); } + public void addGroup(Group group) { + trailerAddGroup( group ); + } + public Group getGroup(int num, Group group) throws FieldNotFound { + return trailerGetGroup( num, group ); + } + public void removeGroup(int field) { + trailerRemoveGroup( field ); + } + public void removeGroup(int num, int field) { + trailerRemoveGroup( num, field ); + } + public void removeGroup(int num, Group group) { + trailerRemoveGroup( num ); + } + public void removeGroup(Group group) { + trailerRemoveGroup( group ); + } + public void hasGroup(int field) { + trailerHasGroup( field ); + } + public void hasGroup(int num, int field) { + trailerHasGroup( num, field ); + } + public void hasGroup(int num, Group group) { + trailerHasGroup( num, group ); + } + public void hasGroup(Group group) { + trailerHasGroup( group ); + } + public java.util.Iterator iterator() { return new Iterator( message ); } @@ -560,6 +637,25 @@ public java.util.Iterator iterator() { private native boolean headerIsSetField(int field); private native void headerRemoveField(int field); + public native void headerAddGroup(Group group); + public native Group headerGetGroup(int num, Group group) throws FieldNotFound; + private native void headerRemoveGroup(int field); + private native void headerRemoveGroup(int num, int field); + private void headerRemoveGroup(int num, Group group) { + headerRemoveGroup( num, group.field() ); + } + public void headerRemoveGroup(Group group) { + headerRemoveGroup( group.field() ); + } + public native void headerHasGroup(int field); + public native void headerHasGroup(int num, int field); + public void headerHasGroup(int num, Group group) { + headerHasGroup( num, group.field() ); + } + public void headerHasGroup(Group group) { + headerHasGroup( group.field() ); + } + private native Iterator headerIteratorCreate( Header.Iterator i ); private native boolean headerIteratorHasNext( Header.Iterator i ); private native Object headerIteratorNext( Header.Iterator i ); @@ -587,6 +683,25 @@ public java.util.Iterator iterator() { private native boolean trailerIsSetField(int field); private native void trailerRemoveField(int field); + public native void trailerAddGroup(Group group); + public native Group trailerGetGroup(int num, Group group) throws FieldNotFound; + private native void trailerRemoveGroup(int field); + private native void trailerRemoveGroup(int num, int field); + private void trailerRemoveGroup(int num, Group group) { + trailerRemoveGroup( num, group.field() ); + } + public void trailerRemoveGroup(Group group) { + trailerRemoveGroup( group.field() ); + } + public native void trailerHasGroup(int field); + public native void trailerHasGroup(int num, int field); + public void trailerHasGroup(int num, Group group) { + trailerHasGroup( num, group.field() ); + } + public void trailerHasGroup(Group group) { + trailerHasGroup( group.field() ); + } + private native Iterator trailerIteratorCreate( Trailer.Iterator i ); private native boolean trailerIteratorHasNext( Trailer.Iterator i ); private native Object trailerIteratorNext( Trailer.Iterator i );