// // Programmer: Craig Stuart Sapp // Creation Date: Thu Nov 22 10:57:44 PST 2001 // Last Modified: Mon Nov 26 18:34:55 PST 2001 // Filename: ...museinfo/examples/all/notelink.cpp // Web Address: http://sig.sapp.org/examples/museinfo/humdrum/notelink.cpp // Syntax: C++; museinfo // // Description: Creates a linked list of humdrum data. // // #include "humdrum.h" #include class Node { public: Node(void) { lastline.setSize(0); lastspine.setSize(0); nextline.setSize(0); nextspine.setSize(0); } void add(Node& newnode); Array lastline; Array lastspine; Array nextline; Array nextspine; }; void Node::add(Node& newnode) { int i; for (i=0; i ANode; typedef Array AANode; void processHumdrumFile(HumdrumFile& hfile, AANode& nodes); void printAnalysis (HumdrumFile& hfile, AANode& nodes); int hasSpineManip (HumdrumRecord& aRecord); void insertNullNode (int location, ANode& current); void processTransition (HumdrumRecord& aRecord, ANode& current, int& init, int& tinit); void processData (HumdrumRecord& aRecord, ANode& current, int line); void deleteNode (int index, ANode& current); int findLineBack (int currentline, int target); //////////////////////////////////////////////////////////////////////// int main(int argc, char** argv) { if (argc != 2) { cout << "Usage: " << argv[0] << " input-kern-file" << endl; exit(1); } AANode nodes; HumdrumFile hfile(argv[1]); processHumdrumFile(hfile, nodes); printAnalysis(hfile, nodes); return 0; } //////////////////////////////////////////////////////////////////////// ////////////////////////////// // // printAnalysis -- // void printAnalysis(HumdrumFile& hfile, AANode& nodes) { int i, j, k; int hline; cout << "!! LASTLINE ANALYSIS ---------------" << endl; for (i=0; i=0; i--) { if (hfile[i].getType() != E_humrec_data) { continue; } for (j=0; j& lines) { int i = currentline - 1; while (i>0 && lines[i] != target) { i--; } return i; } ////////////////////////////// // // processData -- // void processData(HumdrumRecord& aRecord, ANode& current, int line) { if (current.getSize() != aRecord.getFieldCount()) { cout << "ERROR in processData" << endl; exit(1); } int i; for (i=0; i 0) { init = 1; } } ////////////////////////////// // // deleteNode -- // void deleteNode(int index, ANode& current) { if (index == current.getSize() - 1) { current.setSize(current.getSize() - 1 ); return; } int i; for (i=index; i location) { int i; current.append(current[current.getSize()-1]); for (i=current.getSize()-2; i>location; i--) { current[i] = current[i-1]; } current[location] = node; return; } cout << "Error in insert NULL" << endl; cout << "Location = " << location << endl; cout << "Size = " << current.getSize() << endl; exit(1); } ////////////////////////////// // // hasSpineManip -- // int hasSpineManip(HumdrumRecord& aRecord) { int i; for (i=0; i