Open-RJ Logo Open-RJ

Home page

Download Open-RJ

Samples application for your edification

Documentation for the Open-RJ API and mappings

What's been happening with Open-RJ?

Who's involved with Open-RJ?

Who's using Open-RJ?

Get in contact with the Open-RJ team

Page updated:

Project History

1.5.1 stable (28th May 2006; download)

  • Supports "Processing Instructions" - for field name aliases. (See the samples for an example of a database using aliases.)
  • Supports new flag ORJ_FLAG_IGNORECASEONLOOKUP, which applies to field name lookup via the API.
  • ORJ_Database_GetFieldA()
  • Open-RJ/C++: Lookup() function (openrj/cpp/functions.hpp)
  • Open-RJ/STL: field_assoc_insert_iterator class (openrj/stl/iterator.hpp).
  • Open-RJ/C++.NET:
    • Fields collection class
    • Record.HasField()
    • Record.Comment
    • Record.GetNamedFields()
    • OpenRJException class
    • UnknownFieldNameException class
    • Database.Flags enumeration
    • Database.ErrorCode enumeration
    • Database.ParseErrorCode enumeration
    • Database.Fields
    • Database.GetNamedFields()
  • Open-RJ/Python:
  • Open-RJ/Ruby:
  • eight C examples
  • six C+
  • examples
  • seven STL examples

1.4.1 stable (8th August 2005; download)

Two additions to the base API:

  • ORJ_FormatErrorA(), a rich error formatting function, providing sprintf()-like semantics, with Open-RJ error and parse-error information retrieval
  • ORJ_Record_FindNextFieldA(), a flexible function for finding fields based on field positions and/or names and/or values.

1.3.4 stable (17th July 2005; download)

Minor fix to version 1.3.3 in order to handle databases containing CR+LF line termination pairs, irrespective of operating system.

1.3.3 stable (28th June 2005; download)

Minor fixes and enhancements over version 1.3.2:

  • fixed an assert in orjapi.c, which erroneously fired when a record marker had trailing whitespace.
  • Compatible with Mac OS-X
  • added c_str_ptr_null() and c_str_data() string access shims, for ::openrj, ::openrj::cpp and ::openrj::stl constructs.
  • openrj::cpp::record now uses Static Covariance (aka Argument-dependent Covariance) for subscript operator. This means that if it's an integer then a Field is returned, and if it's a string then the value (as a string) is returned.
  • added reverse iterator support in the record and database classes of the STL mapping.
  • general tidying of sample programs

1.3.2 stable (25th May 2005; download)

There are four changes. The first two are aimed at helping users get to grips with the library, as follows:

  • the first change is the addition of three more test programs - C_minimal, Cpp_minimal and STL_minimal - that demonstrate minimal and easy use of the C++ and STL mappings.
  • the second change is a "Getting Started" page within the documentation.

Thanks to Rajiv Bhagwat for showing where things were not as easy as they should have been. The other two changes are code changes in the C++ and STL mappings:

  • The Record/record classes, in the Open-RJ/C++ and Open-RJ/STL mappings respectively, now return const Field/field instances, to prevent misuse in the following form:

    record[0] = record[1]; // Will now not compile

  • The Open-RJ/C++ Record class has enhanced subscript operators to prevent ambiguous resolution when used with literal integers.

Download from here

1.3.1 stable (23rd May 2005; download)

The main change is that record comments are now made available in the API, in the form of the 'comment' member of the ORJRecordA structure, and the ORJ_Record_GetCommentA() function.

There is also a new auto-link header, which causes compilers that support such behaviour to insert comment records that direct their linker to link to the appropriate Open-RJ library, e.g., without requiring explicit specification in the linker command. Some developers prefer this kind of automatic behaviour, and now have this facility if they so wish just by including openrj_implicit_link.h

Other changes are as follows:

  • c_str_ptr() shims are added for ORJStringA. (See chapter 19 of Imperfect C++ ( for an explanation of the Shims concept)
  • c_str_data() and c_str_len() shims are provided in addition to c_str_ptr(). These are of general use, but are particularly useful with STLSoft's basic_string_view template

Changes to the mappings are as follows:

    C++ mapping:
    • the headers are separated out, one per class. They are all fully configured, i.e. including openrj/cpp/filedatabase.hpp includes openrj/cpp/record.hpp and openrj/cpp/field.hpp
    • addition of (in-)equality operators (operator == and operator !=) for Field class
    • addition of String typedef within openrj::cpp namespace, which is actually a typedef for stlsoft::basic_string_view (for providing views onto the string information within database fields).
    • addition of Record::GetComment(), Record::HasField(char const *name), Record::HasField(char const *name, char const *value), Record::HasFieldWithValue(char const *value) methods
    • Record::operator []() overloads taking string objects now return String rather than ORJString
    STL mapping:
    • addition of record::comment() method
    Python mapping:
    • addition of comment property to record type
    Ruby mapping:
    • addition of comment property to record type

Download from here

1.2.1 stable (4th March 2005; download)

The main change is the addition of the following language mappings:

  • Open-RJ/C++.NET mapping
  • Open-RJ/Python mapping

In addition, there are much improved, and more comprehensive, makefiles. The components for each supported compiler may be built from its respective directory under the 'build' directory

1.0.1 stable (1st October 2004; download)

First release of the library.

%% Instruments
Type:   Acoustic Guitar
Class:  Stringed
Voice:  Resonance
Type:   Electric Guitar
Class:  Stringed
Voice:  Magnet
Type:   Electric Organ
Class:  Air
Voice:  Blower
Valid XHTML 1.0! Website content and Open-RJ implementation © Greg Peet & Matthew Wilson Logo